VST3 VSTGUIのスタンドアロンライブラリについて

[VST3制作の過去記事一覧はこちら](https://qiita.com/aike@github/items/05a14911bb89db8b6c2c)

音楽制作用DAWのプラグイン仕様VST3について調べました。今回はVSTGUIのスタンドアロンアプリについての説明です。
この記事はVST3プラグインを書く人向けの内容です。


# TL;DR

- VSTGUIはスタンドアロンで起動可能
- スタンドアロンアプリのサンプルが用意されている
- サンプルのビルドにはコツが必要
- ただしビルドできても簡単にスタンドアロンのシンセアプリが作れるわけではない

# 背景

VST3に付属のGUIライブラリVSTGUIには、DAWのプラグインとしてではなくスタンドアロンで起動するアプリ用のライブラリが用意されています。[公式ドキュメント](https://steinbergmedia.github.io/vst3_doc/vstgui/html/standalone_library.html)によるとスタンドアロンライブラリはプレビュー版で今後変わる可能性があるとのことですが、せっかくなので調べてみました。なお、確認はVST3SDK3.7.3、VSTGUI4.10.1でおこなっています。

VSTGUIにはスタンドアロンライブラリのサンプルプログラムも同梱されています。しかしながらVST3SDKと一緒にVSTGUIをビルドしてもこれらはビルドされず存在自体に気づきにくくなっています。そのあたりの状況についても説明します。

実はVSTGUIはVST3SDKと独立したライブラリとなっています。つまりVSTGUI単独でコンパイルしてライブラリとして利用することができます。また、ライセンスもVST3SDKが[GPLv3または"Proprietary Steinberg VST 3"](https://developer.steinberg.help/display/VST/VST+3+Licensing)なのに対し、VSTGUIは[VSTGUIライセンス](https://steinbergmedia.github.io/vst3_doc/vstgui/html/page_license.html)（三条項BSDライセンス）となっています。

# サンプルアプリ

VSTGUIスタンドアロンライブラリの公式サンプルアプリは以下の4種です。

simple_standalone
![st1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/436b30ee-2108-6cf4-1af5-afd0c2fc788d.png)
standalone
![st2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/5dadcfe9-0cd6-00a1-e650-fae7cae42610.png)
mandelbrot
![st3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/fca26c20-62d1-9c4a-e72c-ebbe12980bf4.png)
Minesweeper
![st4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22455/61304da3-ad1a-fb63-c9a9-cc004321e17e.png)




# ビルド方法

## VST3SDKとVSTGUIを同時にビルドする方法(NG)

たとえばWindowsの場合、コマンドプロンプトで以下のようにするとVST3SDKとVSTGUIがビルドされますが、前述のとおりこれではサンプルのスタンドアロンアプリはビルドされません。

```
> cd VST_SDK
> mkdir build
> cd build
> cmake -G "Visual Studio 15 2017 Win64" ..\vst3sdk
> cmake --build . --config Release
```

本来であれば以下のように指定すればサンプルアプリもビルドされるはずなのですが、

```
> cmake -DVSTGUI_STANDALONE_EXAMPLES=ON -G "Visual Studio 15 2017 Win64" ..\vst3sdk
```

VST_SDK\vst3sdk\cmake\modules\SMTG_VstGuiSupport.cmakeの中で以下のようにわざわざOFFに指定するマクロを定義しており、これの影響でコマンドラインの変数定義が無視されてしまいます。

```ruby
macro(smtg_enable_vstgui_support)
    set(VSTGUI_DISABLE_UNITTESTS 1)
    set(VSTGUI_STANDALONE_EXAMPLES OFF)
    set(VSTGUI_STANDALONE ON)
    set(VSTGUI_TOOLS OFF)
```

## VSTGUIを単独でビルドする方法

解決方法としては、VSTGUIを単独でビルドするのが簡単です。この場合、何も変数定義を指定しなくてもサンプルプログラムがビルド対象になります。

```
> cd VST_SDK\vst3sdk\vstgui4
> mkdir build
> cd build
> cmake -G "Visual Studio 15 2017 Win64" ..
> cmake --build . --config Release
```

この手順でビルドすると、base64codecspeed.exe、GFXTest.exe、uidesccompressor.exeといったツールも一緒にビルドされます。これらのツールもVST3SDKと一緒にビルドした場合は生成されません。


# 実行方法

## 単独起動の場合

前項まででプロジェクトファイルの生成とビルドができました。例えば以下の場所にある.exeファイルを実行するとスタンドアロンアプリが起動します。

VST_SDK\vst3sdk\vstgui4\build\Release\simple_standalone\

## IDEから起動する場合

Visual Studioからソースコードを見ながら動作確認したい場合、プロジェクトファイルは以下の場所にあります。

VST_SDK\vst3sdk\vstgui4\build\vstgui\standalone\examples\simple_standalone\




# スタンドアロンアプリからVST3SDKの利用

サンプルアプリを見る限り、スタンドアロンアプリからVST3SDKを使うことは想定されていないようです。つまりスタンドアロンのシンセアプリを作るには、簡易的でもVST3ホスト相当のものを作る必要があり、またそのままスタンドアロンシンセとして利用できるようなホストアプリのサンプルは提供されていません。
これはちょっと残念です。


[VST3制作の過去記事一覧はこちら](https://qiita.com/aike@github/items/05a14911bb89db8b6c2c)