VST3プラグイン開発10 – MIDIメッセージの受取2

VST3プラグインでMIDIメッセージを受信する方法2

前回はMIDIのノートオン/ノートオフメッセージを受信する方法を記載いたしました。
今回はMIDIのコントロールチェンジやピッチベンドを受信する方法を記載したいと思います。

今回作成するプラグインは「VST3プラグインのパラメーター実装方法」で作成したプラグインをベースにします。
理由はやはり余計なコードが少ないためです。必要に応じて他のページの内容と組み合わせてご利用ください。

  • パラメーターは1つ(ボリュームコントロール)
  • MIDIコントロールチェンジ(No.7とNo.11)により上記パラメーター(ボリューム)をコントロールする
  • 入力のボリュームをパラメーターにより調整して出力する
  • 入力バス、出力バスは1つで、共にステレオ(2ch)

今回ベースとなるプラグインの説明はこちらに記載しています。

このVST3プラグインのサンプルソースファイルはこちらからダウンロードできます→vst3dev_20210403
ZIPファイルの中の「vst3dev07_MIDIメッセージを受信する方法2」フォルダが今回のサンプルソースファイルになります。

コンパイル・ビルドの方法は簡単にこちらでご説明しております。ご参考までに。→サンプルソースファイルのビルド方法

入力イベントバスの追加

まずは、MIDIのコントロールチェンジを受け取るために、音声処理クラスのinitialize()関数でaddEventInput()関数を呼び出して、入力イベントバスを追加します。
addEventInput()関数をについては前回の内容をご確認ください。

【processor.cpp】

MIDIコントロールチェンジ受信方法

MIDIのコントロールチェンジやピッチベンド情報を受け取る方法は非常に単純で、パラメーター操作クラスのパラメーターとMIDIコントロールチェンジ/ピッチベンドを関連付けるだけです。

パラメーターとMIDIコントロールチェンジ/ピッチベンドを関連付けるためには、IMidiMappingクラスを利用します。

具体的にはパラメーター操作クラスでIMidiMappingクラスも継承し、getMidiControllerAssignment()関数をオーバーライドします。
IMidiMappingクラスの利用には「ivstmidicontrollers.h」をインクルードする必要があります。

【controller.h】

注意として、VST SDK 3.6の基本インターフェイスのクラスを使用した場合は、OBJ_METHODS()マクロを使用して継承元クラスの関数や定義を置き換える必要があります。
VST SDK 3.6の基本インターフェイスは頭文字が「 I 」で始まるクラスになります。
IMidiMappingクラス以外に継承した場合、継承した分だけDEF_INTERFACE()マクロを呼び出します。
詳細不明なため、説明は省略いたします。

MIDIコントロールチェンジの関連付け

実際にMIDIコントロールチェンジとパラメーターを関連付るのはgetMidiControllerAssignment()関数で行います。
getMidiControllerAssignment()関数ではホスト(DAWなど)からイベントバス・MIDIチャンネル・コントロールチェンジ番号の情報が渡されるので、対応するパラメーターのタグ(ID)をホスト(DAWなど)に渡すだけです。

【controller.cpp】

getMidiControllerAssignment()関数の内容は下記となります。

  • getMidiControllerAssignment()関数
  • 概要 MIDIコントロールチェンジ/ピッチベンドとパラメーターを関連付けます。
    ホスト(DAWなど)がVSTプラグインのパラメーターと関連があるかどうかを確認するため、MIDIコントロールチェンジ/ピッチベンドを受信した際に呼び出されます。
    戻り値 概要
    tresult 関連付けに成功したらkResultTrue、失敗したらkResultFalseを返す
    引数 変数名 概要
    int32 busIndex MIDIコントロールチェンジが入力されるイベントバスの番号
    int16 channel MIDIコントロールチェンジのチャンネル番号
    CtrlNumber midiControllerNumber MIDIコントロールチェンジの番号(CtrlNumberはint16型を再定義したもの)
    ParamID& id MIDIコントロールチェンジに関連付けるパラメータータグ(ID)を格納する変数

kCtrlExpressionやkCtrlVolumeはVST SDK 3.6で定義されたMIDIコントロールチェンジ番号です。数字で記載しても問題ありません。
定義されているMIDIコントロールチェンジ番号の詳細は割愛しますが、よく利用される定義については下記となります。

よく使いそうなMIDIコントロールチェンジ

CC No VST SDKの定義 名称
1 kCtrlModWheel モジュレーションホイール
7 kCtrlVolume チャンネルボリューム
10 kCtrlPan パン
11 kCtrlExpression エクスプレッション
64 kCtrlSustainOnOff サステインペダル(ダンパーペダル)
71 kCtrlFilterCutoff フィルターカットオフ
72 kCtrlReleaseTime リリースタイム
73 kCtrlAttackTime アタックタイム
74 kCtrlFilterResonance フィルターレゾナンス
75 kCtrlDecayTime ディケイタイム

VST SDK 3.6で定義されたMIDIコントロールチェンジの一覧についてはこちらに記載しております。

ピッチベンドの関連付け

MIDIのピッチベンドとパラメーターを関連付るのにもgetMidiControllerAssignment()関数を利用します。
MIDIコントロールチェンジは127までですが、midiControllerNumberに128と129がそれぞれ下記のように定義されております。

CC No VST SDKの定義 名称
128 kAfterTouch アフタータッチ
129 kPitchBend ピッチベンド

【例】

最後に

以上でMIDIのコントロールチェンジやピッチベンド情報を受け取ることができます。

次回はVSTプラグインの見た目をよくし、使いやすくするためにGUIの実装方法を説明いたします。

 次回→ツールを使ったVST GUIの作成方法

このVST3プラグインのサンプルソースファイルはこちらからダウンロードできます → vst3dev_20210403.zip
コンパイル・ビルドの方法は簡単にこちらでご説明しております。ご参考までに。→サンプルソースファイルのビルド方法

VST3プラグイン作りの情報はこちらにもございます → はじめてのVST3プラグイン作り

ご指摘やご質問などがございましたら、コメント欄か掲示板Twitterでご連絡いただければと思います。

掲示板
■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp


コメントを残す