MIDIPacketの作成
Core MIDIでは送信するMIDIデータをMIDIPacket構造体に詰めて送りますが、パケットデータに具体的にどんな値を指定するのかといったMIDIの仕様に関わる部分は、Appleのドキュメントには載っていないみたい。
とりあえずノートオン/オフ、コントロールチェンジ、ピッチベンドについては、以下の方法で送れました。
Note On
MIDIPacket packet; packet.timeStamp = 0; packet.length = 3; packet.data[0] = 0x90; packet.data[1] = noteNum;//ノートナンバー packet.data[2] = 100;//ノートオンベロシティ
Note Off
MIDIPacket packet; packet.timeStamp = 0; packet.length = 3; packet.data[0] = 0x80; packet.data[1] = noteNum;//ノートナンバー packet.data[2] = 0x00;//ノートオフベロシティ
Control Change
MIDIPacket packet; packet.timeStamp = 0; packet.length = 3; packet.data[0] = 0xB0; packet.data[1] = ccNum;//CCナンバー packet.data[2] = ccValue;//値
Pitch Bend
//valueは0から16383の範囲 //中間値である8192は[LSB:0, MSB:64]になる int LSB = value & (0x7F);//下位7bit int MSB = value >> 7;//上位7bit MIDIPacket packet; packet.timeStamp = 0; packet.length = 3; packet.data[0] = 0xE0; packet.data[1] = LSB;//パケットはLSB - MSBの順 packet.data[2] = MSB;