00001 #include "afw.h" 00002 00003 /** \file processdata.cpp 00004 * \brief オーディオコールバック関数 00005 * \author アナログ・デバイセズ株式会社 00006 * \version 1.0 00007 * \date 2006.Sep.8 00008 * 00009 * このファイルは、オーディオ処理のコールバック関数を含む。 00010 */ 00011 namespace afw { 00012 00013 short osc() 00014 { 00015 static int y1 = 4277; // sin( 2*pi*1000 / 48000 ) * 32768 00016 static int y0 = 0; 00017 int result; 00018 00019 result = (32478*y1>>14) - y0; 00020 y0 = y1; 00021 y1 = result; 00022 return result; 00023 00024 } 00025 /** コールバック関数の処理化 00026 * 00027 * コールバック関数を呼ぶ前に初期化の必要がある場合は、この関数内部で行う。 00028 * @param count afw::processData() が呼び出されるとき、各バッファに格納されているオーディオデータの数 00029 */ 00030 void initProcessData( int count ) 00031 { 00032 // 必要に応じてここで processData用の初期化を行う 00033 } 00034 00035 /** オーディオ・コールバック関数 00036 * 00037 * @param leftIn 左チャンネルの入力データバッファ 00038 * @param rightIn 右チャンネルの入力データバッファ 00039 * @param leftOut 左チャンネルの出力データバッファ 00040 * @param rightOut 右チャンネルの出力データバッファ 00041 * @param count 各バッファに格納されているオーディオデータの数 00042 * 00043 * この関数はDMAが受信バッファをいっぱいにするたびに割り込み経由で呼ばれる。 00044 * 引数として渡されるのは受信データを含む入力バッファのほか、送信データを 00045 * 格納するために使う出力バッファとデータ個数である。 00046 * ユーザーは関数内部で入力バッファのデータを加工して、出力バッファに送信すべき 00047 * データをおく。 00048 * 00049 * 配列はshortfract型である。この16bit固定小数点型はshortと同じ大きさを 00050 * 持つが、四則は固定小数点領域で定義されている。 00051 * 00052 * for文は常に必要なので、改造する場合はfor文の内側だけを書き換える。引数 00053 * である配列の各要素は、オーディオのサンプルデータが順番に格納されたもの 00054 * である。したがって、これらを順番に処理することで、オーディオ処理を実装 00055 * できる。 00056 * 00057 * 割り込みソースのクリアなどは、この関数の呼び出し側で行うので、関数内で 00058 * 処理する必要はない。 00059 */ 00060 void processData( 00061 const short leftIn[], // Input Left Samples 00062 const short rightIn[], // Input Right Samples 00063 short leftOut[], // Output Left Samples 00064 short rightOut[], // Output Left Samples 00065 int count 00066 ) 00067 { 00068 00069 for ( int i=0; i<count; i++ ) { 00070 // ここで信号処理を行う 00071 } 00072 } 00073 } // namespace afw