プラグイン VST

提供:yonewiki
2023年5月27日 (土) 11:28時点におけるYo-net (トーク | 投稿記録)による版 (→‎VSTeプログラミング初歩)

言語と開発環境へ戻る。

概要

 SteinBergが提唱したDAW用のプラグイン構造で、SteinBergが提供するSDKを使って、プラグインDLL(*.dll)や上位機能のVST3(*.vst3)のようなファイルを生成し、DAWに読み込ませることで、拡張機能が実現できるといった仕組みです。


 拡張機能には2種類あって、VSTi(iはinstrumentで機器というような意味だけど、ここでは楽器を意味する)とVSTe(eはeffectという意味)があります。VSTiは音を鳴らす機能を有します。シンセサイザーやサンプラーのような仕組みをもった機能をプログラムによって制作した場合にVSTiとなります。もう一つは、音声波形に対して、音響効果を与えるような機能を持ったプログラムを制作した場合にVSTeとなります。DAWからプラグインが受け取る情報とプラグインからDAWに情報を受け渡すしくみがSDKによって提供されています。VSTが発案されたのが、1996年ですが、2023年時点でもC++言語による開発方法のみが提供されています。


導入

  • MicrosoftからVisual Studio 2022をインストールします。
 https://visualstudio.microsoft.com/ja/
 Windows版 Visual Studio 2022 Community が無償版になります。多くの人はこれを使うと思います。ダウンロードして起動するとインストールが始まります。何をインストールするか指示しなければなりませんが、VST作成にはC++開発環境だけが必要ですので、[C++によるデスクトップ開発]のところにチェックボックスに印を入れるだけで良いです。他の作業をしたくなったら、またVisual Studio Installerを起動して、追加していくことが出来ます。スタートメニューに項目があるので、そこからどうぞ。


  • SteinBergのホームページからSDKをダウンロードします。
 https://www.steinberg.net/developers/から「VST 3 Audio Plug-ins SDK」をダウンロードします。2023年4月下旬時点ではvst-sdk_3.7.7_build-19_2022-12-12.zipがダウンロードされます。頻繁に更新はされているのですが、古い技術がまったく使えなくなるというようなことは少ないので最新版を使うとよいでしょう。古いものを使うということを推奨していないようです。現に古いモノへのリンクはなく入手は出来ません。直リンクは残っているので、URLを知っている場合は古いものが入手出来ます。大規模開発をチームでやっている場合は困ることもあるかもしれません。古いものは入手した側が管理しなければならないのでしょう。


  • Windows版の場合はC:¥Program Files¥Common Files¥VST3というフォルダを作成します。


  • ダウンロードしたファイルをC:¥SDK¥VST_SDK。C:¥SDK¥VST_SDK¥vst2sdk、C:¥SDK¥VST_SDK¥vst3sdk。となるように配置します。C:¥SDKの部分は任意の位置にすることが出来ます。好きな場所へどうぞ。
古いバージョンの場合。vst3sdkではなくVST3_SDKとなっています。vst2sdkもVST2_SDKとなっています。
  • Visual Studio 2022 Community を起動します。ファーストアクションダイアログで「フォルダーを開く」を選択するか、ダイアログが開いていない場合はメニューの[ファイル]-[開く]-[フォルダ]を選択する。あるいは[Ctrl]+[Shift]+[Alt]+[O]をキー入力します。


  • C:¥SDK¥VST_SDK¥vst3sdkを開きます。


  • とにかく、待ちます。いつまで?
 出力Windowに「CMake生成が完了しました」みたいな表示が出るまで待ちます。
 3.7.7では高速化のためだと思われますが、NinjaというCMakeビルドシステムを使うように指定されていますが、VisualStudio2022Communityでは正しく動作しませんでした。そこで、一度以下のようなエラーが表示されたら


