C++でVST作りコンテンツへスキップC++でVST作りVSTプログラミングに関する情報です。MIDIメッセージの受取2VST3プラグインでMIDIメッセージを受信する方法2前回はMIDIのノートオン/ノートオフメッセージを受信する方法を記載いたしました。今回はMIDIのコントロールチェンジやピッチベンドを受信する方法を記載したいと思います。今回作成するプラグインは「VST3プラグインのパラメーター実装方法」で作成したプラグインをベースにします。理由はやはり余計なコードが少ないためです。必要に応じて他のページの内容と組み合わせてご利用ください。パラメーターは1つ(ボリュームコントロール)MIDIコントロールチェンジ(No.7とNo.11)により上記パラメーター(ボリューム)をコントロールする入力のボリュームをパラメーターにより調整して出力する入力バス、出力バスは1つで、共にステレオ(2ch)今回ベースとなるプラグインの説明はこちらに記載しています。今回作成したVST3のソースファイルはこちらになります。vst3dev07_20190506コンパイル・ビルドの方法は簡単にこちらでご説明しております。→サンプルソースファイルのビルド方法MIDIコントロールチェンジ受信方法MIDIのコントロールチェンジやピッチベンド情報を受け取る方法は非常に単純で、パラメータ操作クラスのパラメータとMIDIコントロールチェンジ/ピッチベンドを関連付けるだけです。パラメータとMIDIコントロールチェンジ/ピッチベンドを関連付けるためには、IMidiMappingクラスを利用します。具体的にはパラメータ操作クラスでIMidiMappingクラスも継承し、getMidiControllerAssignment()関数をオーバーライドします。IMidiMappingクラスの利用には「ivstmidicontrollers.h」をインクルードする必要があります。DEF_INTERFACEにインターフェイスを継承した分だけ加えていく。DEF_INTERFACEにインターフェイスを継承した分だけ加えていく。3.6の基本インターフェイスのクラスを使用した場合は、OBJ_METHODS()マクロを使用して継承元クラスの関数や定義を置き換える必要があります。」で始まるクラスになります。IMidiMappingクラス以外に継承した場合、継承した分だけDEF_INTERFACE()マクロを呼び出します。詳細不明なため、説明は省略いたします。MIDIコントロールチェンジの関連付け実際にMIDIコントロールチェンジとパラメータを関連付るのはgetMidiControllerAssignment()関数で行います。getMidiControllerAssignment()関数ではホスト(DAWなど)からイベントバス・MIDIチャンネル・コントロールチェンジ番号の情報が渡されるので、対応するパラメーターのIDをホスト(DAWなど)に渡すだけです。kResultFalse;}getMidiControllerAssignment()関数の内容は下記となります。概要MIDIコントロールチェンジ/ピッチベンドとパラメータを関連付けます。ホスト(DAWなど)がVSTプラグインのパラメータと関連があるかどうかを確認するため、MIDIコントロールチェンジ/ピッチベンドを受信した際に呼び出されます。3.6で定義されたMIDIコントロールチェンジ番号です。数字で記載しても問題ありません。定義されているMIDIコントロールチェンジ番号の詳細は割愛しますが、よく利用される定義については下記となります。3.6で定義されたMIDIコントロールチェンジの一覧についてはこちらに記載しております。ピッチベンドの関連付けMIDIのピッチベンドとパラメータを関連付るのにもgetMidiControllerAssignment()関数を利用します。MIDIコントロールチェンジは127までですが、midiControllerNumberに128と129がそれぞれ下記のように定義されております。kResultFalse;}最後に以上でMIDIのコントロールチェンジやピッチベンド情報を受け取ることができます。次回はVSTプラグインの見た目をよくし、使いやすくするためにGUIの実装方法を説明いたします。今回作成したVST3のソースファイルはこちらになります。vst3dev07_20190506コンパイル・ビルドの方法は簡単にこちらでご説明しております。VST3.6プラグインの作りご指摘やご質問などがございましたら、コメント欄か掲示板、Twitterでご連絡いただければと思います。