VST 2.4サポート終了について
ここではVST 2.4の開発について記載させていただいておりますが、公式サポートが終了しており内容を更新しておりません。
これから開発を始める方は、新しいVSTバージョンで開発することをお勧めさせていただきます。
新しいVSTバージョンの開発情報はこちら → はじめてのVSTプラグインの作り
プリセットのあるエフェクターを作成する
パラメーターのあるエフェクターを作成するでは簡単なエフェクターパラメーター操作機能を追加いたしました。
今回はさらにプリセット機能を追加してみます。
作成するVSTプラグインの概要は下記のとおりです。
- ホストアプリケーション上でエフェクターとして動作する
- 入力、出力共にステレオ(2チャンネル)
- 入力された音声にトレモロをかけて出力する
- ホストアプリケーションからトレモロのSpeedとDepthがコントロールできる
- 3つのプリセットを持ち、ホストアプリケーションから切り替えることができる
- サンプリング周波数は44,100Hzのみ対応
なお、前回作成したVSTプラグインはここを参照してください。 → パラメーターのあるエフェクターを作成する
また、プロジェクトの作成方法についてはここを参照してください。 → Visual Studioのプロジェクト作成する
プリセット機能を追加するには
まず、VST基本クラスにsetProgram関数とgetProgramName関数を継承元クラス(AudioEffectX)からオーバーライドして定義します。
次に、継承元コンストラクタ(AudioEffectX)の第2引数 numProgramsにプリセットの数を設定します。
これで、ホストアプリケーションからエフェクターのプリセットが切り替えられるようになります。
なお、パラメーターと同様に各プリセットには必ず0番からの通し番号を決めておく必要があります。
ソースコードの説明
ここで作成するVSTプラグインの全ソースコードは下記のリンク先に記載しています。
ここでは下記のソースコードをもとに説明いたします。
ソースファイル | 概要 |
---|---|
MyMiniTremolo3VST.cpp | VSTプラグインのメインとなるソースファイル。 |
ソースコード全体はここに記載しています。 → ソースコード全体
プリセット数の変更
前項からの変更点はVSTプラグインのプリセット数(MY_VST_PRESET_NUM)のみとなります。(10行目、赤色部分)
今回は「Default」「Slow Tremolo」「Fast Tremolo」の3つのプリセットを考えているため、3としております。
なお、プリセットの番号は下記の通りとしています。
番号 | プリセット名 | |
---|---|---|
0 | Default | トレモロをかけない状態 |
1 | Slow Tremolo | ゆっくりとしたトレモロ |
2 | Fast Tremolo | 早いトレモロ |
VSTプラグインクラスの定義
次にVSTプラグインクラスの定義を行います。今回は前項のメンバー関数に加えてプリセットに関する関数を定義しています。(赤色部分)
それぞれの関数についての概要は下記の通りです。
- setProgram関数
概要 | ホストアプリケーションが、VSTプラグインのプリセットを設定するための関数。 | ||
---|---|---|---|
戻り値 | 型 | 概要 | |
戻り値はありません | |||
引数 | 型 | 変数名 | 概要 |
program | VstInt32 | 設定するプリセットの番号。 |
- getProgramName関数
概要 | ホストアプリケーションが、VSTプラグインのプリセット名を取得するための関数。 | ||
---|---|---|---|
戻り値 | 型 | 概要 | |
戻り値はありません | |||
引数 | 型 | 変数名 | 概要 |
program | VstInt32 | 名前を取得するプリセットの番号。 | |
name | char* | プリセット名を保存する文字列配列。 配列サイズは24Byteで、NULL文字で終端させる必要がある。 |
※VstInt32型はVST SDKで定義されている32ビットの整数型です。(intやlongをtypedefで定義しなおしているだけです。)
VSTプラグインの初期化と音声処理
続いて、VSTプラグインの初期化と音声処理(コンストラクタとprocessReplacing関数)を行いますが、
これらの関数についても前項同様、変更点はありません。
説明については「簡単なエフェクターを作成してみる」の「VSTプラグインの初期化」と「入力信号への正弦波の掛け合わせ」ををご参照ください。
setProgram関数
setProgram関数では、VSTプラグインのプリセットが設定された際の処理を記載します。
処理としては単純で、引数のprogramの値に応じて各パラメーター変数の値を設定した後、継承元クラス(AudioEffectXクラス)の変数curProgramに引数のprogramを代入します。
変数curProgramは「現在のプリセットが何番か?」を示すために使用される変数です。
setProgram関数では必ず変数curProgramに引数のprogramを代入してください。
getProgramName関数
getProgramName関数では、VSTプラグインの現在指定されているプリセット名をホストアプリケーションに返すための処理を記載します。
こちらも処理としては単純で、継承元クラスの変数curProgramの値に応じて、対応する番号のプリセット名を引数のnameに格納します。
vst_strncpy関数の詳細は前項のgetParameterName関数の項目をご確認ください。
また、kVstMaxProgNameLenはVST SDK 2.4のaeffect.hで定義されている定数でkVstMaxProgNameLen = 24となります。
コンパイルとビルド
上記の追加を行った後、コンパイルとビルドを行えば、プリセット機能のあるトレモロVSTプラグイン完成するはずです。
VSTプラグインを作成してみるで説明したとおり、いくつかのwarningとエラーが発生しますが、プロジェクトのReleaseフォルダ配下に「~~.dll」が作成されていれば特に問題はありません。
最後に
いかがでしたでしょうか?
今回は前項のトレモロにプリセット機能を実装しました。
使う側にとってプリセット機能は非常に便利だと思います。プリセット機能自体の実装は非常に簡単ですので、VSTプラグインを公開する場合などはぜひ実装してみてください。