重大度レベル	コード	説明	プロジェクト	ファイル	行	抑制状態
エラー		CMake Error:
 Running

  'C:/(任意*Default値=Program Files)/Microsoft Visual Studio/2022/Community/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe' '-C' 'C:/(任意)/VST_SDK/vst3sdk/out/build/x64-Debug' '-t' 'recompact'

 failed with:

  ninja: error: build.ninja:3524: bad $-escape (literal $ must be written as $$)		C:\(任意)\VST_SDK\vst3sdk\   ninja		


 メニューの[プロジェクト]-[vstsdkのCMakeの設定]を開きます。そうするとCMakeSettings.jsonというタブが作られ、その詳細が表示されます。そのタブの下の方に高度な設定と表示というリンクがあるのでクリックするとさらに詳細が表示されます。その中にあるCMakeジェネレータを[Ninja]から[Visual Studio 17 2022 Win64]に変更します。そして保存をします。


 しばらくすると出力Windowに「CMake生成が完了しました」と表示されると思います。構成名がx64-Debug(既定値)のように後ろに日本語が付くことでエラーが発生するケースもあるそうです。ビルドルートの${name}と記載されている部分をx64-Debugに置き換えるとうまくいくようです。${projectDir}¥out¥build¥${name}を${projectDir}¥out¥build¥x64-Debugにするということです。その他のトラブルケースになった場合はわかりません。ご自分で対処なさってください。


  • メニューの[ビルド]-[すべてビルド]を選択します。


  • また、とにかく待ちます。いつまで?
 出力Windowに「すべてビルド が成功しました。」と表示されるとよいです。


  • C:¥(任意)¥VST_SDK¥vst3sdk¥out¥build¥x64-Debug¥lib¥Debugに*.libファイルが生成されていることが重要です。
  • base.lib
  • sdk.lib
  • sdk_common.lib
  • pluginterface.lib
  • vstgui.lib
  • vstgui_support.lib
  • vstgui_uidescription.lib

全27ファイル.バージョンによって数は異なるそうな。


■CMakeの設定規定値

  • 構成 x64-Debug
  • 全般
  • 構成名
x64-Debug
  • 構成の種類
Debug
  • ツールセット
msvc_x64_x64
  • CMakeツールチェーンファイル
None
  • ツールセット
msvc_x64_x64
  • コマンド引数
  • CMakeコマンド引数
None
  • ビルドコマンド引数
None
  • CTestコマンド引数
None
  • CMake変数とキャッシュ
名前
CMAKE_BUILD_TYPE Debug
VSTGUI_ENABLE_DEPRECATED_METHODS [レ]
SMTG_USE_STATIC_CRT [ ]
SMTG_RUN_VST_VALIDATOR [レ]
SMTG_RENAME_ASSERT [レ]
SMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON [レ]
SMTG_PLUGIN_TARGET_USER_PATH None
SMTG_MDA_VST3_VST2_COMPATIBLE [レ]
SMTG_JACK_SDK_PATH None
SMTG_ENABLE_VSTGUI_SUPPORT [レ]
SMTG_ENABLE_VST3_PLUGIN_EXAMPLES [レ]
SMTG_ENABLE_VST3_HOSTING_EXAMPLES [レ]
SMTG_ENABLE_TARGET_VARS_LOG [ ]
SMTG_ENABLE_ADDRESS_SANITIZER [ ]
VSTGUI_ENABLE_OPENGL_SUPPORT [レ]
SMTG_CXX_STANDARD None
SMTG_CREATE_VST2_AGAIN_SAMPLE_VERSION [ ]
SMTG_CREATE_PLUGIN_LINK [レ]
SMTG_CREATE_MODULE_INFO [レ]
SMTG_CREATE_BUNDLE_FOR_WINDOWS [レ]
SMTG_ADD_VST3_UTILITIES [レ]
SMTG_CREATE_BUNDLE_FOR_WINDOWS [レ]
SMTG_AAX_SDK_PATH None
LIBJACK_libjackserver_LIBRARY LIBJACK_libjackserver_LIBRARY-NOTFOUND
LIBJACK_libjack_LIBRARY LIBJACK_libjack_LIBRARY-NOTFOUND
LIBJACK_INCLUDE_DIR LIBJACK_INCLUDE_DIR-NOTFOUND
CMAKE_OSX_DEPLOYMENT_TARGET 10.13
CMAKE_MAKE_PROGRAM C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions/Microsoft/CMake/Ninja/ninja.exe
CMAKE_INSTALL_PREFIX C:\(任意)\VST_SDK\vst3sdk\out\install\x64-Debug
CMAKE_EXPORT_COMPILE_COMMANDS ON
SMTG_CUSTOM_BINARY_LOCATION None
VSTGUI_ENABLE_XMLPARSER [レ]
  • 詳細設定
  • CMakeジェネレータ
