VST GUIにおけるコントロールの定期更新
音声処理クラスからパラメータ情報のフィードバックを受け取った場合やアニメーション行う場合など、コントロールを定期的に更新したい場合があります。今回はその実装方法を説明いたします。
なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。
また、こちらのTipsで紹介している各コントロールを作成する関数も使用しています。
コントロールを定期的に更新するには、タイマーを使います。
タイマーはVST GUIに標準で組み込まれており、0.1秒ごとに動作します。
(タイマーの動作する間隔は変更できます。変更する方法は別途記載予定です。)
まず、定期的に更新したいコントロールをVST GUIクラスのopen()関数内で作成します。サンプルではつまみ(ノブ)コントロールを作成しています。(参考:「つまみ(ノブ)の実装」)
コントロール作成時に作成したコントロールのポインタをあらかじめ定義したメンバー変数に保存しておきます。メンバー変数はあらかじめ定義しておきます。
【guieditor.h】
1 2 3 4 5 6 7 8 |
class MyVSTGUIEditor : public VSTGUIEditor, public IControlListener { protected: CControl* control; public: ~~ 中略 ~~ } |
【guieditor.cpp】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
bool PLUGIN_API MyVSTGUIEditor::open(void* parent, const PlatformType& platformType) { // GUIウィンドウが開かれたときに、UIを作成する ~~ 中略 ~~ // --------------------------------------------- // ここから各コントロールの作成 control = createKnob(100, 10, 60); ~~ 中略 ~~ // GUIウィンドウのオープンに成功した場合はtrueを返す return true; } |
タイマーは動作したときにkMsgTimerメッセージをVST GUIクラスに通知します。
このkMsgTimerメッセージを受け取れるよう、notify()関数を新たにVSTGUIEditorクラスから継承して定義します。
【guieditor.h】
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class MyVSTGUIEditor : public VSTGUIEditor, public IControlListener { protected: ~~ 中略 ~~ public: ~~ 中略 ~~ // タイマーの動作などのメッセージを受け取った時に呼び出される関数 CMessageResult notify(CBaseObject *sender, const char *message); ~~ 中略 ~~ } |
最後にnotify()関数の中身を記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
CMessageResult MyVSTGUIEditor::notify(CBaseObject *sender, const char *message) { if (message == CVSTGUITimer::kMsgTimer) { if (control != nullptr) { // パラメータ操作クラスから指定したIDのパラメータ値を取得する ParamValue value = controller->getParamNormalized(100); control->setValue(value); control->setDirty(); } } return VSTGUIEditor::notify(sender, message); } |
タイマーが動作したときmessageにkMsgTimerが設定されてnotify()関数が呼び出されるので、それに合わせてパラメータ操作クラスからパラメータ値を取得し、つまみ(ノブ)コントロールに設定しています。そして、つまみ(ノブ)コントロールのsetDirty()関数を呼び出し、画像を更新しています。
returnで値を返す際は、必ず継承元(VSTGUIEditorクラス)のnotify()関数を呼び出しておいてください。
以上でコントロールの定期更新ができます。
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp