パラメーター情報のフィードバック
MIDIノートオン・オフに合わせてパラメーターを変更したり、音圧に応じて値が変わるVUメーターなど、音声処理クラスからパラメータ操作クラスに値をフィードバックさせる方法を説明いたします。
なお、パラメーターの作成などについては下記をご参照ください。
パラメーター実装方法 | パラメータ自体を実装する方法 |
パラメーター実装方法2 | 0.5~30.0の範囲や文字列リスト等のパラメーターを実装する方法。 |
パラメーター実装方法3 | 「フィルタのカットオフ周波数」等の線形でないパラメーターを実装する方法を記載 |
まずはパラメーター操作クラスのinitialize関数にパラメーターを追加します。(「パラメーター自体を実装する方法」と同じです。)
【controller.h】
次に音声処理クラスのprocess関数に値をフィードバックする処理を追加します。(ここのprocess関数は「パラメーター自体を実装する方法」をベースにしています。)
パラメーターのフィードバックにはprocess関数の引数 dataのoutputParameterChangesを使用し下記(75~97行目)のように実装します。
【processor.cpp 追加分】
以上で音声処理クラスからパラメーター操作クラスに値をフィードバックさせることができます。
フィードバックさせるパラメーターが複数ある場合は、下記のように複数回 設定します。
パラメーター操作クラスに値をフィードバックさせた後、UIなどを更新するには別途対応が必要となります。
対応方法の一つとしてUIを定期的に更新する方法があります。
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp
ご無沙汰しております。
ようやく私もVST3の開発を始めることができまして、VST2.4で作った自作プラグインの移植を遅々と進めております。
VST2.4ではできていた変数の渡し方が封じられてしまったのが痛いです。
1つ1つ0.0~1.0に変換しながら渡してまた戻しています。(2.4も本来こんな感じでやるべきだったのでしょうけれど)
猫十さんご無沙汰しております。
確かにVST2.4よりそのあたりは面倒になりましたね…
バイナリデータなど(波形データなど)の受け渡しであればsendMessage()関数とnotify()関数が使えるのですが…。
うつぼかずらさん
おかげさまでVST3開発にも慣れてきました。
カスタムViewとか処理系なんかは結構2.4のがそのまま動いたりして感動してます。
さてsendmessageが便利でデバッグのためprocessからGUIへ大量のバイナリデータを高速で送っていたら、使用メモリが増加していくということがありました。
(process側変数の中身や動きを見るために片っ端からGUIにリアルタイム表示させる的なアレです。)
動作上は遅延などなくちゃんと動作しているのですが、VisualStudioの診断ツールのプロセスメモリがぐんぐん増えていくという状態でした。
もしかしたらsendmessageでのバイナリ送信は注意が必要なのかもしれません。
process側の変数をリアルタイムでグリグリ描画しまくってそうな製品プラグイン(Avengerとかfabfilterとか)はそのへんどうしてるのかとても疑問です…。
おそらくですが、allocateMessage()でIMessageクラスの確保をして、
sendMessage()でデータ(メッセージ)を送信した後、
IMessageクラスのrelease()を呼んでいないためにメモリリークしているのではないかと思います。
うつぼかずらさん
ご指摘の通り、sendMessage()したあとにrelease()を呼んだところメモリリークしなくなりました(汗)
sendMessage()まわりはsteinbergのagainとnote expression synthのコードを見ながらマネして書いたのですが、何か勘違いor解釈違いをしてしまっていたようです…。
本当にありがとうございました。