VST3開発TIPS テスト編
前回に引き続きCUIでVST3開発をすすめています。いくつか役立ちそうなTIPS+、とくにテスト関連をメモしています。適宜追加するかもしれません。
1. 情報源
- 公式ドキュメント、Doxgen検索機能やリンクが割と貧弱なのでローカルでgrepすることが多いです
- はじめてのVST3.6プラグイン作り、公式に殆どない(リンク切れてるし…)GUI関連の情報が嬉しいです
2. テスト用のVSTホスト
まずVSTプラグインをつくったら、動かすにはホストが必要です。最終的には普段使っているDAWなりで検証すると思いますが、高速な開発サイクルを回すには軽量なテスト用ホストを使うと便利です。
公式 コマンドラインvalidator
4つあるSDK付属ホストの一つ。公式に沿って SMTG_ADD_VST3_HOSTING_SAMPLES=ON
で cmakeビルドするとbin/Debug以下にできているはず
GUIは起動しないので、お手軽な感じです。実はテストランナーも備えていて、以下の公式例のように書くと呼んでくれます。ちょっと記述量が多めですが。
- ITestを継承するテスト宣言、Factoryはfactory.cppで登録するため
- テスト実装、リソース確保などなければrunメソッドのみ。階層的にITestを登録したければFactoryのcreateTestsで登録できる
現実的にはこちらはEnd-to-endテスト用と割り切って、VSTに依存しない処理はGoogleTestなりなにか自分の好きなフレームワークを専用のmain関数をもつ実行ファイルから呼ぶだろうと思います
公式 editorhost
あまり何に使うのかわかっていません。
公式 audiohost
JACKが必要なのでWindowsでは試してないけど、あまり選択肢がないLinuxでは便利かもしれないです。
公式 VST3PluginTestHost
VST_SDK\VST3_SDK\bin\Windows 64 bit\VST3PluginTestHost_x64_Installer_2.8.0.zip
にあるインストーラで動く。若干起動が遅いのであまり使っていないですが、VST GUIエディタを使うときなど安定しているので便利そうです。Linux向けはないようです。
JUCE AudioPluginHost
validatorの次くらいによく使っているやつです。Win/Mac/Linuxサポートされています。
https://github.com/WeAreROLI/JUCE/tree/master/extras/AudioPluginHost
JUCEはオープンソースのプラグイン開発ツールキットです、Steinberg公式よりも情報や機能が多い。これも軽くて楽です。前回のプロジェクトがプラグイン開きっぱなしの状態で開くので、開発中に一発でGUI動作確認できます。MIDI Outがないのが不満ですが…GPLのオープンソースなので改造してみました(PRも送っています)。
Visual Studio2019でビルドする場合はファイルextras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost.sln
をVSで開いて、上メニューバーの「ビルド>ソリューションのビルド」で一発です。終わればJUCE\extras\AudioPluginHost\Builds\VisualStudio2019\x64\Debug\App
以下に実行ファイルができている筈です。
3. DebugPrint 系の使い方
#include "base/source/fdebug.h"
で使える、SMTG_WARNING
, SMTG_DBPRT0
.. SMTG_DBPRT5
系の関数はprintf的なノリで使えます
#include "base/source/fdebug.h"
void foo()
{
SMTG_ASSERT(1 + 2 == 3);
SMTG_WARNING("invalid input!");
SMTG_DBPRT1("%s is not found", path);
// VERIFY系はReleaseのとき評価だけされるので注意、エラーはでない
SMTG_VERIFY(1 + 2 == 3);
}
cmakeに -DCMAKE_BUILD_TYPE=Debug
オプションを渡すと有効になり、=Release
のとき無効になります。これがどこに表示されるのかよくわかっていないのですが、WindowsであればVisual StudioまたはgdbでVSTホストなりを起動してみるとどこかに表示されます。
例: $ gdb AudioPluginHost.exe
仕組みは gDebugPrintLogger
という文字列を出力する関数ポインタを実行時にセットして呼ぶようです。デバッガの起動がだるいときはVST内で無理やりprintfなどに書き換えれば、標準出力にだしてコンソールからホストを起動していれば見れます。
4. C++によるファイルパス操作
これはテストとは少し違いますが、テストでファイルを扱うことは多々あるのでメモ。VSTではなんだかUTF8/16などが混在しているようですが、C++17で標準になったfilesystemを使うとstd::filesystem::path::string
やstd::filesystem::u16string
など多機能なエンコードでファイルパスを扱えますし、OSの提供するAPIに依存せずにマルチOS対応できて良いです。ちなみにC++11のUTF8や16を変換する<codecvt>
は非推奨になったので使ってはいけません。
C++17を有効にするには、プラグインのCMakeLists.txtに以下を追記するようです。
set_property(TARGET ${target} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)
ちなみにfilesystemの日本語解説、こちらが素晴らしいです。 https://cpprefjp.github.io/reference/filesystem.html