VST3におけるバイパス処理
バイパス処理とは入力信号をそのまま出力するための処理になります。
実は、VST3を作成する際にはバイパス処理も実装しなければいけません。
実装方法としては下記になります。
- パラメータ操作クラスでバイパス用パラメータを作成する
On/Off(1.0と0.0)の2段階の値を持つパラメータでkIsBypassフラグを立てる - バイパスパラメータがOnの時(1.0)の時に音声処理クラスでバイパス処理を行う。
バイパス処理のイメージは下記になります。
まず、パラメータ操作クラスでバイパス用パラメータを作成します。(パラメーター操作クラスのinitialize()関数に追加)
1 |
parameters.addParameter(STR16("bypass"), STR16("..."), 1, 0, ParameterInfo::kIsBypass, BYPASS_TAG); |
次に音声処理クラスにバイパス処理を行う関数を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// バイパス処理を行う関数 void MyVSTProcessor::processBypass(Sample32* inL, Sample32* inR, Sample32* outL, Sample32* outR, int32 numSamples) { // 入力信号をそのまま出力する // 入力と出力が同じポインタの場合があるので念のため確認(DAWがCubaseなど) if (inL != outL) { // 入力信号をそのまま出力 memcpy(outL, inL, numSamples * sizeof(float)); } if (inR != outR) { // 入力信号をそのまま出力 memcpy(outR, inR, numSamples * sizeof(float)); } // VST内部の状態などを更新する必要がある場合はここに記載 // 今回は何も更新しないので記載はなし } |
process()関数内の「入力・出力バッファのポインタをわかりやすい変数に格納」の後に上記関数を入れます。
バイパスパラメータがOnの時(1.0)の時に呼ばれるかたちにします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 入力・出力バッファのポインタをわかりやすい変数に格納 // inputs[]、outputs[]はAudioBusの数だけある(addAudioInput()、addAudioOutput()で追加した分だけ) // 今回はAudioBusは1つだけなので 0 のみとなる // channelBuffers32は32bit浮動小数点型のバッファで音声信号のチャンネル数分ある // モノラル(kMono)なら 0 のみで、ステレオ(kStereo)なら 0(Left) と 1(Right) となる Sample32* inL = data.inputs[0].channelBuffers32[0]; Sample32* inR = data.inputs[0].channelBuffers32[1]; Sample32* outL = data.outputs[0].channelBuffers32[0]; Sample32* outR = data.outputs[0].channelBuffers32[1]; // 入力のバイパスパラメーターを確認 if (bypass == 1.0) { // バイパス処理を行う return processBypass(inL, inR, outL, outR, numSamples); } // サイレンス状態ではないので通常処理 // numSamplesで示されるサンプル分、音声を処理する for (int32 i = 0; i < data.numSamples; i++) |
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp