「プラグイン VST」の版間の差分
| (同じ利用者による、間の6版が非表示) | |||
| 4行目: | 4行目: | ||
クロスプラットフォーム開発はおいておいたとして、StandaloneアプリとVST開発の並行開発環境を構築するやり方をここでは紹介したいと思います。 | |||
| 25行目: | 25行目: | ||
(VST_SDK_Root)\VST3_Project_Generator\Windows_x64\VST3_Project_Generator.exe | (VST_SDK_Root)\VST3_Project_Generator\Windows_x64\VST3_Project_Generator.exe | ||
を起動します。Welcomeのタブでvst3sdkのフォルダとCMakeファイルのありかを設定します。あとからPreferencesタブからでも修正できます。 | を起動します。Welcomeのタブでvst3sdkのフォルダとCMakeファイルのありかを設定します。あとからPreferencesタブからでも修正できます。 | ||
| 36行目: | 37行目: | ||
まずPreferencesタブの設定をしよう | |||
*VendorにVSTを開発する組織の名前を入れよう。個人の場合でもなんか決めて入れよう。管理人はアプリ開発の組織にはYoneTechStudioという名称を使っています。 | |||
*E-Mailには公開してもいいメールアドレスを使おう。 | |||
*URLには作ったVSTの情報を提供するURLを記述しよう。SNSの記事のアドレスとかでもいいよね。そこで延々とリプライだけで情報を伝えるならね。 | |||
*C++Namespaceもわかりやすい固有の名称を入れた方がいいと思います。管理人ならVendorと同じ名称をいれるなぁ。以降は設定した値を(Namespace)と表現します。 | |||
そしたらCreate Plug-in Projectタブに戻って、以下の通り入力していこう | そしたらCreate Plug-in Projectタブに戻って、以下の通り入力していこう | ||
Name:開発するVSTの名称を入れよう英字大文字小文字表記でね。 | |||
Type:音を鳴らす系のVSTならInstrument、音を加工するだけならAudio Effectを選択 | *Name:開発するVSTの名称を入れよう英字大文字小文字表記でね。 | ||
Use VSTGUIチェックボックス。GUIを保持する予定ならチェックを入れておこう。 | *Type:音を鳴らす系のVSTならInstrument、音を加工するだけならAudio Effectを選択 | ||
macOS Deployment Target:デフォルト値でいいんじゃない?例 10.13 | *Use VSTGUIチェックボックス。GUIを保持する予定ならチェックを入れておこう。 | ||
C++ Class Name:開発するVSTの名称でいいと思う。 | *macOS Deployment Target:デフォルト値でいいんじゃない?例 10.13 | ||
BundleID:com.venderid.puluginnameのように全部小文字で設定しよう。venderid=Vendorに設定した値の大文字を使わない小文字版、pluginename=Nameに設定したVSTの名称の小文字版 | *C++ Class Name:開発するVSTの名称でいいと思う。 | ||
Filename Prefix:これもNameと同じ値でNameに設定したVSTの名称でいいと思う。わかりやすくなるからね。 | *BundleID:com.venderid.puluginnameのように全部小文字で設定しよう。venderid=Vendorに設定した値の大文字を使わない小文字版、pluginename=Nameに設定したVSTの名称の小文字版 | ||
OutputDirectory:C:¥Users\(UserID)\source\repos ※これがVisualStudio2022のデフォルト値。好きな場所に作っていいですよ。 | *Filename Prefix:これもNameと同じ値でNameに設定したVSTの名称でいいと思う。わかりやすくなるからね。 | ||
CMakeGenerator:Visual Studio 17 2022 | *OutputDirectory:C:¥Users\(UserID)\source\repos ※これがVisualStudio2022のデフォルト値。好きな場所に作っていいですよ。 | ||
CMakePlatform:x64 | *CMakeGenerator:Visual Studio 17 2022 | ||
*CMakePlatform:x64 | |||
| 62行目: | 68行目: | ||
次にC:¥Users\(UserID)\source\repos\(PluginName)\CMakeList.txtを書き換えよう。太字部分を追記 | |||
| 72行目: | 78行目: | ||
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13 CACHE STRING "") | set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13 CACHE STRING "") | ||
set(vst3sdk_SOURCE_DIR " | set(vst3sdk_SOURCE_DIR "(VST_SDK_Root)/vst3sdk") | ||
if(NOT vst3sdk_SOURCE_DIR) | if(NOT vst3sdk_SOURCE_DIR) | ||
message(FATAL_ERROR "Path to VST3 SDK is empty!") | message(FATAL_ERROR "Path to VST3 SDK is empty!") | ||
endif() | endif() | ||
project( | project((PluginName) | ||
# This is your plug-in version number. Change it here only. | # This is your plug-in version number. Change it here only. | ||
# Version number symbols usable in C++ can be found in | # Version number symbols usable in C++ can be found in | ||
# source/version.h and ${PROJECT_BINARY_DIR}/projectversion.h. | # source/version.h and ${PROJECT_BINARY_DIR}/projectversion.h. | ||
VERSION 1.0.0.0 | VERSION 1.0.0.0 | ||
DESCRIPTION " | DESCRIPTION "(PluginName) VST 3 Plug-in" | ||
) | ) | ||
| 91行目: | 97行目: | ||
<span style="font-weight: bold;"> | |||
# ============================================================================= | # ============================================================================= | ||
# | # (PluginName) Core | ||
# ============================================================================= | # ============================================================================= | ||
add_library( | add_library((PluginName)Core STATIC | ||
source/core/SamplerEngine.h | source/core/SamplerEngine.h | ||
source/core/SamplerEngine.cpp | source/core/SamplerEngine.cpp | ||
) | ) | ||
target_include_directories( | target_include_directories((PluginName)Core | ||
PUBLIC | PUBLIC | ||
${CMAKE_CURRENT_SOURCE_DIR}/source/core | ${CMAKE_CURRENT_SOURCE_DIR}/source/core | ||
) | ) | ||
target_compile_features( | target_compile_features((PluginName)Core | ||
PUBLIC | PUBLIC | ||
cxx_std_17 | cxx_std_17 | ||
| 112行目: | 119行目: | ||
# ============================================================================= | # ============================================================================= | ||
# | # (PluginName) VST3 | ||
# ============================================================================= | # ============================================================================= | ||
</span> | |||
smtg_add_vst3plugin( | smtg_add_vst3plugin((PluginName) | ||
source/version.h | source/version.h | ||
source/ | source/(PluginName)cids.h | ||
source/ | source/(PluginName)processor.h | ||
source/ | source/(PluginName)processor.cpp | ||
source/ | source/(PluginName)controller.h | ||
source/ | source/(PluginName)controller.cpp | ||
source/ | source/(PluginName)entry.cpp | ||
) | ) | ||
#- VSTGUI Wanted ---- | #- VSTGUI Wanted ---- | ||
if(SMTG_ENABLE_VSTGUI_SUPPORT) | if(SMTG_ENABLE_VSTGUI_SUPPORT) | ||
target_sources( | target_sources((PluginName) | ||
PRIVATE | PRIVATE | ||
resource/ | resource/(PluginName)editor.uidesc | ||
) | ) | ||
target_link_libraries( | target_link_libraries((PluginName) | ||
PRIVATE | PRIVATE | ||
vstgui_support | vstgui_support | ||
) | ) | ||
smtg_target_add_plugin_resources( | smtg_target_add_plugin_resources((PluginName) | ||
RESOURCES | RESOURCES | ||
"resource/ | "resource/(PluginName)editor.uidesc" | ||
) | ) | ||
endif(SMTG_ENABLE_VSTGUI_SUPPORT) | endif(SMTG_ENABLE_VSTGUI_SUPPORT) | ||
# ------------------- | # ------------------- | ||
smtg_target_add_plugin_snapshots( | smtg_target_add_plugin_snapshots((PluginName) | ||
RESOURCES | RESOURCES | ||
resource/7A4ED0320F9D5F27BF654E3AACA29E97_snapshot.png | resource/7A4ED0320F9D5F27BF654E3AACA29E97_snapshot.png | ||
| 150行目: | 157行目: | ||
) | ) | ||
target_link_libraries( | target_link_libraries((PluginName) | ||
PRIVATE | PRIVATE | ||
sdk | sdk | ||
(PluginName)Core | |||
) | ) | ||
smtg_target_configure_version_file( | smtg_target_configure_version_file((PluginName)) | ||
if(SMTG_MAC) | if(SMTG_MAC) | ||
smtg_target_set_bundle( | smtg_target_set_bundle((PluginName) | ||
BUNDLE_IDENTIFIER com. | BUNDLE_IDENTIFIER com.(venderid).(pluginname) | ||
COMPANY_NAME " | COMPANY_NAME "(VenderID)" | ||
) | ) | ||
smtg_target_set_debug_executable( | smtg_target_set_debug_executable((PluginName) | ||
"/Applications/VST3PluginTestHost.app" | "/Applications/VST3PluginTestHost.app" | ||
"--pluginfolder;$(BUILT_PRODUCTS_DIR)" | "--pluginfolder;$(BUILT_PRODUCTS_DIR)" | ||
| 172行目: | 179行目: | ||
elseif(SMTG_WIN) | elseif(SMTG_WIN) | ||
target_sources( | target_sources((PluginName) | ||
PRIVATE | PRIVATE | ||
resource/win32resource.rc | resource/win32resource.rc | ||
| 181行目: | 188行目: | ||
set_property( | set_property( | ||
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} | ||
PROPERTY VS_STARTUP_PROJECT | PROPERTY VS_STARTUP_PROJECT (PluginName) | ||
) | ) | ||
smtg_target_set_debug_executable( | smtg_target_set_debug_executable((PluginName) | ||
"$(ProgramW6432)/Steinberg/VST3PluginTestHost/VST3PluginTestHost.exe" | "$(ProgramW6432)/Steinberg/VST3PluginTestHost/VST3PluginTestHost.exe" | ||
"--pluginfolder \"$(OutDir)/\"" | "--pluginfolder \"$(OutDir)/\"" | ||
| 193行目: | 200行目: | ||
endif(SMTG_MAC) | endif(SMTG_MAC) | ||
<span style="font-weight: bold;"> | |||
# ============================================================================= | # ============================================================================= | ||
# | # (PluginName) Standalone | ||
# ============================================================================= | # ============================================================================= | ||
add_executable( | add_executable((PluginName)Standalone WIN32 | ||
source/standalone/StandaloneMain.cpp | source/standalone/StandaloneMain.cpp | ||
) | ) | ||
target_compile_features( | target_compile_features((PluginName)Standalone | ||
PRIVATE | PRIVATE | ||
cxx_std_17 | cxx_std_17 | ||
) | ) | ||
target_link_libraries( | target_link_libraries((PluginName)Standalone | ||
PRIVATE | PRIVATE | ||
(PluginName)Core | |||
) | ) | ||
</span> | |||
そしてsourceファイルを追加しよう | |||
C:¥Users\(UserID)\source\repos\(PluginName)\source\core\SamplerEngine.h | |||
#pragma once | |||
namespace <span style="font-weight: bold;">(VenderID)</span> | |||
{ | |||
class SamplerEngine | |||
{ | |||
public: | |||
SamplerEngine(); | |||
void setSampleRate(double sampleRate); | |||
double getSampleRate() const; | |||
void noteOn(int noteNumber, float velocity); | |||
void noteOff(int noteNumber); | |||
void process(float* left, float* right, int numSamples); | |||
private: | |||
double m_sampleRate = 44100.0; | |||
int m_currentNote = -1; | |||
float m_velocity = 0.0f; | |||
}; | |||
} | |||
C:¥Users\(UserID)\source\repos\(PluginName)\source\core\SamplerEngine.cpp | |||
#include "SamplerEngine.h" | |||
namespace <span style="font-weight: bold;">(VenderID)</span> | |||
{ | |||
SamplerEngine::SamplerEngine() | |||
{ | |||
} | |||
void SamplerEngine::setSampleRate(double sampleRate) | |||
{ | |||
m_sampleRate = sampleRate; | |||
} | |||
double SamplerEngine::getSampleRate() const | |||
{ | |||
return m_sampleRate; | |||
} | |||
void SamplerEngine::noteOn(int noteNumber, float velocity) | |||
{ | |||
m_currentNote = noteNumber; | |||
m_velocity = velocity; | |||
} | |||
void SamplerEngine::noteOff(int noteNumber) | |||
{ | |||
if (m_currentNote == noteNumber) | |||
{ | |||
m_currentNote = -1; | |||
m_velocity = 0.0f; | |||
} | |||
} | |||
void SamplerEngine::process( | |||
float* left, | |||
float* right, | |||
int numSamples) | |||
{ | |||
for (int i = 0; i < numSamples; ++i) | |||
{ | |||
left[i] = 0.0f; | |||
right[i] = 0.0f; | |||
} | |||
} | |||
} | |||
C:¥Users\(UserID)\source\repos\(PluginName)\source\standalone\StandaloneMain.cpp | |||
#include <Windows.h> | |||
#include <cwchar> | |||
#include "SamplerEngine.h" | |||
int WINAPI wWinMain( | |||
HINSTANCE hInstance, | |||
HINSTANCE, | |||
PWSTR, | |||
int) | |||
{ | |||
<span style="font-weight: bold;">(VenderID)</span>::SamplerEngine engine; | |||
engine.setSampleRate(48000.0); | |||
wchar_t message[256]; | |||
swprintf_s( | |||
message, | |||
L"<span style="font-weight: bold;">(Plug-in Name)</span> Standalone\r\n\r\n" | |||
L"SamplerEngine SampleRate = %.0f Hz", | |||
engine.getSampleRate()); | |||
MessageBoxW( | |||
nullptr, | |||
message, | |||
L"<span style="font-weight: bold;">(Plug-in Name)</span>", | |||
MB_OK); | |||
return 0; | |||
} | |||
として、CMakeを動かす。Visual Studioの起動アイコンを右クリックして管理者として実行を選択して起動。コード無しで続行して、メニューの[ツール]-[コマンドライン]-[開発者コマンド プロンプト]を起動して以下のコマンドを実行 | |||
C:\Users\(UserID)><span style="font-weight: bold;">cd C:\Users\(UserID)\source\repos\(Plug-in Name)\build</span> | |||
C:\Users\(UserID)\source\repos\(Plug-in Name)\build><span style="font-weight: bold;">"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -S .. -B . -G "Visual Studio 17 2022" -A x64 -DSMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON=0</span> | |||
これで、C:\Users\(UserID)\source\repos\(Plug-in Name)\buileの(Plug-in Name).slnソリューションを開いてビルドしてみよう。ビルドが成功するとVst3がC:\Program Files\Common Files\VST3が配置されます。 | |||
これでFL Studioのプラグイン管理からVST3が検出されれば、デバッグもできるようになります。 | |||
デバッグするときはFL Studioをデバッグのときに起動して、VST3を実行すればいいです。もしくはスタンドアローンアプリの方でデバッグしてもいいです。プロジェクトを二つつくって、Coreを共有するというソリューションになっていますので、共通処理はCoreの中に書いていけばよいことになります。 | |||
2026年9月18日 (金) 13:35時点における最新版
言語と開発環境へ戻る。
プラグイン開発 概要
VST開発の初歩の記事を書いていましたが、AIが台頭してきた今、もっとわかりやすい実践的なVSTの初歩について書き直すことにしました。VST 過去の初歩がそのときの記事になります。過去の記事では、VSTは作れるものの、スタンドアローン版についても通常は作成しなければならないところが反映されていないので、二重で開発をしなければならない効率の悪い方法を示していました。ChatGPTのチカラも借りて、より正しいVST開発の初歩について、わかった手順を示したいと思います。あとSteinbergから提供されるVST_SDKもだいぶカタチが変わったので、Steinbergが提唱するやり方に沿う形にもなっていると思います。Mac版の開発については触れませんので、Mac版も並行して開発する場合の手順については、別のサイトの記事を参考にして下さい。それでも、ここで開発するWindows版のStandaloneアプリとVSTの並行開発は少なくともやらないといけなくて、macOSとの並行開発のコツは全く別のノウハウになりますので、無駄ではありません。macOSの開発環境も必ず必要ですし、winPCだけでは無理です。macOSだけでも無理なのです。両方が必要です。macOSのコンピューターにwin環境を立ち上げることは可能なのでコンピュータは1台あれば済むということはあるかもしれません。クロスプラットフォーム開発はそれはそれで別のノウハウが必要になります。
クロスプラットフォーム開発はおいておいたとして、StandaloneアプリとVST開発の並行開発環境を構築するやり方をここでは紹介したいと思います。
まずは、VST開発をするにはSteinberg(YAMAHA)からVST_SDKを入手しましょう。2026夏現在は以下のアドレスから入手できます。
https://www.steinberg.net/developers/vstsdk/
上記サイトから、SDK Download VST 3 Audio Plug-Ins SDK (Format: zip, 124.2 MB)となっているリンクからダウンロードしてzipファイルを解凍して、得られるVST_SDKフォルダをC:¥Src¥に置いたとして解説します。C:¥Src¥でなくてもいいです。好きな場所においてください。VST_SDKを置いたフォルダパスを今後(VST_SDK_Root)と表現します。
(VST_SDK_Root)には二つのフォルダがあります。
- (VST_SDK_Root)\VST3_Project_Generator
- これはVisualStudioプロジェクト生成のためのツール
- (VST_SDK_Root)\vst3sdk
- こっちがVST開発に必要なSoftware Development Kitね
(VST_SDK_Root)\VST3_Project_Generator\Windows_x64\VST3_Project_Generator.exe
を起動します。Welcomeのタブでvst3sdkのフォルダとCMakeファイルのありかを設定します。あとからPreferencesタブからでも修正できます。
- vst3sdk:(VST_SDK_Root)\vst3sdk
- CMake:C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe
このように設定しよう。VisualStudio2022以外を使っている人は、その環境に合わせて下さい。
まずPreferencesタブの設定をしよう
- VendorにVSTを開発する組織の名前を入れよう。個人の場合でもなんか決めて入れよう。管理人はアプリ開発の組織にはYoneTechStudioという名称を使っています。
- E-Mailには公開してもいいメールアドレスを使おう。
- URLには作ったVSTの情報を提供するURLを記述しよう。SNSの記事のアドレスとかでもいいよね。そこで延々とリプライだけで情報を伝えるならね。
- C++Namespaceもわかりやすい固有の名称を入れた方がいいと思います。管理人ならVendorと同じ名称をいれるなぁ。以降は設定した値を(Namespace)と表現します。
そしたらCreate Plug-in Projectタブに戻って、以下の通り入力していこう
- Name:開発するVSTの名称を入れよう英字大文字小文字表記でね。
- Type:音を鳴らす系のVSTならInstrument、音を加工するだけならAudio Effectを選択
- Use VSTGUIチェックボックス。GUIを保持する予定ならチェックを入れておこう。
- macOS Deployment Target:デフォルト値でいいんじゃない?例 10.13
- C++ Class Name:開発するVSTの名称でいいと思う。
- BundleID:com.venderid.puluginnameのように全部小文字で設定しよう。venderid=Vendorに設定した値の大文字を使わない小文字版、pluginename=Nameに設定したVSTの名称の小文字版
- Filename Prefix:これもNameと同じ値でNameに設定したVSTの名称でいいと思う。わかりやすくなるからね。
- OutputDirectory:C:¥Users\(UserID)\source\repos ※これがVisualStudio2022のデフォルト値。好きな場所に作っていいですよ。
- CMakeGenerator:Visual Studio 17 2022
- CMakePlatform:x64
これでCreateボタンを押すとソリューションが生成されます。
したらば、VST3開発に必要な設定をしよう。
WindowsStartMenu→設定→システム→詳細設定→開発者モードをOnにしよう。OnにしたときにメッセージでるけどOKでいいよ。VST3のシンボリックリンクが使えるようになる。
次にC:¥Users\(UserID)\source\repos\(PluginName)\CMakeList.txtを書き換えよう。太字部分を追記
cmake_minimum_required(VERSION 3.14.0)
option(SMTG_ENABLE_VST3_PLUGIN_EXAMPLES "Enable VST 3 Plug-in Examples" OFF)
option(SMTG_ENABLE_VST3_HOSTING_EXAMPLES "Enable VST 3 Hosting Examples" OFF)
set(CMAKE_OSX_DEPLOYMENT_TARGET 10.13 CACHE STRING "")
set(vst3sdk_SOURCE_DIR "(VST_SDK_Root)/vst3sdk")
if(NOT vst3sdk_SOURCE_DIR)
message(FATAL_ERROR "Path to VST3 SDK is empty!")
endif()
project((PluginName)
# This is your plug-in version number. Change it here only.
# Version number symbols usable in C++ can be found in
# source/version.h and ${PROJECT_BINARY_DIR}/projectversion.h.
VERSION 1.0.0.0
DESCRIPTION "(PluginName) VST 3 Plug-in"
)
set(SMTG_VSTGUI_ROOT "${vst3sdk_SOURCE_DIR}")
add_subdirectory(${vst3sdk_SOURCE_DIR} ${PROJECT_BINARY_DIR}/vst3sdk)
smtg_enable_vst3_sdk()
# =============================================================================
# (PluginName) Core
# =============================================================================
add_library((PluginName)Core STATIC
source/core/SamplerEngine.h
source/core/SamplerEngine.cpp
)
target_include_directories((PluginName)Core
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/source/core
)
target_compile_features((PluginName)Core
PUBLIC
cxx_std_17
)
# =============================================================================
# (PluginName) VST3
# =============================================================================
smtg_add_vst3plugin((PluginName)
source/version.h
source/(PluginName)cids.h
source/(PluginName)processor.h
source/(PluginName)processor.cpp
source/(PluginName)controller.h
source/(PluginName)controller.cpp
source/(PluginName)entry.cpp
)
#- VSTGUI Wanted ----
if(SMTG_ENABLE_VSTGUI_SUPPORT)
target_sources((PluginName)
PRIVATE
resource/(PluginName)editor.uidesc
)
target_link_libraries((PluginName)
PRIVATE
vstgui_support
)
smtg_target_add_plugin_resources((PluginName)
RESOURCES
"resource/(PluginName)editor.uidesc"
)
endif(SMTG_ENABLE_VSTGUI_SUPPORT)
# -------------------
smtg_target_add_plugin_snapshots((PluginName)
RESOURCES
resource/7A4ED0320F9D5F27BF654E3AACA29E97_snapshot.png
resource/7A4ED0320F9D5F27BF654E3AACA29E97_snapshot_2.0x.png
)
target_link_libraries((PluginName)
PRIVATE
sdk
(PluginName)Core
)
smtg_target_configure_version_file((PluginName))
if(SMTG_MAC)
smtg_target_set_bundle((PluginName)
BUNDLE_IDENTIFIER com.(venderid).(pluginname)
COMPANY_NAME "(VenderID)"
)
smtg_target_set_debug_executable((PluginName)
"/Applications/VST3PluginTestHost.app"
"--pluginfolder;$(BUILT_PRODUCTS_DIR)"
)
elseif(SMTG_WIN)
target_sources((PluginName)
PRIVATE
resource/win32resource.rc
)
if(MSVC)
set_property(
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
PROPERTY VS_STARTUP_PROJECT (PluginName)
)
smtg_target_set_debug_executable((PluginName)
"$(ProgramW6432)/Steinberg/VST3PluginTestHost/VST3PluginTestHost.exe"
"--pluginfolder \"$(OutDir)/\""
)
endif()
endif(SMTG_MAC)
# =============================================================================
# (PluginName) Standalone
# =============================================================================
add_executable((PluginName)Standalone WIN32
source/standalone/StandaloneMain.cpp
)
target_compile_features((PluginName)Standalone
PRIVATE
cxx_std_17
)
target_link_libraries((PluginName)Standalone
PRIVATE
(PluginName)Core
)
そしてsourceファイルを追加しよう
C:¥Users\(UserID)\source\repos\(PluginName)\source\core\SamplerEngine.h
#pragma once
namespace (VenderID)
{
class SamplerEngine
{
public:
SamplerEngine();
void setSampleRate(double sampleRate);
double getSampleRate() const;
void noteOn(int noteNumber, float velocity);
void noteOff(int noteNumber);
void process(float* left, float* right, int numSamples);
private:
double m_sampleRate = 44100.0;
int m_currentNote = -1;
float m_velocity = 0.0f;
};
}
C:¥Users\(UserID)\source\repos\(PluginName)\source\core\SamplerEngine.cpp
#include "SamplerEngine.h"
namespace (VenderID)
{
SamplerEngine::SamplerEngine()
{
}
void SamplerEngine::setSampleRate(double sampleRate)
{
m_sampleRate = sampleRate;
}
double SamplerEngine::getSampleRate() const
{
return m_sampleRate;
}
void SamplerEngine::noteOn(int noteNumber, float velocity)
{
m_currentNote = noteNumber;
m_velocity = velocity;
}
void SamplerEngine::noteOff(int noteNumber)
{
if (m_currentNote == noteNumber)
{
m_currentNote = -1;
m_velocity = 0.0f;
}
}
void SamplerEngine::process(
float* left,
float* right,
int numSamples)
{
for (int i = 0; i < numSamples; ++i)
{
left[i] = 0.0f;
right[i] = 0.0f;
}
}
}
C:¥Users\(UserID)\source\repos\(PluginName)\source\standalone\StandaloneMain.cpp
#include <Windows.h>
#include <cwchar>
#include "SamplerEngine.h"
int WINAPI wWinMain(
HINSTANCE hInstance,
HINSTANCE,
PWSTR,
int)
{
(VenderID)::SamplerEngine engine;
engine.setSampleRate(48000.0);
wchar_t message[256];
swprintf_s(
message,
L"(Plug-in Name) Standalone\r\n\r\n"
L"SamplerEngine SampleRate = %.0f Hz",
engine.getSampleRate());
MessageBoxW(
nullptr,
message,
L"(Plug-in Name)",
MB_OK);
return 0;
}
として、CMakeを動かす。Visual Studioの起動アイコンを右クリックして管理者として実行を選択して起動。コード無しで続行して、メニューの[ツール]-[コマンドライン]-[開発者コマンド プロンプト]を起動して以下のコマンドを実行
C:\Users\(UserID)>cd C:\Users\(UserID)\source\repos\(Plug-in Name)\build C:\Users\(UserID)\source\repos\(Plug-in Name)\build>"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -S .. -B . -G "Visual Studio 17 2022" -A x64 -DSMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON=0
これで、C:\Users\(UserID)\source\repos\(Plug-in Name)\buileの(Plug-in Name).slnソリューションを開いてビルドしてみよう。ビルドが成功するとVst3がC:\Program Files\Common Files\VST3が配置されます。
これでFL Studioのプラグイン管理からVST3が検出されれば、デバッグもできるようになります。
デバッグするときはFL Studioをデバッグのときに起動して、VST3を実行すればいいです。もしくはスタンドアローンアプリの方でデバッグしてもいいです。プロジェクトを二つつくって、Coreを共有するというソリューションになっていますので、共通処理はCoreの中に書いていけばよいことになります。
VSTeプログラミング初歩
- VST 過去の初歩
- VST サンプルファイルのビルド方法
- VSTe 何も音響処理をしない入力をそのまま出力する処理
- VSTe VST3PluginHostTestで動作確認
- VSTe FL STUDIOで動作確認
- VSTe VSTGUI inline UI Editor *.uidescファイル作成配置方法
- VSTe 操作するパラメータを管理するコードを覚える
- VSTe VSTGUI inline UI Editor 基本的な使用方法
- VSTe VSTGUI inline UI Editor を使わないで、Viewに出力音声波形を描画する方法
VSTライブラリ
■リファレンス熟読
言語と開発環境へ戻る。