Ninja
  • IntelliSenseモード
選択されていません
  • インストールディレクトリ
${projectDir}\out\install\${name}
  • CMake実行可能ファイル
None

 

動作確認用アプリ

 VSTの動作確認用のアプリが同梱されています。

  • VST3PluginTestHost 64bit
C:\(任意)\VST_SDK\vst3sdk\bin\Windows 64 bit\VST3PluginTestHost_x64_Installer_3.4.0.zip
  • Generic_Lower_Latency_ASIO_Driver_64bit
C:\(任意)\VST_SDK\vst3sdk\bin\Windows 64 bit\Generic_Lower_Latency_ASIO_Driver_64bit_Installer_1.0.20.9.zip


基礎

 導入が終わった時点ではまだ準備はできていません。プロジェクトでSDKを使うという設定をしなければならないし、Visual Studio 2022で作成を始めると必ず通る道である基礎というものがあります。そこを見てみましょう。その先はそれぞれが歩みだせることでしょう。ほんとか?

 

自動生成手順(かなり無駄が多く肥大化するのでオススメ出来ない。)

 おすすめ出来ないとは書きましたが、入門のときは最小構成で全てを理解していった方が良いというのと何度もトライするのに巨大なファイルサイズになるのはどうなのかなと思っただけの事です。本格的にプロジェクトを進めるときには、便利だと思います。

  • gitツールをダウンロードしてインストールする。インストールの仕方の説明書・一つの例は以下にあります。
https://git-scm.com/download/winからダウンロードする。
MathJaxをデバッグしてJavaScriptの理解を深める#デバッグ環境を整えるに手順が説明されています。


  • CMakeツールをインストールする。
https://cmake.org/download/からダウンロードしてインストールします。


  • Git CMDを起動して、以下のコマンドを実行する。
git clone https://github.com/steinbergmedia/vst3projectgenerator.git
mkdir build
cd build
cmake -G "Visual Studio 17 2022" ../vst3projectgenerator
cmake --build .


  • -Gオプションには以下のものが使えます。
Visual Studio 16 2019
Visual Studio 15 2017 [arch] "Win64" or "ARM"
Visual Studio 14 2015 [arch] "Win64" or "ARM"
Visual Studio 12 2013 [arch] "Win64" or "ARM"
Visual Studio 11 2012 [arch] "Win64" or "ARM"
Visual Studio 9 2008 [arch] "Win64" or "ARM"


  • VST3ProjectGenerator\build\Debug\VST3_Project_GeneratorにVST3_Project_Generator.exeというジェネレータ実行ファイルができるので、これを使います。


  • gitとCMakeを使わない場合は



  • 解凍する。


  • 解凍したフォルダのvst3projectgenerator-masterフォルダをVisual Studio 2022 Communityで開く。
