
VST3 SDK 3.8で自作ゲインプラグイン「MyGain」をビルドしDAWで動かすまで
はじめに
本記事では、VST3 プラグインがどんなものかをざっくりと整理し 、そのうえで公式サンプルをベースに MyGain というシンプルな VST3 プラグインをビルドする手順を紹介します。環境は Windows + Visual Studio 2022 を前提に、「自作プラグインを DAW から読み込めるようにする」ことを目標に進めます。
対象読者
- C++ でオーディオプラグインを触ってみたい DAW ユーザー
- VST2 / VST3 の違いをざっくり掴みたいプラグイン開発初心者
- VST3 SDK の MIT ライセンス化を機に「そろそろ試してみようかな」と思っている方
本記事のゴール
- 公式サンプルをベースにした
MyGainという VST3 プラグインを自分の DAW で読み込める状態にする - その過程で、VST3 プラグインのざっくりした構造と、VST2 との違いのイメージ を掴む
参考
VST3 プラグインについて
「VST プラグイン」とは何か
VST(Virtual Studio Technology)は、DAW とオーディオプラグインをつなぐ共通インターフェース です。 ホスト(DAW)がオーディオやイベントをプラグインに渡し、プラグインはそれを処理して結果を返す という約束事を定めています。
典型的な VST プラグインが持つ機能は次の 3 つです。
- オーディオ I/O
入力サンプルを受け取り、エフェクト/シンセの処理を行って出力する - パラメータ
ゲインやカットオフ周波数など、ホストからオートメーションできる値 - GUI(エディタ)
つまみやメーターを描画し、ユーザー操作をパラメータに反映する画面
VST2 の時代は、これらがほぼ 1 つのクラスにまとまっており、「オーディオ処理と UI を同じオブジェクトで面倒を見る」ような構成が一般的でした。
VST2 から VST3 への主な変更点
VST3 は、長く使われてきた VST2 を整理し直した新しい規格です。細かい機能追加はいろいろありますが、次の 3 点を押さえておくと理解しやすいです。
- コンポーネントの分離
オーディオ処理を行う「プロセッサ」と、パラメータや GUI を扱う「コントローラ」が 別コンポーネント として定義されました。これにより、処理と UI を別スレッドや別プロセスに分けやすくなっています。 - 入出力(バス)の柔軟化
VST2 のような「ステレオイン/ステレオアウト固定」ではなく、バスという単位で I/O を追加したり無効化したりできます。サイドチェイン入力やマルチチャンネル対応が素直に書けるようになりました。 - サンプル精度のオートメーション
パラメータの変化がサンプル単位で渡されるため、素早いモジュレーションでもステップ感の少ないスムーズな変化が行えます。
このあたりをざっくり「構造をきれいに分け直した VST」とイメージしておくと、サンプルコードを読んだときにピンと来やすくなります。
実際にはもっと細かなインターフェースに分かれますが、「VST3 ではコンポーネントを分けて、ホストとの接点を整理し直した」という大枠だけまずは掴んでもらえれば十分です。
VST3 SDK の MIT ライセンス化について
2025 年 10 月、Steinberg は VST 3.8 SDK を公開すると同時に、ライセンスを MIT ライセンスに変更 しました(参考)。以前は Steinberg 独自ライセンス(+場合によっては個別契約)が必要でしたが、現在は MIT ライセンスに従うことで、商用製品への組み込みも含めて自由に利用できる ようになりました。条件は「著作権表示とライセンス文を残すこと」のみです。
一方で、VST ロゴや "VST" という商標の扱いは別 で、これらを表示したい場合は SDK に同梱されている VST Usage Guidelines に従う必要があります。「コードのライセンスはかなり自由になったが、ブランド表示にはルールがある」という点だけ頭の片隅に置いておくと安心です。
公式サンプルをベースに MyGain をビルドする
ここからは、公式サンプルの AGain をベースにして、 MyGain という名前の VST3 プラグインをビルドする手順をざっくりまとめます。環境は Windows + Visual Studio 2022 です。
SDK の取得とビルド
まずは VST3 SDK を clone し、サンプルがビルドできる状態にします。
git clone --recursive https://github.com/steinbergmedia/vst3sdk.git
cd vst3sdk
mkdir build
cd build
cmake -G "Visual Studio 17 2022" -A x64 .. -DSMTG_CREATE_PLUGIN_LINK=OFF
build ディレクトリ以下に、 vstsdk.sln という Visual Studio Solution ファイルが生成されるので、これを開きます。

