作ったVSTPluginとか開発メモ



VSTPlugin

VSTNotepad
トラックに挿して使うメモ帳です。プラグインの設定値などのメモに。
大きめなんで歌詞とか書くといいと思います。

VSTNotepad mini
同じくトラックに挿して使うメモ帳です。
上のよりも小さめになってます。ちょっとしたメモに。



開発メモ

VST SDKについてあれこれ調べたものを書き留めてます。
日本語のサイト自体少ないので、少しでも役に立てばと思います。

ホスト側にプラグイン名や開発元名を知らせる
AudioEffectXクラスを継承したクラスで、
  bool getEffectName(char* name)
  bool getVendorString(char* text)
  bool getProductString(char* text)
をオーバーライドし、引数のポインタにstrcpy関数で文字列を渡すように処理を記述します。Cubaseの場合、表示されるプラグイン名はdllファイル名に依存する様なので、EffectNameやProguctStringがどこに反映されるものかわかりませんが、一応合わせるのが良いと思います。

自作プラグインの認識について
ホストが異なるプラグインとして認識するためにはsetUniqueID()関数に異なるIDを与えなければならないため、サンプルコードのまま実行しようとしても認識しなかったりします。Steinbargに登録する前でも適当なIDを振れば認識してくれるようです。あくまでIDで識別している様子なので上記のEffectNameやProductStringが同一でも大丈夫です。

WINAPIを用いたGUIの作成
VSTPlugin製作メモがとても参考になります。クラスに組み込んだプロシージャからはメンバ変数にアクセスできないため、メンバ変数にアクセスする必要がある場合はさらに一段階処理を加える必要があります。詳しくはこちら

setChunk関数, getChunk関数の使い方
float型以外の値の保存にはsetChunk関数,getChunk関数を使います。
例として、テキストデータを保存・読み込みする場合、以下のように記述します。

VstInt32 VSTSample::getChunk(void** data, bool isPreset){
 ((Editor*)editor)->getText(((char**)data));
 return ((NotepadEditor*)editor)->getTextsize();
}

VstInt32 VSTSample::setChunk(void* data, VstInt32 byteSize, bool isPreset){
 ((Editor*)editor)->setText(((char*)data));
 return ((NotepadEditor*)editor)->getTextsize();
}

ここで、getText関数とsetText関数はそれぞれEditorクラスのコントロールのテキストデータの入出力用関数で、getTextsize関数でテキストのサイズを返すものとします。
setChunk関数,getChunk関数それぞれの戻り値が確保されるデータサイズとなっており、このサイズ以上のデータは切り捨てられます。保存データサイズを取得する関数を渡してください。この例ではgetTextsize関数を渡しています。

また、AudioEffectXを継承した関数のコンストラクタ内で、

programsAreChunks();

を呼び出します。この関数を呼び出すことで、Chunkの保存とロードが有効になります。



参考リンク

C++でVST作り(旧)
Tipsが充実してます。SDKを使ったGUIの作り方とか参考になります。

C++でVST作り
パラメータとかプリセットの実装法がわかりやすいです。

VSTPlugin製作メモ
WINAPIを用いたGUIのサンプルが載っています。VSTNotepadのエディタコントロールはSDKになかったのでこちらの方法で実装しました。

inserted by FC2 system