Windows CUI環境における VST3 開発
あけましておめでとうございます、今年こそはWindowsにも慣れていこうと思います。
今回はVST3開発環境構築と簡単なプロジェクトの作り方のメモです。私は以前、Dplugを使ってD言語でVSTを作っていたときはVST2を使ってました。しかしVST2の開発サポートが終わってしまったので、そろそろVST3に移行しようと考えていました。具体的なゴールとしてはVST3で登場したMIDIエフェクトが作りたいです。まず仕組みを知るために、公式のC++から入ります。ちなみにDplugではすでにVST3がサポートされています。
問題点としては、いつもメインのWin開発環境はMSYS2なのでgccを使いたいのですが、CMakeのスクリプトやC++のプリプロセッサなどを見る限りWindowsではVS前提に書かれていました (cmake -G "MSYS Makefiles"
で動くようにするのは、理解の浅い現時点ではハードルが高いです)。さらに私にとってネットによくあるVSとCMakeのGUIを使った開発が無理だったので、最低限シェル内で完結して開発する方法を模索しました。
cmakeとVS2019 (VC compiler + Win10 SDK) で、VST3 SDKビルド
公式サイト How to use cmake for Building VST 3 Plug-ins
全体のながれ
- CMake公式からビルド済みバイナリzipをDLしPATHを通す。ちなみにpacmanのcmakeはVSをサポートしてない
- Visual Studio 2019 Installer で “C++によるデスクトップ開発” > “MSVC v142” および “Windows 10 SDK” にチェックをいれてインストールします。これが最小構成かと
- VST3 Audio Plug-Ins SDKをDLして、CUIからビルド
最後にSDKをビルドします。versionは 3.6.14_build-24_2019-11-29 でした。VST2と違ってVST3はgithubにあるのが良いですね。公式ドキュメントを参考にCUIからビルド:
cd "<解凍先>/VST SDK"
# vstsdk.sln を生成
mkdir build
cd build
cmake -G "Visual Studio 16 2019" -A x64 ../VST3_SDK
cmake --build . --parallel 10
なお MSBuild.exe のログが日本語になって文字化けしていると思いますが、 $ chcp 850
と打てば英語になってくれます。筆者の環境ではビルド完了まで1分ほどかかりました。ちなみに--parallel
がMSBuild.exeで効いていないような気がします…。
# ビルドした検証ツールとVSTサンプルをテスト
./bin/Debug/validator.exe ./VST3/Debug/adelay.vst3
一通りビルド成功していれば、VST3/Debug
以下にVSTプラグインのサンプルも一緒にビルドされていますので、動作確認に bin/Debug
以下にビルドされたVSTホストサンプルの検証ツールを使えるはずです。以上で環境構築は終わりです。
新しいVST3プラグインを書く
公式サイト How to add/create your own VST 3 Plug-ins
主にプロジェクト立ち上げ時に必ずやることとしては、
- 自分のプラグイン置き場にhelloworldをコピーする
- 置き場のCMakeList.txtに新しいサブディレクトリを追加
- 新しいプラグイン名でhelloworld/HelloWorldを置換
- 新しいuidで
include/plugid.h
を更新 - 新しいプラグイン名で
include/version.h
を更新 - 新しいプラグイン名で
resource/info.plist
を更新
これ毎回やるの地獄だな…と思ったので、初期プロジェクトの構築をシェルスクリプト化してみました(要bash)。使い方は
cd "<自作プラグイン置き場>"
git clone --recursive https://github.com/ShigekiKarita/vst3-tools
./vst3-tools/init-plugin.sh FooBar
# copyrightなどの情報を更新
emacs FooBar/include/version.h
これでFooBarというディレクトリとFooBarという表示名のfoobar.vst3が生成されるプロジェクトができます。include/version.h
には著者名などを書き込む欄もありますので、忘れずに更新してください。ちなみに実装をすすめる際は次のようなステップがあるとのこと:
- plugcontroller.cpp にパラメータ追加
- plugprocessor.cpp にアルゴリズム追加
- plugprocessor.cpp に永続化を実装
- UI実装 (このへんのサンプルが参考になりそう?)
そして新しいプラグインを作ったときのビルド方法:
# このbuildディレクトリは自作プラグイン置き場の外に作らないといけない
mkdir build
cd build
cmake -DSMTG_ADD_VST3_PLUGINS_SAMPLES=OFF \
-DSMTG_ADD_VST3_HOSTING_SAMPLES=OFF \
-DSMTG_MYPLUGINS_SRC_PATH="<自作プラグイン置き場>" \
-G "Visual Studio 16 2019" \
-A x64 \
"<解凍先>/VST_SDK/VST3_SDK"
cmake --build . --parallel 10
この例でもビルドに30秒かかるので、毎回新しいプラグインやファイル作るたびにSDKと全自作プラグインがビルドし直しなのは嫌ですね。ただし、モジュールのない時代のC++にビルド設定で深入りするのも面倒ですし、SDK側もそこそこな頻度でアップデートあるからそういうものかと無理やり納得しています。
追記
上記のビルド問題が嫌なので実験として下記のようにbuildディレクトリを消さずに、使いまわして新しくプロジェクトを追加したところ、普通に動くことがわかった。CMakeもVSのキャッシュもよくわかっていないので気持ち悪いけど、とりあえずこれで…。
mkdir build
mkdir myVSTs
cd myVSTs
git clone --recursive https://github.com/ShigekiKarita/vst3-tools
# 1つ目のVST (SDKもビルドされる)
./vst3-tools/init-plugin.sh Vst1
cd ../build
cmake -DSMTG_ADD_VST3_PLUGINS_SAMPLES=OFF \
-DSMTG_ADD_VST3_HOSTING_SAMPLES=OFF \
-DSMTG_MYPLUGINS_SRC_PATH=../myVSTs \
-G "Visual Studio 16 2019" \
-A x64 \
"<解凍先>/VST_SDK/VST3_SDK"
cmake --build . --parallel 10
./bin/Debug/validator.exe ./VST3/Debug/vst1.vst3
cd ../myVSTs
# 2つ目のVST (SDK、1つ目はビルドされずに使い回す)
./vst3-tools/init-plugin.sh Vst2
cd ../build
cmake --build . --parallel 10
./bin/Debug/validator.exe ./VST3/Debug/vst2.vst3
おわりに
今回は環境構築で力尽きましたが、次回は作りたかったMIDIエフェクト、もしくはdplugでのVST3出力をやっていこうと思います。