CMakeLists.txtファイルがあるフォルダです。


  • Visual Studio 2022 Communityのメニュー、[ビルド]-[すべてビルド]を選択します。


  • vst3projectgenerator-master\out\build\x64-Debug\Debug\VST3_Project_GeneratorのVST3_Project_Generator.exeを使います。


  • VST3_Project_Generator.exeを起動します。あ、結局CMakeいりますね。ダウンロードしてインストールして下さい。VST3_Project_Generator.exeを作成済みの場合、つまり2回目以降のVSTプロジェクト自動生成はここからの作業になります。


  • 起動したら最初にPreferencesの項目をうめうめします。
上側領域がCompany Informationです。Vendor名。E-Mail。URL。入力します。なんでもいいでしょう。
下側領域がPath Preferencesです。
VST3_SDKにはVST_SDKのインストール先のパスを入力します。
C:\(任意)\VST_SDK\vst3sdk
CMake Executable PathにはCMake.exeへのパスを入力します。
C:\(任意*規定ではProgram Files)\CMake\bin\cmake.exe


  • 次にCreate Plugin Projectのタブへ移って、各項目を入力します。
Name = CodeTester
Type = Audio Effect Or Audio Instrument
C++ClassName = MyPlugin
Bundle ID = com.任意英字(プラグイン製造組織名).任意英字(プラグイン名)
FilenamePrefix = 任意
OutputDirectory = 任意
CMake Generator = Visual Studio 17 2022
CMake Platform = x64


  • Createボタンを押します。


  • 出来上がったプロジェクトが起動します。ためしにビルドしてみました。ところがエラー発生。
14>EXEC : CMake error : failed to create symbolic link 'C:/Users/(ユーザ名)/AppData/Local/Programs/Common/VST3/CodeVSTiTest.vst3': ・スN・ス・ス・スC・スA・ス・ス・スg・スヘ要・ス・ス・ス・ス・ス黷ス・ス・ス・ス・ス・ス・スロ有・ス・ス・ストゑソス・スワゑソス・ス・スB


 文字化けしたエラーメッセージですね。シンボリックリンクが作成出来ませんでしたと言っているようです。なんだそれ。


 オススメ出来ないばかりかエラーまであるとは、こりゃ大変だ。何が原因かわかるまで、しばらくかかりそうだな。


 あー。管理者として実行しないと作れないだけなんだな。同じようなエラーが出るようでしたら、一度、Visual Studioを終了させて、起動アイコンを右クリックして表示されるメニューから、[その他]-[管理者として実行]を選択してアプリケーションを起動して、もう一度ビルドしてみて下さい。VSTのプログラムが作れる状態になっていると思います。


 手動で準備するのは割かし大変なので、楽かもね。余計なコードが沢山あるけど、本気だして作るときは便利かもね。お試しで使ってみるときは少しづつ構築するとわかりやすいので、手動も覚えてみるのもいいかもしれない。


  • メニューの[プロジェクト]-[プロジェクト名(CodeTester)のプロパティ]を選択します。


 表示されたダイアログで以下のように編集します。
 ▽構成プロパティ
  ▽リンカー
   入力 - [モジュール定義ファイル]=「./任意.def」を追記

 

こつこつ手作業でやっていく手順

  • Visual Studio 2022 Communityを起動します。


  • ファーストステップダイアログで[新しいプロジェクトの作成]を選択します。


  • [Windowsデスクトップウィザード]を選択します。dllを作成するプロジェクトにしたいからです。


  • プロジェクト名を何かしら決めます。管理人はCodeTesterとしました。好きな単語でもなんでもいいでしょう。そして次へです。
 どうせ、適当なことをやってすぐ消すことになるし、深く考えない方が良いでしょう。本格的に世に出すモノを作る時はキャッチーな素晴らしい名前を考えた方がよろしいかと思います。とにかく素早く考えて、決めて、入力編集したら[次へ]を選択します。
