Ich bin Midi auf dem iPad verarbeiten und alles funktioniert gut und ich kann alles protokollieren, was kommt und alles funktioniert wie erwartet. Wenn ich jedoch versuche, lange Nachrichten (dh Sysex) zu empfangen, kann ich nur ein Paket mit maximal 256 Bytes und nichts danach erhalten.MIDIPacketList, numPackets ist immer 1
den Code Verwenden von Apple zur Verfügung gestellt:
MIDIPacket *packet = &packetList->packet[0];
for (int i = 0; i > packetList->numPackets; ++i) {
// ...
packet = MIDIPacketNext (packet);
}
packetList->numPackets
ist immer 1. Nachdem ich die erste Nachricht erhalten, werden keine weiteren Rückrufmethoden aufgerufen, bis eine ‚neue‘ sysex Nachricht gesendet wird. Ich denke nicht, dass meine MIDI-Verarbeitungsmethode mit der vollständigen packetList (die möglicherweise eine beliebige Größe haben könnte) aufgerufen würde. Ich hätte gedacht, ich würde die Daten als Stream erhalten. Ist das richtig?
Nach dem Graben um das einzige, was ich finden konnte war das: http://lists.apple.com/archives/coreaudio-api/2010/May/msg00189.html, die genau das gleiche erwähnt, aber war nicht viel Hilfe. Ich verstehe, dass ich wahrscheinlich Pufferung implementieren muss, aber ich kann nicht einmal etwas hinter den ersten 256 Bytes sehen, also bin ich nicht sicher, wo ich überhaupt anfangen soll.
Beachten Sie, dass Apples Code einen kleinen Fehler enthält - das '>' im bedingten Teil der 'for' Schleife sollte sein ein '<'. Es wird nicht helfen, Ihr Problem leider zu beheben. –
HINWEIS: Die Handlung verdichtet sich. Bei iOS mit einem externen Gerät wie dem Line 6 MIDI Mobilizer II (oder dem iRig oder iConnect) wird der Sysex nicht einfach in mehrere Pakete aufgeteilt. Es ist in mehrere Paketlisten aufgeteilt, von denen jede ein einzelnes Paket mit einer Länge von 3 enthält. Dies ist meine persönliche Hölle, die ich gerade entdeckt habe. –