diff --git a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h index 435e30c4b2..4dc70b9bb7 100644 --- a/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h +++ b/modules/juce_audio_devices/native/juce_MidiDataConcatenator.h @@ -123,6 +123,14 @@ private: { if (pendingBytes > 0 && *d >= 0x80) { + if (*d == 0xf7) + { + *dest++ = *d++; + ++pendingBytes; + --numBytes; + break; + } + if (*d >= 0xfa || *d == 0xf8) { callback.handleIncomingMidiMessage (input, MidiMessage (*d, time)); @@ -131,11 +139,15 @@ private: } else { - if (*d == 0xf7) + pendingBytes = 0; + int used = 0; + const MidiMessage m (d, numBytes, used, 0, time); + + if (used > 0) { - *dest++ = *d++; - pendingBytes++; - --numBytes; + callback.handleIncomingMidiMessage (input, m); + numBytes -= used; + d += used; } break; @@ -144,7 +156,7 @@ private: else { *dest++ = *d++; - pendingBytes++; + ++pendingBytes; --numBytes; } }