VST3におけるサイレンス処理

VST3におけるサイレンス処理

process()関数の引数 dataの入力オーディオバスにはサイレンスフラグというものがあり、「音声入出力バッファの値がすべて0の場合、サイレンスフラグを立てる」という決まりがあるようです。

このサイレンスフラグは、「何も音声入力がない場合に無駄な処理を行わないことでコンピューター(CPU)の負荷を下げる」ためにあります。
(多分、このフラグがSteinberg Webサイトにある「VST3新機能」の「パフォーマンスの改善」にあたるものと思われます。)

音声出力にサイレンスフラグを立てるのは、VST3プラグインが複数 接続される可能性を想定しているためです。
自身の作成したVST3プラグインの音声出力は次のVST3プラグインの音声入力となるため、音声出力がすべて0の場合はサイレンスフラグを立てる必要があります。

サイレンスフラグの処理方法はVST3プラグインによって異なります。
「音声入力のサイレンスフラグが立っているようであれば、音声出力もすべて0にしサイレンスフラグを立てる」といった処理を行うVSTプラグインもあれば、シンセサイザーやリバーブ(残響)エフェクトなどのように「音声入力のサイレンスフラグが立っていても、少し前の音声入力やMIDI入力から音声出力を計算し続ける」ものもあります。

実装方法の一例として、「サイレンスフラグが立っている場合は、音声出力もすべて0にする」方法を下記に記載します。

まず音声処理クラスにサイレンス処理を行う関数を実装します。

その後、process()関数内の「入力・出力バッファのポインタをわかりやすい変数に格納」の後に上記関数を入れます。
(バイパスパラメーターと合わせて下記のように実装します。)

silenceFlagsはオーディオバスのSpeakerArrangementと同じであるため、「どのフラグが立っているか?」を判断することで特定のチャンネルだけをサイレンスにすることもできます。

上記以外にもVST3.6についての情報があります。下記をご参照ください。

また、質問やご指摘はコメント欄や掲示板Twitterでいただけばとおもいます。

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp


コメントを残す