#include <dline.h>
与えられたサイズのバッファを確保し、遅延バッファとして使う。
Public メソッド | |
| CShifter (int aMaxDelay) | |
| 遅延バッファを確保するコンストラクタ | |
| virtual | ~CShifter (void) |
| デストラクタ | |
| virtual void | run (const shortfract in[], shortfract out[], int count, int delay) |
| 遅延を行う | |
| dline::CShifter::CShifter | ( | int | aMaxDelay | ) |
遅延バッファを確保するコンストラクタ
| 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 }
| dline::CShifter::~CShifter | ( | void | ) | [virtual] |
| void dline::CShifter::run | ( | const shortfract | in[], | |
| shortfract | out[], | |||
| int | count, | |||
| int | delay | |||
| ) | [virtual] |
遅延を行う
| in | 入力バッファ | |
| out | 出力バッファ | |
| count | 入力バッファのサンプル数。最大遅延量をこえてもかまわない。 | |
| delay | 出力バッファへの遅延量。0でもかまわない。。 |
最大遅延量を以上のdelayを指定すると、最大遅延量-1 分遅延させる。最大遅延量は コンストラクタ CShifter::CShifter() であたえる
参照元 afw::processData().
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 }
1.5.2