Mac (Xcode) で VST3 プラグイン開発を始める

こんにちは。音楽もやっているエンジニア、亀山です。

Steinberg が提供する VST3 SDK を使うと、Cubase といった DAW 上で動作するソフトウェアである VST プラグインを開発することができます。今回は、VST プラグインの開発環境構築について書きます。

環境

  • macOS Venture 13.5.2
  • Xcode 15
  • cmake 3.26.3

SDK の配置

(後述の submodule を利用する方法もオススメです)

  1. SDK を Steinberg のサイト よりダウンロードします
  2. 解凍して ~/vst3sdk に配置

VST3_Project_Generator

SDK に付属してくる VST3_Project_Generator を起動すると、プロジェクトを生成するためのアプリが起動します。 プラグインの名前などを入力すると、CMakeLists.txt が生成され、プロジェクトの生成が行われます。

ところが、CMake Generator を Xcode に指定すると、下記のようなエラーが発生します。

PhaseScriptExecution CMake\ PostBuild\ Rules /Users/ryohey/Repository/VST3Example/MIDIOutputExample/build/build/validator.build/Debug/Script-0FCC6575D9B49861AF65DEE7.sh (in target 'validator' from project 'MIDIOutputExample')
    cd /Users/ryohey/Repository/VST3Example/MIDIOutputExample
    /bin/sh -c /Users/ryohey/Repository/VST3Example/MIDIOutputExample/build/build/validator.build/Debug/Script-0FCC6575D9B49861AF65DEE7.sh

/Users/ryohey/Repository/VST3Example/MIDIOutputExample/build/build/validator.build/Debug/Script-0FCC6575D9B49861AF65DEE7.sh: line 6: 27473 Killed: 9               /Users/ryohey/Repository/VST3Example/MIDIOutputExample/build/bin/Debug/validator -selftest
Command PhaseScriptExecution failed with a nonzero exit code

CMakeLists.txt が出力された場所で cmake コマンドを使うとビルドができました。

cmake -B build
cmake --build build

build/VST3/MIDIOutputExample.vst3 のように出力されます。サンプルで付属してくる adelay.vst3 なども入っていました。

ビルドすると自動的にに ~/Library/Audio/Plug-Ins/VST3 にシンボリックリンクが作られます。DAW の一種である REAPER を起動すると読み込んでくれました。

サンプルのビルド

SDK に付属してくるサンプルプロジェクトのビルドを行います。

https://steinbergmedia.github.io/vst3_dev_portal/pages/Tutorials/Building+the+examples/Building+the+examples+included+in+the+SDK+macOS.html

cd ~/vst3sdk
mkdir build
cd build
cmake -GXcode ../
xed .

これで Xcode プロジェクトが生成されます。しかし、ビルドすると次のようなエラーが発生しました。

/Users/ryohey/vst3sdk/build/bin/Debug/validator
Killed: 9

validator の Build Phases の CMake PostBuild Rules で validator 自身を使っているために問題が起きているのかもしれません。下記のように一度成功として通るようにしてから一度ビルドし、exit 0; を外してもう一度ビルドを実行すると成功するようになりました。

set -e
+ exit 0;
if test "$CONFIGURATION" = "Debug"; then :

同じように Project Generator で生成した Xcode プロジェクトでもエラーが発生するので、validator の Build Phases に exit 0; を追加してビルドし、また外してビルドします。さらに MIDIOutputExample (プロジェクト名) のターゲットも同様に exit 0; の追加、削除を行うとビルドできるようになりました。なかなか不便なので、もし解決法を知っている方がいたら教えてくれると助かります。set -e を消しても良い気もします。

プロジェクト構成

ここまでは ~/vst3sdk に SDK を配置して開発を行ってきました。しかし、チーム開発となるとこの方法では CMakeLists.txt にユーザー名を含む絶対パスが記述されるなど、よろしくない部分があります。そこで、プロジェクトのリポジトリに submodule として VST3 SDK を追加する方法がおすすめです。次のリポジトリを参考にしました。

github.com

できたプロジェクトをサンプルとして公開しましたので、ぜひご参考にしてください。

github.com

デバッグ

DAW で VST プラグインをロードし、Attach to process でデバッガにアタッチすることで、ブレークポイントで止めたりといったデバッグが可能になります。Xcode 上だけで開発が完結して便利ですね。