VST3.6開発10 – MIDIメッセージの受取2

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

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

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

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

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

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

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の実装方法を説明いたします。

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

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

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

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


コメントを残す