C++でVST作りコンテンツへスキップC++でVST作りVSTプログラミングに関する情報です。VST3を使ってGUIを作成する方法を説明いたしました。今回はプログラムでGUIを作成する方法を説明いたします。GUIに最低限必要なファイルやクラスなどについて説明いたします。今回作成するプラグインは「パラメーター実装方法2」で作成したプラグインにGUIを追加していきます。今回はただGUIウィンドウが開くだけのプログラムになります。各パラメータは次回以降で操作できるようにしていきます。ボリュームコントロール、トレモロ、パンニングの機能を持つエフェクターパラメーターは3つボリュームコントロール(0.0~1.0の範囲のパラメーター)トレモロスピード(0.5~30.0Hzの範囲のパラメーター)トレモロタイプ(ボリュームコントロール・トレモロ・パンニングの文字列リストパラメーター)入力バス、出力バスは1つで、共にステレオ(2ch)自作のGUIウィンドウが開く(ただし、パラメータは一切操作できない。GUIが4.2以下となるため修正等が必要となる可能性があります。各バージョンのSDKが必要な場合のリンクはこちらに記載しております。今回作成したVST3のソースファイルはこちらになります。vst3dev09_20190509コンパイル・ビルドの方法は簡単にこちらでご説明しております。GUIクラスを定義します。GUIクラスはVSTGUIEditorクラスとIControlListenerクラスを継承して定義します。SteinbergとVstの終わり#endifまず、クラス定義に必要なヘッダファイル(下記)を読み込んでいます。public.sdk/source/vst/vstguieditor.hpluginterfaces/vst/ivstplugview.h(「myvst3def.h」はパラメータIDが#defineで定義されているだけのファイルです。GUIでもパラメータIDが関係するので読み込んでいます。GUIクラスであるMyVSTGUIEditorクラスを定義しています。GUIに最低限必要な下記の関数をオーバーライドしています。概要GUIウィンドウを開いたときに呼び出される関数ここでつまみ(ノブ)やスライダーなどのコントロールを作成する。GUIクラス用のウィンドウハンドル。(Windowsの場合HWND型のポインタと思われる。)ウィンドウハンドルはホスト(DAWなど)で生成されたものが渡される。概要GUIウィンドウを閉じられたときに呼び出される関数ここでフレーム(コントロールの配置領域)の解放などを行う。GUIクラスの内容に置き換えるDELEGATE_REFCOUNTマクロを使います。DELEGATE_REFCOUNTマクロの詳細については割愛いたします。GUIクラスを実装します。コンストラクタでは、作成するGUIのウィンドウサイズを設定します。200);setRect(viewRect);}ViewRect構造体を定義し、GUIのウィンドウサイズを指定します。0」「上0」「右200」「下200」の座標を設定しています。左と上は常に0を指定する。)その後、setRect()関数の引数に指定し、GUIのウィンドウサイズを設定いたします。setRect()関数は継承元のVSTGUIEditorクラスに定義されています。次に、GUIウィンドウが開かれたとき、閉じられたときに処理される関数を実装します。GUIウィンドウが開かれたときはopen()関数が呼び出されます。フレーム(配置領域)がすでに作成・設定されているか確認。frameは継承元クラスで定義されている。作成に失敗したら(NULLなら)終了。フレーム(配置領域)がすでに作成・設定されているか確認。frameは継承元クラスで定義されている。作成に失敗したら(NULLなら)終了。true;}open()関数ではフレームと呼ばれるつまみ(ノブ)やスライダーなどの配置領域をまずは作成します。フレームのサイズは基本的にGUIウィンドウと同じサイズでいいと思われます。(今回は200×200ピクセル)作成した状態ではフレームの背景はありませんのでリソースから画像ファイルを読み込み、設定しています。(UIで使用する画像ファイルはリソースから読み込む必要があります。)各関数やクラスの詳細は割愛させていただきます。GUIウィンドウが閉じられたときはclose()関数が呼び出されます。0;}}close()関数ではフレームを解放します。最後につまみ(ノブ)やスライダーなどのコントローラが操作されたときに呼び出される関数を実装します。コントローラが操作されたときはvalueChanged()関数が呼び出されます。pControl){}今回は特につまみ(ノブ)やスライダーなどのコントローラを実装していませんので何もしていません。GUIでは背景画像を利用しています。背景画像はリソースから読み込まなければならないため、下記のようにリソースファイルを作成しています。".\\img\\background.png"リソースファイルの詳細は割愛させていただきます。~~~まで)はそのまま記載し、その後に使用する画像ファイルのリソースを記載します。画像ファイルのリソース記載はリソース名、カテゴリ(PNG固定)、ファイルパス(プロジェクトからの相対パス。