VST Tips(準備中)


音声処理を行う関数

ここでは最初で定義したMyMinimumVSTの以下2つの関数のうち、残りの音声処理を行うprocessReplacing()関数について詳細を記載する。

  • コンストラクタ
  • void processReplacing()

processReplacing()関数

AudioEffectXクラスを継承して作った自作クラスは必ずprocessReplacing()関数を継承しなくてはならない。

processReplacing()関数
void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);

processReplacing()関数の引数については以下のようになっている。

引数 説明
float** inputs 入力音声信号のバッファ。2次元配列で渡される。
1次元目の大きさはコンストラクタにsetNumInputs()関数で指定したサイズ。
2次元目の大きさは後述のsampleFramesとなる。
書き込まれている音声信号は-1.0~+1.0の範囲
float** outputs 出力音声信号のバッファ。2次元配列で渡される。
1次元目の大きさはコンストラクタでsetNumOutputs()関数に指定したサイズ。
2次元目の大きさは後述のsampleFramesとなる
音声信号は-1.0~+1.0の範囲で書き込まなければならない。
VstInt32 sampleFrames 入力音声信号、出力音声信号のバッファサイズ

サンプルコード

  1. void MyMinimumVST::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
  2. {
  3. //入力、出力は2次元配列で渡される。
  4. //入力は-1.0f~1.0fの間で渡される。
  5. //出力は-1.0f~1.0fの間で書き込む必要がある。
  6. //sampleFramesが処理するバッファのサイズ
  7. float* inL = inputs[0]; //入力 左用
  8. float* inR = inputs[1]; //入力 右用
  9. float* outL = outputs[0]; //出力 左用
  10. float* outR = outputs[1]; //出力 右用
  11.  
  12. for (int i = 0; i < sampleFrames; i++)
  13. {
  14. //ここで音声処理を行う。
  15.  
  16. //出力バッファへ書き込む。
  17. outL[i] = inL[i];
  18. outR[i] = inR[i];
  19. }
  20. }

サンプルコードの解説

まず、引数のinputs、outputsは2次元配列であり、各次元のサイズはは以下のようになっている。
inputs[チャンネル数][sampleFrames]
outputs[チャンネル数][sampleFrames]

上記引数をわかりやすいよう、3~12行目で入力音声信号・出力音声信号ともにチャンネルごとに別の変数へ代入している。(この処理は必須ではない。)
また、入力音声信号、出力音声信号がモノラルの場合は左用のみとなる。
float* inL  =  inputs[0]; //入力 左用
float* inR  =  inputs[1]; //入力 右用
float* outL = outputs[0]; //出力 左用
float* outR = outputs[1]; //出力 右用


次に、出力音声信号をoutputsに代入するため、sampleFrames分処理するループを作成する。
for (int i = 0; i < sampleFrames; i++)
{
	//ここで音声処理を行う。
		:
		:
} 

最後に、上記のループ内で出力音声信号バッファに書き込みを行っている。
今回は入力音声信号をそのまま出力音声信号バッファに書き込んでいる。
//出力バッファへ書き込む。
outL[i] = inL[i];
outR[i] = inR[i];
 





同一カテゴリのTips


項目 No. 概要
最小構成のVST No.1 最小構成の自作VSTに必要な関数等の説明。
No.2 最小構成の自作VSTの必須初期化項目について
No.3 最小構成の自作VSTの音声処理関数について
No.4 最小構成の自作VSTのサンプルソースコード全体


javascript plugin Error : このプラグインで利用できない命令または文字列が入っています。
最終更新:2011年05月16日 01:45