- CMidiMsg::CMidiMsg(void)
- {
- clearMidiMsg();
- }
-
-
- CMidiMsg::~CMidiMsg(void)
- {
- }
-
- void CMidiMsg::clearMidiMsg()
- {
- // メンバー変数を初期化する
- cur=0;
- num=0;
- memset(buf, 0, sizeof(MidiMessage)*MIDIMSG_MAXNUM);
- }
メンバ関数 | 戻り値 | 引数 | 内容 |
addMidiMsg() | int | VstMidiEvent *midievent | MIDIメッセージをMIDIバッファへの保存する関数。 引数は受け取るMIDIメッセージ(VstMidiEvent型のポインタ) MIDIバッファへの追加に成功すると1、失敗すると0が返る。 |
- VstInt32 MyMidiSample2VST::processEvents (VstEvents* events)
- {
- // MIDIバッファを初期化。
- clearMidiMsg();
-
- int loops = (events->numEvents);
-
- // VSTイベントの回数だけループをまわす。
- for (int i = 0;i < loops; i++)
- {
- // 与えられたイベントがMIDIならばMIDIバッファに追加する。
- if ((events->events[i])->type == kVstMidiType)
- {
- VstMidiEvent *midievent = (VstMidiEvent*)(events->events[i]);
- if( !addMidiMsg(midievent) )
- {
- break;
- }
- }
- }
-
- // 1を返さなければならない
- return 1;
- }
- int CMidiMsg::addMidiMsg(VstMidiEvent *midievent)
- {
- // VstMidiEventからMidiMessgeへデータをコピーする
- MidiMessage tmp;
- tmp.deltaFrames = midievent->deltaFrames;
- tmp.message = midievent->midiData[0] & 0xF0;
- tmp.channel = midievent->midiData[0] & 0x0F;
- tmp.data1 = midievent->midiData[1];
- tmp.data2 = midievent->midiData[2];
-
- return addMidiMsg(tmp);
- }
-
- int CMidiMsg::addMidiMsg(MidiMessage msg)
- {
- // バッファがいっぱいなら0を返す
- if (num >= MIDIMSG_MAXNUM)
- return 0;
-
- // バッファにMIDIメッセージを保存
- buf[num] = msg;
-
- // バッファに保存されているMIDIメッセージの数を増やす。
- num++;
- if (num > MIDIMSG_MAXNUM) {num = MIDIMSG_MAXNUM;}
-
- return 1;
- }
項目 | No. | 概要 |
MIDIメッセージ処理 | No.1 | MIDIメッセージ処理で最小構成の自作VSTに追加する変数・関数 |
No.2 | VSTの初期化とMIDIメッセージ処理関連の変数の初期化 | |
No.3 | ホストアプリケーションからMIDIメッセージを受け取る方法 | |
No.4 | MIDIメッセージをprocessReplacing()関数中で処理する方法 | |
No.5 | MIDIメッセージ処理で作成したVSTのサンプルソースコード全体(暫定版) |