VST3プラグインの作成方法などを公開しています。ここの説明で使用しているVST SDKのバージョンは古いものもありますが、おそらく最新のバージョンでも対応しております。
ここでは開発環境をWindowsとしていますが、VST SDK自体は複数のプラットフォームに対応していますので、本サイトの実装方法やTIPSなどは利用できると思います。
なお、ほぼ独学ですので間違いがあるかもしれませんのでご了承ください。(ご指摘いただけると助かります。)
はじめてのVST3プラグイン作り
VST3プラグインを作成するための手順を記載しています。
VSTとは? | VSTとその開発についての概要を説明しています。 |
VST3開発環境の準備 | VST 3.7における開発環境の準備と基本ライブラリの作成を記載しています。 |
(補足)古いVST SDKでのVST3開発環境の準備 | VST 3.6における開発環境の準備と基本ライブラリの作成を記載しています。 |
VST3プロジェクトの作成 | VST 3.6開発用のVisual Studioプロジェクト作成方法を記載しています。 |
(補足)サンプルソースファイルのビルド方法 | 各説明ページのサンプルソースコードをコンパイル・ビルドしてVST3プラグインを作成する方法を記載しています。 |
はじめてのVST3 | さっそくVST3プラグインを作成する方法を記載しています。 |
VST3のバスについて | VST3でのバスという概念について記載しています。 |
パラメーター実装方法1 | はじめてのVST3プラグインは音声処理を行えるだけでした。 実際のVST3プラグインでは、何らかの操作・コントロールをすることができます。今回は操作をするための基本となるパラメーターを実装しています。 |
パラメーター実装方法2 | パラメーター実装方法1で実装したパラメーターは「0.0~1.0」しか表示できないので、 それ以外(例えば「10~100」や文字列のリストなど)を表示するパラメーターを実装する方法を記載しています。 |
パラメーター実装方法3 | パラメータークラスを継承して自作のパラメータークラスを作成します。 「フィルタのカットオフ周波数」などで利用するスライダーの位置と出力の関係が線形でないパラメーターを実装する方法を記載しています。 |
パラメーターの保存方法 | パラメーター実装方法1~3で追加したパラメーターはホスト(DAWなど)を終了すると初期化されてしまいます。 終了時に保存し、次回起動時にデータが読み込まれるようパラメーターを保存・読込する方法を記載しています。 |
MIDIメッセージの受取1 | MIDIのNote On、Note Offメッセージを受け取る方法の記載しています。簡単なモノフォニックシンセサイザーを作成しています。 |
MIDIメッセージの受取2 | MIDIのControl Change、Pitch Bendなどのメッセージを受け取る方法の記載しています。 |
ツールを使ったVST GUIの作成方法 | Inline UI Editor for VST3というツールを使ってVST GUIを作成する方法を記載しています。 |
最小構成のVST GUIコード | 最小構成のVST GUIを作成する方法を記載しています。 |
VST GUIコードでのつまみ(ノブ)などの実装方法 | 最小構成のVST GUIではウィンドウが開くだけで何も操作できませんでした。 ここではつまみ(ノブ)やスライダーを追加し、パラメーターを操作する方法を記載しています。 |
VST3ホストアプリケーション作り
VST3ホストアプリケーション(VST3プラグインを読み込めるアプリ。以下VST3ホスト)を作成するための手順を記載しています。
「はじめてのVST3プラグイン作り」が一通り理解いただいていることを前提としております。 ※リンクがないものは記載予定のものです。
VST3ホストの開発環境と設定 | VST3ホストを作成するために必要な内容とVisual Studioプロジェクトの設定を記載しています。 |
VST3プラグインの読み込みと情報表示 | 簡単なVST3ホストを作成します。VST3プラグインファイルを読み込み、VST3プラグインの情報を取得・表示します。 |
音声処理クラスの作成と初期化 | 音声処理クラスのインスタンス作成と初期化について説明します。 |
音声処理クラスでの音声処理準備 | 作成した音声処理クラスで音声処理を実施するための準備(入出力設定やサンプルレート設定など)について説明します。 |
音声処理クラスでの音声処理 | 準備が完了した音声処理クラスで実際に音声処理を行う方法を説明します。 |
パラメーター操作クラスの作成と初期化 | パラメーター操作クラスのインスタンス作成と初期化について説明します。 |
パラメーター操作クラスからのパラメーター情報取得 | 作成したパラメーター操作クラスからパラメーターの情報を取得する方法を説明します。 |
パラメーター操作クラスから音声処理クラスへのパラメーター変更の通知 | パラメーター操作クラスから音声処理クラスにパラメーター変更情報を通知する方法を説明します。 |
パラメーター操作クラスのUIの表示 | パラメーター操作クラスのUIを表示する方法を説明します。 |
音声処理クラス・パラメーター操作クラスの設定保存 | 音声処理クラス・パラメーター操作クラスの設定(パラメーター情報など)を保存する方法を説明します。 |
内容未定 | 内容未定 |
上記以外も更新予定はありますが、内容は未定となっております。
VST開発TIPS、一覧表、その他
VST3プラグインの作成に関するTIPSや定義されている変数の一覧などをまとめたものになります。 ※リンクがないものは記載予定のものです。
VST開発TIPS
音声処理クラス関係
タイトル | 概要 | |
---|---|---|
音声処理クラス関連 | バイパス処理について | バイパス処理についてです |
サイレンス処理について | サイレンス処理についてです | |
テンポの取得 | ホストアプリ(DAWなど)からテンポを取得する方法です | |
再生状態の取得 | ホストアプリ(DAWなど)から再生状態かどうかの情報を取得する方法です | |
再生位置の取得 | ホストアプリ(DAWなど)から再生位置を取得する方法です | |
パラメーター情報のフィードバック | コントローラ操作クラスへパラメーター情報をフィードバックする方法です。 | |
MIDIノートオン・オフの出力 | MIDIノートオン・オフメッセージを出力する方法です。 | |
ポリフォニックシンセサイザー サンプルコード | ポリフォニックシンセサイザーのサンプルコードです。解説はありません。 |
パラメーター操作クラス関係
タイトル | 概要 | |
---|---|---|
パラメーター操作クラス GUIクラス関連 |
On/Offボタンの実装 | VST GUIでクリックするごとにオンとオフを切り替えるボタンを実装する方法です |
キックボタンの実装 | VST GUIでクリックした瞬間だけオンになるボタンを実装する方法です | つまみ(ノブ)の実装 | VST GUIで値を操作できるつまみ(ノブ)を実装する方法です | アニメーションつまみ(ノブ)の実装 | VST GUIで値によって画像が変わるつまみ(ノブ)を実装する方法です | 縦型スライダーの実装 | VST GUIで値が操作できる縦型のスライダーを実装する方法です | 縦型スライダーのスタイル変更 | 縦型スライダーのハンドル操作を逆の方向にする方法です。 (ハンドルが上にある時に0.0、下にある時に1.0) |
横型スライダーの実装 | VST GUIで値が操作できる横型のスライダーを実装する方法です | 横型スライダーのスタイル変更 | 横型スライダーのハンドル操作を逆の方向にする方法です。 (ハンドルが左にある時に0.0、右にある時に1.0) |
縦型スイッチの実装 | VST GUIでクリックごとに値が切り替わる縦型スイッチを実装する方法です | 横型スイッチの実装 | VST GUIでクリックごとに値が切り替わる横型スイッチを実装する方法です | テキストラベルの実装 | VST GUIで文字列を表示するラベルを実装する方法です | テキストエディットの実装 | VST GUIで文字列を入力するための入力欄を実装する方法です | 入力された文字列を数値にする方法 | テキストエディットに入力された文字列を数字にしてパラメーターに反映させる方法です | コンボボックスの実装 | VST GUIでリストから文字列を選択するコンボボックスを実装する方法です | チェックボックスの実装 | VST GUIでチェックボックスを実装する方法です | 複数コントロールの同期 | VST GUIで一つのコントロールを動かした時、別のコントロールも動くようにする方法です | コントロールの定期更新 | VST GUIでタイマーを使い定期的にコントロールの描画を行う方法です | UIの値を数字で表示 | VST GUIでノブ(つまみ)やスライダーなどのコントロールの値を表示する方法です | 任意のフォントの利用 | VST GUIでテキストラベルやコンボボックスなどで任意のフォントを利用する方法です | 図形・波形描画ビューの実装 | VST GUIで基本的な図形や波形にを描画するビューを実装する方法です | コンテキストメニューの実装 | VST GUIで右クリックした際にコンテキストメニュー(ポップアップメニュー)が開くよう実装する方法です | 「ファイルを開く」ダイアログの実装 | VST GUIで「ファイルを開く」ダイアログを表示させる方法とファイルパスを取得する方法です。 | ドラッグアンドドロップの対応 | VST GUIでドラッグアンドドロップ操作に対応する方法です。 |
VSTの定義一覧・その他
タイトル | 概要 | |
---|---|---|
Tips | VSTプラグインのカテゴリ一覧 | 生成関数で指定できるVSTプラグインのカテゴリ一覧です |
MIDIコントロールチェンジの定義一覧 | VST SDK3.6で定義されたMIDIコントロールチェンジの一覧です | |
VST GUI 定義済みフォント一覧 | VST GUIのテキストラベルなどで使用する定義済みフォントの一覧です | |
VST GUI 定義済みカラー一覧 | VST GUIで文字や背景色として使う色の定義一覧です | |
その他 | VST内部での文字コードについて | VST SDKの内部で使われている文字コードです。UTF-8とUTF-16が混在しており注意が必要です。 | VST SDKの各バージョンのリンク | VST SDKの各バージョンへのリンクです。いつ削除されるかはわかりません。 | VSTプラグインのファイル・フォルダ構成 | VSTプラグインの.vst3ファイルをインストールする場所とフォルダ構成についてです。 | Visual Studio 2013以前を使用する場合 | 開発環境にVisual Studio 2013以前を使用する場合の注意点です。 試したわけではありません。結果をご報告をいただけるとありがたいです。 |
エフェクターの実装例
デジタルフィルターとリングバッファ
各エフェクターを作成するためによく利用する部品(デジタルフィルターやリングバッファなど)を下記にまとめております。
タイトル | 概要 |
---|---|
簡単なデジタルフィルタの実装 | デジタルフィルターの実装例です。ローパスフィルタやノッチなどがあります。 ソースコードはこちらです。 → 簡単なデジタルフィルタのサンプルコード |
リングバッファについて | ディレイやコーラスなどで必要なリングバッファの実装例です。 |
エフェクターの実装例一覧
エフェクターの簡単な実装例を記載しています。
あくまで実装例ですので音質的には実用に至らないものもあります。いい音質のものがほしい場合は、ご自身で試行錯誤いただくようお願いします。
カテゴリ | エフェクター | 備考 |
---|---|---|
モジュレーション系 | コーラス・フランジャー | |
フェイザー | ||
トレモロ | ||
パンナー | ||
ピッチシフター | ||
歪み系 | ファズ | |
オーバードライブ・ディストーション | ||
フィルター系 | オートワウ | テンポに合わせてワウがかかるエフェクターです。 |
タッチワウ | 音圧に応じてワウがかかるエフェクターです。 | |
イコライザー系 | 2バンドイコライザー | |
3バンドイコライザー | ||
グラフィックイコライザー | ||
パラメトリックイコライザー | ||
空間系 | ディレイ | |
リバーブ | ||
ダイナミクス系 | コンプレッサー |
※カテゴリやエフェクター名は一般的な名称と異なる場合があります。
メディアファイルの取り扱い
RIFFファイルについて
VSTなどでよく使われるwavファイルやMIDIファイル、SoundFontファイルなどはRIFFファイルフォーマットが基となっています。
ここではRIFFファイルフォーマットの簡単な説明についても下記にまとめています。
タイトル | 概要 | |
---|---|---|
RIFFファイルについて | RIFFファイルの概要と読み込み | RIFFファイルのフォーマットの説明です。 |
WAVファイルの読み込みについて
ここではwavファイルWAVファイルのフォーマットと読込を行う関数のサンプルコードを簡単に説明します。
タイトル | 概要 | |
---|---|---|
WAVファイルの読み込みについて | Wavファイルのフォーマットと読込 | WAVファイルのフォーマットと読み込みを行う関数のサンプルコードの簡単な説明をしています。 |
スタンダードMIDIファイルの読み込みについて
ここではスタンダードMIDIファイルスタンダードMIDIファイルのフォーマットと読込を行うクラスのサンプルコードを簡単に説明します。
タイトル | 概要 | |
---|---|---|
スタンダードMIDIファイルの読み込みについて | スタンダードMIDIファイルのフォーマットと読込(一部作成中) | スタンダードMIDIファイルのフォーマットと読み込みを行うクラスのサンプルコードの簡単な説明をしています。 |
SoundFontの読み込みと組み立て
ここでは複数回にわたって、SoundFontファイル(.sf2ファイル)を読み込んでシンセサイザーなどに使えるようにパラメータを組み立てる方法を説明しています。
「.sf3」「.sfArk」「.sfpack」「sfz」などのファイルもありますが、別物であったりそれぞれの開発者が独自に拡張を加えたものですのでここでは取り扱いません
なお、あまり利用していない機能と思われる部分やエラー処理などは省略しております。
また、説明の都合上、正確な用語でない部分やSoundFontの規格・仕様に準拠していない部分がありますので詳細は仕様書をご確認ください。
タイトル | 概要 | |
---|---|---|
SoundFontの概要と前提知識について | SoundFontの概要や前提となる知識、仕様書・参考資料などを説明しています。 | |
SoundFontを読み込むサンプルコード | SoundFontを読み込むサンプルコードです。 | |
SoundFontファイルについて | SoundFontのフォーマット | SoundFontファイルのフォーマットと各チャンク概要の説明です。 |
音色とジェネレータについて | SoundFontの音色情報を組み立てる上で重要なジェネレータについての説明です。 | |
音色と音色情報(Hydra)チャンク | 音色情報(Hydra)の組み立てにあたって、SoundFontの音色構成などを説明します。 | |
想定ウェーブテーブル音源 | SoundFontで想定されているウェーブテーブル音源の構成を説明します。 |
その他
質問は各コンテンツページや掲示板、Twitterでいただければとおもいます。
また、「こんな機能をVST3プラグインにどう実装すればいいか?」や「このエフェクターの仕組みが知りたい」という要望なども掲示板やTwitterでいただければと思います。
■掲示板
■Twitterアカウント:@vstcpp URL:https://twitter.com/vstcpp