processdata.cpp

説明を見る。
00001 #include "afw.h"
00002 #include "flt.h"
00003 /** \file processdata.cpp
00004  *  \brief オーディオコールバック関数
00005  *  \author アナログ・デバイセズ株式会社
00006  *
00007  * このファイルは、オーディオ処理のコールバック関数を含む。
00008  */
00009 namespace afw{
00010 /** タップ数
00011 * インパルス応答列の長さを与える
00012 */
00013     const int taps = 63;    
00014 /** インパルス応答
00015 * FIRフィルタに持たせるインパルス応答(伝達関数の時間表現)を格納する。
00016 * SciLab 4.0で、以下のコマンドにより生成
00017 *
00018 * hn = eqfir(63, [0 0.1042; 0.125 0.5], [1 0], [1,0.1]); 
00019 */
00020     shortfract coeff[taps] = {
00021             0.0084404r,
00022           - 0.0385608r,
00023             0.0121594r,
00024             0.0162905r,
00025             0.0098998r,
00026             0.0015264r,
00027           - 0.0060037r,
00028           - 0.0104836r,
00029           - 0.0101162r,
00030           - 0.0046826r,
00031             0.0037032r,
00032             0.0111361r,
00033             0.0135995r,
00034             0.0089985r,
00035           - 0.0013166r,
00036           - 0.0125649r,
00037           - 0.0186849r,
00038           - 0.0154366r,
00039           - 0.0027980r,
00040             0.0139928r,
00041             0.0262920r,
00042             0.0262934r,
00043             0.0109027r,
00044           - 0.0151293r,
00045           - 0.0401840r,
00046           - 0.0495764r,
00047           - 0.0318173r,
00048             0.0158958r,
00049             0.0850927r,
00050             0.1579760r,
00051             0.2132524r,
00052             0.2338423r,
00053             0.2132524r,
00054             0.1579760r,
00055             0.0850927r,
00056             0.0158958r,
00057           - 0.0318173r,
00058           - 0.0495764r,
00059           - 0.0401840r,
00060           - 0.0151293r,
00061             0.0109027r,
00062             0.0262934r,
00063             0.0262920r,
00064             0.0139928r,
00065           - 0.0027980r,
00066           - 0.0154366r,
00067           - 0.0186849r,
00068           - 0.0125649r,
00069           - 0.0013166r,
00070             0.0089985r,
00071             0.0135995r,
00072             0.0111361r,
00073             0.0037032r,
00074           - 0.0046826r,
00075           - 0.0101162r,
00076           - 0.0104836r,
00077           - 0.0060037r,
00078             0.0015264r,
00079             0.0098998r,
00080             0.0162905r,
00081             0.0121594r,
00082           - 0.0385608r,
00083             0.0084404r
00084     };
00085 
00086 /** フィルタ・オブジェクト
00087 * FIRフィルタを実装するためのオブジェクト。CFilter型は、他のフィルタ型の先祖に当たる。
00088 * 実際に生成されるフィルタ・オブジェクトは、CFilterの子孫のクラスに属する。
00089 */
00090     flt::CFilter* filter;
00091     
00092 /** コールバック関数の処理化
00093 *
00094 * フィルタ・オブジェクトを生成して実行の準備を行う。生成するオブジェクトのクラスは flt::CFIRFilterである。
00095 * オブジェクト生成時に係数配列やタップ数を指定するため、実行時にこれらのパラメータを指定する必要はない。
00096 */
00097     void initProcessData(void)
00098     {
00099         // firフィルタを作る
00100         filter = new flt::CFIRFilter( coeff, taps );
00101     }
00102 /** オーディオ・コールバック関数
00103    *
00104    * @param leftIn 左チャンネルの入力データバッファ
00105    * @param rightIn 右チャンネルの入力データバッファ
00106    * @param leftOut 左チャンネルの出力データバッファ
00107    * @param rightOut 右チャンネルの出力データバッファ
00108    * @param count 各バッファに格納されているオーディオデータの数
00109    *
00110    * 左チャンネルにFIRフィルタを施して出力する。同じ入力データを
00111    * 比較のため処理せずに右チャンネルにも出力する。
00112    *
00113    * 実行に当たって必要なfilterオブジェクトの生成は、 afw::initProcessDataで行っている。
00114    */
00115 
00116     void processData( 
00117                       const shortfract leftIn[], 
00118                       const shortfract rightIn[], 
00119                       shortfract leftOut[], 
00120                       shortfract rightOut[],
00121                       int count
00122                      )
00123     {    
00124             // 注意:左チャンネルしか処理していない
00125         filter->run( leftIn, leftOut, count ); 
00126 
00127             // 参照用に未処理の信号を右チャンネルに出力している
00128         for( int i=0; i<count; i++ )
00129             rightOut[i] = leftIn[i];
00130     }   // processData
00131 
00132 };  // namespace afw

FIR filter sample by wrapper classに対してTue Dec 19 23:23:06 2006に生成されました。  doxygen 1.5.1-p1