Effector Tips


シンプルなディレイの改良

前回作成のディレイにフィードバックを追加する

フィードバックとは、バッファから読み出したデータを再度バッファに書き込む経路である。


説明については要点のみ。サンプルコード全体は以下よりダウンロードしてほしい。


ディレイのパラメーター

今回作成するディレイは前回作成のディレイにフィードバックの音量を調整するパラメーターを追加する

1. Delay Level 遅延した音の音量。0%~100%の間で指定する。
2. Delay Time 遅延させる時間。100ミリ秒~1000ミリ秒の間で指定する。
3. Feedback Level フィードバックの音量。0%~100%の間で指定する。

processReplacing()関数

ディレイの経路図に従って、processReplacing()関数の音声処理部分(whileループ内)で以下の処理を行っている

  1. 入力信号とリングバッファから読み出したデータをリングバッファへ保存する
  2. リングバッファから取り出したデータにfDelayLevelを乗算したものと入力信号を加算。出力信号とする。
  3. リングバッファの読み取り位置、書き込み位置を進める。

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


No. 概要
ディレイ01 ディレイとは、ディレイの処理内容概要
ディレイ02 ディレイ用バッファについて、ディレイの実装概要
ディレイ03 リングバッファの実装
ディレイ04 VSTでのシンプルなディレイの作成
ディレイ05 シンプルなディレイへのフィードバックの追加

最終更新:2010年06月04日 01:16