00001 /** 00002 * \file dline.h 00003 * \brief 遅延バッファの実装 00004 * 00005 */ 00006 #include <shortfract> 00007 /** 遅延バッファ 00008 * 00009 * 遅延バッファ型を提供する名前空間 00010 */ 00011 namespace dline{ 00012 /** 遅延バッファ型 00013 * 00014 * 与えられたサイズのバッファを確保し、遅延バッファとして使う。 00015 */ 00016 class CShifter { 00017 public: 00018 /** 遅延バッファを確保するコンストラクタ 00019 * @param aMaxDelay 最大遅延量を指定する。単位はサンプル。 00020 * 00021 * 遅延バッファを確保し、0で初期化する。確保に失敗したら内部バッファにはNULLをいれる。 00022 */ 00023 CShifter( int aMaxDelay ); 00024 00025 /** デストラクタ 00026 * 00027 * 内部バッファを開放する 00028 */ 00029 virtual ~CShifter(void); 00030 00031 /** 遅延を行う 00032 * @param in 入力バッファ 00033 * @param out 出力バッファ 00034 * @param count 入力バッファのサンプル数。最大遅延量をこえてもかまわない。 00035 * @param delay 出力バッファへの遅延量。0でもかまわない。。 00036 * 00037 * 与えられた入力を内部バッファにコピーしながら、内部バッファの内容を出力にコピーする。 00038 * delayが0のとき、出力には入力の値がそのままコピーされる。ディレイが1のときには、 00039 * 1サンプル遅れた値がコピーされる。 00040 * 00041 * 最大遅延量を以上のdelayを指定すると、最大遅延量-1 分遅延させる。最大遅延量は 00042 * コンストラクタ CShifter::CShifter() であたえる 00043 */ 00044 virtual void run( const shortfract in[], shortfract out[], int count, int delay ); 00045 private: 00046 /** 最大遅延量 00047 * 00048 * コンストラクタが与える最大遅延量 00049 */ 00050 int maxDelay; 00051 00052 /** 遅延バッファの先頭 00053 * 00054 * データをバッファに挿入すたびに、デクリメントする 00055 */ 00056 int head; 00057 00058 /** 遅延バッファへのポインタ 00059 * 00060 * コンストラクタで値を割り当て、初期化する。 00061 */ 00062 shortfract * state; 00063 }; 00064 };
1.5.2