VST GUIのコントロール値を数字で表示する
VST GUIを作成するうえで、コントロールの値を表示したい場合があります。今回はその実装方法を説明いたします。
なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。
また、こちらのTipsで紹介している各コントロールを作成する関数も使用しています。
まず、VST GUIクラスのopen()関数内で各コントロールを作成します。(参考:「つまみ(ノブ)の実装」「テキストラベルの実装」)
コントロール作成時に作成したコントロールのポインタをあらかじめ定義したメンバー変数に保存しておきます。メンバー変数はあらかじめ定義しておきます。
【guieditor.h】
1 2 3 4 5 6 7 8 9 |
class MyVSTGUIEditor : public VSTGUIEditor, public IControlListener { protected: CControl* control1; CControl* control2; public: ~~ 中略 ~~ } |
【guieditor.cpp】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
bool PLUGIN_API MyVSTGUIEditor::open(void* parent, const PlatformType& platformType) { // GUIウィンドウが開かれたときに、UIを作成する ~~ 中略 ~~ // --------------------------------------------- // ここから各コントロールの作成 control1 = createKnob(1, 10, 60); control2 = createTextLabel(1, 50, 10); ~~ 中略 ~~ // GUIウィンドウのオープンに成功した場合はtrueを返す return true; } |
つづいてコントロールを操作したときに呼び出されるvalueChanged()関数で値を更新するための処理を追記します。
【guieditor.cpp】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
void MyVSTGUIEditor::valueChanged(CControl* pControl) { // どのパラメーターが操作されたかを取得する。 int32 index = pControl->getTag(); // パラメーターの値を取得する。 float value = pControl->getValueNormalized(); // 取得した値をパラメーターに反映させる controller->setParamNormalized(index, value); // 音声処理クラスに反映した値を通知する controller->performEdit(index, value); // 値を表示したいコントロールが操作されたかどうかを確認 if (pControl == control1) { // パラメーターから文字列を取得 String128 tmp; controller->getParamStringByValue(index, value, tmp); // 取得した文字列はUNICODEなのでUTF8に変換 char text[256]; wcstombs(text, tmp, 128); // 取得した文字列をテキストラベルに設定 ((CTextLabel*)control2)->setText(text); // テキストラベルコントロールを再描画する control2->setDirty(); } } |
値を表示させたいコントロールが操作された場合に文字列をパラメーターから取得します。(今回の場合、つまみ(ノブ)コントロールの場合)
パラメーターから取得した文字列はUNICODEなのでUTF8に変換します。
変換された文字列をテキストエディットコントロールに設定し、画像を更新するためのsetDirty()関数を呼び出します。
以上でコントロール値を表示することができます。
上記以外にもVST3.6についての情報があります。下記をご参照ください。
また、質問やご指摘はコメント欄や掲示板、Twitterでいただけばとおもいます。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp