※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

トップページ


MIDIメッセージを処理するVSTについて

ここでは最小構成のVSTで作成したVSTを基にMIDIメッセージにあわせて動作するVSTを作成する。
作成するVSTはロードされると常にノイズを発生させる(音量注意)。このノイズのボリュームをMIDI CC7でコントロールできるVSTを作成する。
最小構成のVSTのソースコード全体はここにある。

MIDIメッセージを処理するに当たって最小構成のVSTに以下の追加を行う。

  • 受け取ったMIDIメッセージを確保するための変数の追加
  • ホストアプリケーション(Cubase,Sonar等)からのMIDIメッセージを上記変数に保存するprocessEvents()関数の追加
  • processReplacing()関数内に受け取ったMIDIメッセージを処理するコードの追加

なお、ここに記載している内容についてはMIDIメッセージについてある程度の知識があることを前提としている。
また、ここで作成するVSTサンプルのソースコード全体はここにある。

MIDIメッセージ用の構造体の定義

まず始めにMIDIメッセージ用の構造体を定義する。
MIDIメッセージ用の構造体ではMIDIメッセージ・チャンネル番号・MIDIデータ1・MIDIデータ2に加え、MIDIメッセージの処理タイミングを示すVstInt32型の変数を定義するとよい。
(MIDIメッセージの処理タイミングを示すVstInt32型の変数の詳細は後述。)

具体的には以下のようになる。
  1. struct MidiMessage
  2. {
  3. VstInt32 deltaFrames; //MIDIメッセージを処理するタイミング
  4. unsigned char message; //MIDIメッセージ番号
  5. unsigned char channel; //MIDIチャンネル
  6. unsigned char data1; //MIDIデータ1
  7. unsigned char data2; //MIDIデータ2
  8. };

VSTのクラス定義

続いてVSTの基本となるクラスを作成する。

最小構成のVSTに、先ほど定義したMidiMessage型のバッファとホストアプリケーションからMIDIメッセージを受け取るためのprocessEvents()関数を追加で定義する。

具体的には以下のようになる。
  1. #define MIDIMSG_MAXNUM 255
  2.  
  3. class MyMidiSampleVST : public AudioEffectX
  4. {
  5. protected:
  6. int midimsgnum; //受け取ったMIDIメッセージの数
  7. MidiMessage midimsgbuf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ
  8.  
  9. // ノイズのボリューム
  10. float volume;
  11. public:
  12. MyMidiSampleVST (audioMasterCallback audioMaster);
  13.  
  14. // 音声信号を処理するメンバー関数
  15. virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
  16.  
  17. // MIDIメッセージをホストアプリケーションから受け取るためのメンバー関数
  18. VstInt32 processEvents (VstEvents* events);
  19. };





同一カテゴリのTips


項目 No. 概要
MIDIメッセージ処理 No.1 MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数
No.2 VSTの初期化とMIDIメッセージ処理関連の変数の初期化
No.3 ホストアプリケーションからMIDIメッセージを受け取る方法
No.4 MIDIメッセージをprocessReplacing()関数中で処理する方法
No.5 MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版)