- class MyMidiSampleVST2 : public AudioEffectX , public CMidiMsg // CMidiMsgが今回作成するクラス
- {
- : // 以下省略
- :
- };
- class CMidiMsg
- {
- protected:
- int cur; //読み込み中のMIDIの位置
- int num; //受け取ったMIDIメッセージの数
- MidiMessage buf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ
- public:
- CMidiMsg(void);
- ~CMidiMsg(void);
-
- // バッファのクリア等を行う。
- virtual void clearMidiMsg();
-
- // MIDIメッセージをバッファに追加する
- // バッファへの追加が成功すると1、失敗すると0を返す
- virtual int addMidiMsg(VstMidiEvent *midievent);
- virtual int addMidiMsg(MidiMessage msg);
-
- // バッファからMIDIメッセージを取り出す
- virtual MidiMessage getMidiMsg();
-
- // バッファ中にあるMIDIメッセージの数を返す
- virtual VstInt32 getMidiMessageNum();
-
- // バッファから最初に取り出せるMIDIメッセージのDeltaFramesを返す
- virtual VstInt32 getNextDeltaFrames();
-
- // MIDIメッセージが何かを判断し、そのメッセージに対応した
- // onMidiKeyOn()関数、onMidiControlChange()関数等を呼び出す。
- // 引数なしの場合、内部でgetMidiMsg()が使用されるので注意。
- virtual void midiProc(MidiMessage mididata);
- virtual void midiProc() { MidiMessage mididata = getMidiMsg(); midiProc(mididata); };
-
- // midiProc()関数から呼び出される。
- // それぞれのMIDIメッセージに応じて処理を行う
- // 以下6つはオーバーライドして使う
- virtual void onMidiKeyOn (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空
- virtual void onMidiKeyOff (unsigned char channel, unsigned char noteNo, unsigned char velo) {}; // 関数の中身は空
- : // 長いので省略
- :
- };
protected:
int cur; //読み込み中のMIDIの位置
int num; //受け取ったMIDIメッセージの数
MidiMessage buf[MIDIMSG_MAXNUM]; //受け取ったMIDIメッセージを保管するバッファ
メンバ関数 | 戻り値 | 引数 | 内容 |
clearMidiMsg() | なし | なし | MIDIメッセージを受け取るMIDIバッファを初期化する関数。 |
addMidiMsg() | int | VstMidiEvent *midievent | MIDIメッセージをMIDIバッファへの保存する関数。 引数は受け取るMIDIメッセージ(VstMidiEvent型のポインタ) MIDIバッファへの追加に成功すると1、失敗すると0が返る。 |
メンバ関数 | 戻り値 | 引数 | 内容 |
getMidiMessageNum() | VstInt32 | なし | MIDIメッセージ有無のチェックに利用する関数。 戻り値はMIDIバッファにあるMIDIメッセージの数。 |
getNextDeltaFrames() | VstInt32 | なし | processReplacing()関数内で次のMIDIメッセージを処理するタイミングを返す関数。 戻り値は処理すべきフレーム(0~sampleFramesの範囲の値) |
getMidiMsg() | MidiMessage | MIDIバッファからのMIDIメッセージの取り出す関数。 戻り値はMIDIメッセージ構造体 | |
midiProc()関数 | なし | MidiMessage mididata | 引数のMIDIメッセージに応じて処理を実施する。 引数は処理するMIDIメッセージ |
メンバ関数 | 戻り値 | 引数 | 内容 |
onMidiKeyOn() | なし | MIDIメッセージがKeyOnの際に呼び出される。 | |
onMidiKeyOff() | なし | MIDIメッセージがKeyOffの際に呼び出される。 | |
onMidiProgramChange() | なし | MIDIメッセージがプログラムチェンジの際に呼び出される。 | |
onMidiPoliKeyPress() | なし | MIDIメッセージがポリフォニックキープレッシャーの際に呼び出される。 | |
onMidiChannelPress() | なし | MIDIメッセージがチャンネルプレッシャーの際に呼び出される。 | |
onMidiPitchBend() | なし | MIDIメッセージがピッチベンドチェンジの際に呼び出される。 | |
onMidiSystemMessage() | なし | MIDIメッセージがシステムコモンメッセージ、システムリアルタイムメッセージの際に呼び出される。 システムメッセージに応じてさらにonMidiQuarterFrame()関数、onMidiSongPointer()関数などが呼び出される | |
onMidiControlChange() | なし | MIDIメッセージがコントロールチェンジの際に呼び出される。コントロールチェンジメッセージに応じてさらにonMidiCC000()~onMidiCC127()の関数が呼び出される。 |
項目 | No. | 概要 |
MIDIメッセージ処理 | No.1 | MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 |
No.2 | VSTの初期化とMIDIメッセージ処理関連の変数の初期化 | |
No.3 | ホストアプリケーションからMIDIメッセージを受け取る方法 | |
No.4 | MIDIメッセージをprocessReplacing()関数中で処理する方法 | |
No.5 | MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版) |