C:\User\(ユーザ名)\source\reposに保存され、ソリューション名も同じで「CodeTester」がプロジェクト名になりました。


  • 表示されたダイアログでアプリケーションの種類を[ダイナミックリンクライブラリ(.dll)]にして、空のプロジェクトのチェックボックスにレ点を入れて[OK]ボタンを押します。
 これで、いよいよプロジェクトの編集が開始できますがまだ準備することがあります。プロジェクトの設定とか、メインプログラムの定型部分のコピーとか、モジュール定義の定型部分の設定とかです。やってみましょう。


  • メニューの[プロジェクト]-[プロジェクト名(CodeTester)のプロパティ]を選択します。
 表示されたダイアログで以下のように編集します。
 ▽構成プロパティ
  詳細 - [ターゲットファイルの拡張子]=「.vst3」
  VC++ディレクトリ - [インクルードディレクトリ]=「C:\(任意)\VST_SDK\vst3sdk」を追記
  VC++ディレクトリ - [インクルードディレクトリ]=「C:\(任意)\VST_SDK\vst3sdk\vstgui4」を追記
  VC++ディレクトリ - [ ライブラリディレクトリ]=「C:\(任意)\VST_SDK\vst3sdk\out\build\x64-Debug\lib\Debug」を追記
古いバージョンの場合。vst3sdkではなくVST3_SDKとなっています。
  ▽C/C++
   全般 - [SDLチェック]=「いいえ(/sdl-)」
   プリプロセッサ - [プリプロセッサの定義]=「VSTGUI_LIVE_EDITING=1」を追記
   プリプロセッサ - [プリプロセッサの定義]=「DEVELOPMENT=1」を追記
  ▽リンカー
   入力 - [追加の依存ファイル]=「base.lib」を追記
   入力 - [追加の依存ファイル]=「sdk.lib」を追記
   入力 - [追加の依存ファイル]=「sdk_common.lib」を追記
   入力 - [追加の依存ファイル]=「pluginterfaces.lib」を追記
   入力 - [追加の依存ファイル]=「vstgui.lib」を追記
   入力 - [追加の依存ファイル]=「vstgui_support.lib」を追記
   入力 - [追加の依存ファイル]=「vstgui_uidescription.lib」を追記
   入力 - [モジュール定義ファイル]=「./任意.def」を追記


 VSTGUI_LIVE_EDITINGとDEVELOPMENTの定義はDEBUG版のプロジェクトに対して設定するように、自動生成版のVSTプロジェクトでも実施されるのを確認しています。、何に使われているかは今のところ不明です。わかり次第、詳細をお知らせしたいと思います。ひとつ言えるのはVSTGUIのインラインUIエディターというのを使うときに必要になってくる宣言であるとWeb界隈では説明がありました。さらなる続報はあるかどうかわかりません。頑張って調べてはみます。

 

ここからは、こつこつ手順と自動手順のその後の共通の作業です

  • 古いバージョンの場合 *.defファイルを作ります。いや、新しいのでもいるな。いらなくなったかもって呟いてる人いたけど、自分はそうは思いません。いりますね。だって書いてあるもん。自動生成したときにできるファイルのsource¥$(Prefix)entry.cppの20行目21行目に
// Windows: do not forget to include a .def file in your project to export
// GetPluginFactory function!

 ね。書いてるでしょだから作るんです。でも、ちゃんと設定したら、DEFファイルは必要ないのだけどね。


 ファイル名はなんでも良いです。プロジェクトのプロパティからリンカーの入力のモジュール定義に設定したファイル名に合わせて、 *.vcprojのあるフォルダに配置します。定義した時にパスも任意に設定出来るので、合わせていれば任意のフォルダに配置する事も出来ます。ファイルの中身は以下のようにします。
EXPORTS
GetPluginFactory
 GetPluginFactoryは外部に見せたい関数の名前になります。外部に見せたいGetPluginFactory関数のプログラム自体はSDKの中のライブラリに生成されてある関数となっています。

 

VSTeプログラミング初歩

 

言語と開発環境へ戻る。