dline.cpp

説明を見る。
00001 /**
00002    * \file dline.cpp
00003    * \brief 遅延バッファの実装
00004    *
00005    */
00006 #include "dline.h"
00007 namespace dline{
00008     CShifter::CShifter( int aMaxDelay )
00009     {
00010         head = 0;
00011         maxDelay = aMaxDelay;
00012         state = new shortfract[maxDelay];
00013         
00014         if ( state ){           // 割り当てに成功
00015             for ( unsigned int i=0; i < maxDelay; i++ )
00016                 state[i] = 0.0r;
00017         }
00018     }
00019     
00020     CShifter::~CShifter(void)
00021     {
00022         if ( state )    //  割り当てに成功しているか
00023             delete[] state;
00024     }
00025     
00026     void CShifter::run( const shortfract in[], shortfract out[], int count, int delay )
00027     {
00028         int delayIndex;             // 遅延データのインデックス
00029         
00030         if ( delay >= maxDelay )    // maxDelayより大きな遅延は、maxDelayだけ遅延させる。
00031             delay = maxDelay - 1;
00032         
00033         if ( state ){    // 割り当てに成功しているか
00034             for( int i = 0; i<count; i++ ){
00035                 state[head] = in[i];            // サンプルを遅延バッファに格納
00036                 delayIndex = head + delay;      // 出力するデータの位置を計算
00037                 if ( delayIndex >= maxDelay )   // 遅延データがバッファの上側境界を超えたところなら
00038                     delayIndex -= maxDelay;     // ラップアラウンド
00039                 out[i] = state[delayIndex];     // 遅延データを出力
00040                 head --;                        // 遅延バッファの先頭を更新
00041                 if ( head < 0 )                 // バッファの先頭がバッファの下側境界を超えたら
00042                     head = maxDelay - 1;        // ラップアラウンド
00043             }
00044         }
00045         else            // state 割り当て失敗の場合
00046             for( int i = 0; i<count; i++ )
00047                 out[i] = in[i];            // 入力をそのまま出力
00048     }
00049 };

Flangerに対してWed Jul 25 11:10:16 2007に生成されました。  doxygen 1.5.2