私は iPad で Midi を処理していますが、すべて正常に動作しており、入ってくるものすべてをログに記録でき、すべて期待どおりに動作します。しかし、長いメッセージ (つまり Sysex) を受信しようとすると、最大 256 バイトのパケットを 1 つしか取得できず、その後は何も取得できません。
Apple が提供するコードを使用する:
MIDIPacket *packet = &packetList->packet[0];
for (int i = 0; i > packetList->numPackets; ++i) {
// ...
packet = MIDIPacketNext (packet);
}
packetList->numPackets
は常に 1 です。最初のメッセージを取得した後は、「新しい」sysex メッセージが送信されるまで、他のコールバック メソッドは呼び出されません。私の MIDI 処理メソッドが完全な packetList (潜在的に任意のサイズ) で呼び出されるとは思いません。データをストリームとして受け取ると思っていたでしょう。これは正しいです?
私が見つけた唯一のものはこれでした: http://lists.apple.com/archives/coreaudio-api/2010/May/msg00189.html、まったく同じことについて言及していますが、あまり役に立ちませんでした。おそらくバッファリングを実装する必要があることは理解していますが、最初の 256 バイト以降は何も表示されないため、どこから始めればよいかわかりません。