Release x64 ビルドを選択し、ソリューションエクスプローラーから Plugin-Examples > again を右クリックしてビルドします。

ビルドが通ると、 build/VST3/Release に again.vst3 というサンプルプラグインが生成されます。

これを C:\Program Files\Common Files\VST3 など、各自の DAW が参照する VST3 フォルダにコピーすると、エフェクト一覧に AGain が現れます。


MyGain プロジェクトを作成する
次に、SDK 本体とは別に 自分用のプロジェクトフォルダ を切ります。今回は次のような構成にしました。
vst3sdk/ # さきほど clone した SDK
MyGain/
CMakeLists.txt
source/ # AGain のソースをコピー
resource/ # AGain のリソースをコピー
source と resource には、public.sdk/samples/vst/again/ 以下のファイルを丸ごとコピーしてしまうのが一番手っ取り早いです。最初の段階では「AGain がそのままビルドできる状態」をゴールにし、後から名前だけ MyGain に差し替えていきます。
CMakeLists.txt の最小構成
MyGain/CMakeLists.txt では、まず SDK をサブディレクトリとして読み込み、そのあと自作プラグインのターゲットを定義します。イメージは次のような形です。
cmake_minimum_required(VERSION 3.25.0)
project(MyGain
VERSION 1.0.0
DESCRIPTION "My simple gain plug-in"
)
# VST3 SDK の場所(MyGain の 1 つ上の階層にある前提)
set(vst3sdk_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/../vst3sdk")
# SDK をサブディレクトリとして追加
add_subdirectory(${vst3sdk_SOURCE_DIR} ${PROJECT_BINARY_DIR}/vst3sdk)
# SDK 側の CMake 機能を有効化
smtg_enable_vst3_sdk()
if(NOT SMTG_ENABLE_VSTGUI_SUPPORT)
return()
endif()
# MyGain プラグインのソース一式(AGain のファイル名のままで OK)
set(mygain_sources
source/again.cpp
source/again.h
source/againcids.h
source/againcontroller.cpp
source/againcontroller.h
source/againentry.cpp
source/againparamids.h
source/againprocess.h
source/againsidechain.cpp
source/againsidechain.h
source/againuimessagecontroller.h
source/version.h
resource/again.uidesc
)
# ターゲット名だけ "MyGain" にする(SDK の AGain と衝突しないように)
set(target MyGain)
smtg_add_vst3plugin(${target} ${mygain_sources})
smtg_target_configure_version_file(${target})
target_compile_features(${target} PUBLIC cxx_std_17)
target_link_libraries(${target}
PRIVATE
sdk
vstgui_support
)
smtg_target_add_plugin_resources(${target}
RESOURCES
resource/again.uidesc
resource/background.png
resource/slider_background.png
resource/slider_handle.png
resource/slider_handle_2.0x.png
resource/vu_on.png
resource/vu_off.png
)
ポイントは ターゲット名だけ MyGain に変えている ところです。こうしておくと、SDK 側の AGain(サンプルプロジェクト)とターゲット名がかぶらずに済みます。
この状態で MyGain/build 以下で下記を実行し、 Visual Studio Solution ファイルを作成します。
cmake -G "Visual Studio 17 2022" -A x64 .. -DSMTG_CREATE_PLUGIN_LINK=OFF

プラグイン名やベンダー名を MyGain 用にする
まだプラグイン名や UI のタイトルが AGain のままなので、次の 3 か所を変更しました。
-
againentry.cpp- #define stringPluginName "AGain VST3" + #define stringPluginName "MyGain"併せて、サイドチェイン版(
AGain SideChain)をコメントアウトしておけば、エフェクト一覧には MyGain だけが表示されるようになります。//---Second plug-in (AGain with sidechain (only component, use the same controller) included in this factory------- //DEF_CLASS2 (INLINE_UID_FROM_FUID(AGainWithSideChainProcessorUID), // PClassInfo::kManyInstances, // cardinality // kVstAudioEffectClass, // the component category (do not change this) // stringPluginSideChainName, // here the plug-in name (to be changed) // Vst::kDistributable, // means that component and controller could be distributed on different computers // AGainVST3Category, // Subcategory for this plug-in (to be changed) // FULL_VERSION_STR, // Plug-in version (to be changed) // kVstVersionString, // the VST 3 SDK version (do not change this, always use this define) // Steinberg::Vst::AGainWithSideChain::createInstance) // function pointer called when this component should be instantiated -
version.h- #define stringOriginalFilename "again.vst3" - #define stringFileDescription "AGain VST3-SDK (64Bit)" - #define stringCompanyName "Steinberg Media Technologies" + #define stringOriginalFilename "MyGain.vst3" + #define stringFileDescription "MyGain example VST3 plug-in (64-bit)" + #define stringCompanyName "Example Audio Labs" -
resource/again.uidesc
一番上のタイトルラベルにtitle="VST3 AGain"と書かれているので、ここをtitle="MyGain"に置き換えます。これで、プラグインウィンドウのタイトルバーも MyGain になります。- <view back-color="Title Background" background-offset="0, 0" class="CTextLabel" default-value="0.5" font="~ NormalFontVeryBig" font-antialias="true" font-color="~ WhiteCColor" frame-color="Title Background" frame-width="1" max-value="1" min-value="0" mouse-enabled="true" opacity="1" origin="10, 10" round-rect-radius="10" shadow-color="~ RedCColor" size="310, 28" style-3D-in="false" style-3D-out="false" style-no-draw="false" style-no-frame="false" style-no-text="false" style-round-rect="true" style-shadow-text="false" text-alignment="center" text-inset="0, 0" text-rotation="0" title="VST3 AGain" transparent="false" value-precision="2" wheel-inc-value="0.1"/> + <view back-color="Title Background" background-offset="0, 0" class="CTextLabel" default-value="0.5" font="~ NormalFontVeryBig" font-antialias="true" font-color="~ WhiteCColor" frame-color="Title Background" frame-width="1" max-value="1" min-value="0" mouse-enabled="true" opacity="1" origin="10, 10" round-rect-radius="10" shadow-color="~ RedCColor" size="310, 28" style-3D-in="false" style-3D-out="false" style-no-draw="false" style-no-frame="false" style-no-text="false" style-round-rect="true" style-shadow-text="false" text-alignment="center" text-inset="0, 0" text-rotation="0" title="MyGain" transparent="false" value-precision="2" wheel-inc-value="0.1"/>
MyGain のビルドと動作確認
Release x64 でビルドすると、build/VST3/Release に MyGain.vst3 が生成されます。


MyGain.vst3 を VST3 フォルダにコピーし、DAW を起動し直すと、下記の状態にまで持っていくことができました。
- エフェクト一覧に「MyGain」が並ぶ
- ベンダー名が
Example Audio Labs(version.h で指定した文字列)になっている - GUI のタイトルも
MyGainになっている


中身の DSP はサンプルのゲイン処理そのままですが、「自分の名前のついた VST3 プラグインが DAW に載る」というところまで行くと、次のステップ(DSP を差し替える、パラメータを増やすなど)に進みやすくなります。
おわりに
本記事では、VST3 プラグインのざっくりした構造と、VST2 からの主な違いを整理しつつ、公式サンプル AGain をベースに MyGain という VST3 プラグインをビルドする手順を紹介しました。VST3 SDK の MIT ライセンス化により、コードレベルでは非常に扱いやすいオープンな開発基盤になっているため、趣味でも商用でも参入のハードルはかなり下がっています。まずは今回のようにサンプルをそのまま動かし、自分の名前やパラメータを少しずつ変えてみるところから、VST3 開発の第一歩を踏み出してみてはいかがでしょうか。









