Effector Tips
シンプルなディレイの改良
フィードバックとは、バッファから読み出したデータを再度バッファに書き込む経路である。
説明については要点のみ。サンプルコード全体は以下よりダウンロードしてほしい。
ディレイのパラメーター
今回作成するディレイは
前回作成のディレイにフィードバックの音量を調整するパラメーターを追加する
1. |
Delay Level |
遅延した音の音量。0%~100%の間で指定する。 |
2. |
Delay Time |
遅延させる時間。100ミリ秒~1000ミリ秒の間で指定する。 |
3. |
Feedback Level |
フィードバックの音量。0%~100%の間で指定する。 |
processReplacing()関数
ディレイの経路図に従って、processReplacing()関数の音声処理部分(whileループ内)で以下の処理を行っている
- 入力信号とリングバッファから読み出したデータをリングバッファへ保存する
- リングバッファから取り出したデータにfDelayLevelを乗算したものと入力信号を加算。出力信号とする。
- リングバッファの読み取り位置、書き込み位置を進める。
void MyDelayVST::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
{
float* inL = inputs[0]; //入力 左用
float* inR = inputs[1]; //入力 右用
float* outL = outputs[0]; //出力 左用
float* outR = outputs[1]; //出力 右用
while (sampleFrames > 0)
{
//入力信号とリングバッファから読み出したデータをリングバッファへ
RingBufL.SetValue( (*inL) + RingBufL.GetValue() * fDelayFeedback );
RingBufR.SetValue( (*inR) + RingBufR.GetValue() * fDelayFeedback );
//リングバッファから取り出した値と入力信号を加算
(*outL) = (*inL) + fDlayLevel * RingBufL.GetValue();
(*outR) = (*inR) + fDlayLevel * RingBufR.GetValue();
//リングバッファの読み取り位置、書き込み位置を進める
RingBufR.ForwardReadPosition();
RingBufL.ForwardReadPosition();
RingBufR.ForwardWritePosition();
RingBufL.ForwardWritePosition();
inL++;
inR++;
outL++;
outR++;
sampleFrames--;
}
}
同一カテゴリのTips
最終更新:2010年06月04日 01:16