最小構成のVST GUI
前回はInline UI Editor for VST3を使ってGUIを作成する方法を説明いたしました。
今回はプログラムでGUIを作成する方法を説明いたします。
まずは、VST GUIに最低限必要なファイルやクラスなどについて説明いたします。
今回作成するプラグインは「パラメーター実装方法2」で作成したプラグインにGUIを追加していきます。
今回はただGUIウィンドウが開くだけのプログラムになります。各パラメーターは次回以降で操作できるようにしていきます。
- ボリュームコントロール、トレモロ、パンニングの機能を持つエフェクター
- パラメーターは3つ
- ボリュームコントロール(0.0~1.0の範囲のパラメーター)
- トレモロスピード(0.5~30.0Hzの範囲のパラメーター)
- トレモロタイプ(ボリュームコントロール・トレモロ・パンニングの文字列リストパラメーター)
- 入力バス、出力バスは1つで、共にステレオ(2ch)
- 自作のGUIウィンドウが開く(ただし、パラメーターは一切操作できない。)
なお、ここで説明するVST GUIのバージョンはVST GUI 4.3となります。
VST SDK 3.6.7以前はVST GUIが4.2以下となるため修正等が必要となる可能性があります。各バージョンのSDKが必要な場合のリンクはこちらに記載しております。
このVST3プラグインのサンプルソースファイルはこちらからダウンロードできます→vst3dev_20210403
ZIPファイルの中の「vst3dev09_最小構成のVST GUI」フォルダが今回のサンプルソースファイルになります。
コンパイル・ビルドの方法は簡単にこちらでご説明しております。ご参考までに。→サンプルソースファイルのビルド方法
VST GUIクラスの定義
VSTプラグインにGUIを追加するにはVST GUIクラスを定義します。
VST GUIクラスはVSTGUIEditorクラスとIControlListenerクラスを継承して定義します。
【guieditor.h】
まず、クラス定義に必要なヘッダファイル(下記)を読み込んでいます。
- public.sdk/source/vst/vstguieditor.h
- pluginterfaces/vst/ivstplugview.h
(「myvst3def.h」はパラメータータグ(ID)が#defineで定義されているだけのファイルです。GUIでもパラメータータグ(ID)が関係するので読み込んでいます。)
続いてVSTGUIEditorクラスとIControlListenerクラスを継承してVST GUIクラスであるMyVSTGUIEditorクラスを定義しています。
MyVSTGUIEditorクラスでは、VST GUIに最低限必要な下記の関数をオーバーライドしています。
- コンストラクタ
概要 | MyVSTGUIEditorクラスのコンストラクタ 継承元クラスの初期化などを行う |
||
---|---|---|---|
戻り値 | 型 | 概要 | |
コンストラクタのため戻り値はありません | |||
引数 | 型 | 変数名 | 概要 |
void* | controller | GUIと関連付けるパラメーター操作クラスへのポインタ |
- open()関数
概要 | GUIウィンドウを開いたときに呼び出される関数 ここでつまみ(ノブ)やスライダーなどのコントロールを作成する。 |
||
---|---|---|---|
戻り値 | 型 | 概要 | |
bool | 成功すればtrue、失敗すればfalseを返す | ||
引数 | 型 | 変数名 | 概要 |
void* | parent | 自作VST GUIクラス用のウィンドウハンドル。(Windowsの場合HWND型のポインタと思われる。) ウィンドウハンドルはホスト(DAWなど)で生成されたものが渡される。 |
|
const PlatformType& | platformType | 詳細不明。 |
- close()関数
概要 | GUIウィンドウを閉じられたときに呼び出される関数 ここでフレーム(コントロールの配置領域)の解放などを行う。 |
||
---|---|---|---|
戻り値 | 型 | 概要 | |
戻り値はありません | |||
引数 | 型 | 変数名 | 概要 |
引数はありません。 |
- valueChanged()関数
概要 | つまみ(ノブ)やスライダーなどのコントロールが操作された際に呼び出される関数 | ||
---|---|---|---|
戻り値 | 型 | 概要 | |
戻り値はありません | |||
引数 | 型 | 変数名 | 概要 |
CControl* | pControl | 操作されたコントロールを示すのポインタ |
最後に継承元のVSTGUIEditorクラスの各種設定を自作VST GUIクラスの内容に置き換えるDELEGATE_REFCOUNTマクロを使います。
DELEGATE_REFCOUNTマクロの詳細については割愛いたします。
VST GUIクラスの実装
定義したVST GUIクラスを実装します。
まず、コンストラクタでは、作成するGUIのウィンドウサイズを設定します。
【guieditor.cpp】
ViewRect構造体を定義し、GUIのウィンドウサイズを指定します。ここでは「左 0」「上0」「右200」「下200」の座標を設定しています。
(単位はピクセル。おそらく左と上は常に0を指定する。)
その後、setRect()関数の引数に指定し、GUIのウィンドウサイズを設定いたします。
setRect()関数は継承元のVSTGUIEditorクラスに定義されています。詳細は割愛します。
次に、GUIウィンドウが開かれたとき、閉じられたときに処理される関数を実装します。
GUIウィンドウが開かれたときはopen()関数が呼び出されます。
【guieditor.cpp】
open()関数ではフレームと呼ばれるつまみ(ノブ)やスライダーなどの配置領域をまずは作成します。
フレームのサイズは基本的にGUIウィンドウと同じサイズでいいと思われます。(今回は200×200ピクセル)
作成した状態ではフレームの背景はありませんのでリソースから画像ファイルを読み込み、設定しています。(UIで使用する画像ファイルはリソースから読み込む必要があります。)
各関数やクラスの詳細は割愛させていただきます。
GUIウィンドウが閉じられたときはclose()関数が呼び出されます。
【guieditor.cpp】
close()関数ではフレームを解放します。
最後につまみ(ノブ)やスライダーなどのコントローラが操作されたときに呼び出される関数を実装します。
コントローラが操作されたときはvalueChanged()関数が呼び出されます。
【guieditor.cpp】
今回は特につまみ(ノブ)やスライダーなどのコントローラを実装していませんので何もしていません。
リソースファイル
今回の自作VST GUIでは背景画像を利用しています。
背景画像はリソースから読み込まなければならないため、下記のようにリソースファイルを作成しています。
【resource.rc】
リソースファイルの詳細は割愛させていただきます。
最初の5行(LANGUAGE ~~~まで)はそのまま記載し、その後に使用する画像ファイルのリソースを記載します。
画像ファイルのリソース記載は
リソース名、カテゴリ(PNG固定)、ファイルパス(プロジェクトからの相対パス。””で囲む。)
の順に行います。
リソース名はファイル名と同じにします。(他のリソース名でもいいと思いますが、試していません。)
VST GUIで対応している画像ファイルはPNG形式のみですのでカテゴリはPNG固定です。
パラメーター操作クラスのGUI生成関数
作成したVST GUIクラスはパラメーター操作クラスから生成できるようにする必要があります。
パラメーター操作クラスから生成するには新たにcreateView()関数を定義します。
【controller.h】
- createView()関数
概要 | 自作VST GUIを呼び出す関数 | ||
---|---|---|---|
戻り値 | 型 | 概要 | |
IPlugView* | 作成したVST GUIクラスへのポインタ | ||
引数 | 型 | 変数名 | 概要 |
const char* | name | 詳細不明。呼び出すビュー名を指定するものだと思われる |
GUI生成関数の実装としては、引数のnameに”editor”を指定された際に自作VST GUIクラスを作成してそのポインタを返すだけです。
【controller.cpp】
VST SDK3.6.7以前の場合
VST SDK3.6.8から若干VST GUIのクラス名等が変更となっております。VST SDK3.6.7以前を使用する場合は下記の点をご注意ください
■継承するクラスが異なる
継承するクラスがIControlListenerクラスではなくCControlListenerクラスです。(VSTGUIEditorクラスは変わりません。)
【guieditor.h】
■フレームのオープンが不要
VST SDK3.6.7以前ではCFrameクラスのコンストラクタでフレームを開く処理が入っていますので、frame->oepn()が不要となります。
また、フレームを開く処理が入っている関係でコンストラクタにウィンドウハンドルであるparentを指定する必要があります。
【guieditor.cpp】
最後に
以上がVST GUIに最低限必要なファイルやクラスなどについて説明になります。
詳細な点は省略しておりますので、不明点がございましたら、掲示板かTwitterにてご連絡いただければと思います。
次回は実際につまみ(ノブ)やスライダーを実装する方法について記載したいと思います。
このVST3プラグインのサンプルソースファイルはこちらからダウンロードできます → vst3dev_20210403.zip
VST SDK 3.6.7以前の場合 はこちらです。 → 20171123_vst3
コンパイル・ビルドの方法は簡単にこちらでご説明しております。ご参考までに。→サンプルソースファイルのビルド方法
VST3プラグイン作りの情報はこちらにもございます → はじめてのVST3プラグイン作り
ご指摘やご質問などがございましたら、コメント欄か掲示板、Twitterでご連絡いただければと思います。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp