After some users complained about cases in which they played live and got stucked notes because some note-off MIDI events were dropped (and it was hard to reproduce), I found that the problem is in function:
MidiMessageCollector::removeNextBlockOfMessages
Inside that function we check for ‘if (numSourceSamples > maxBlockLengthToUse)’ and in there we are changing the startSample, calling to findNextSamplePosition and so skipping some MIDI events which are dropped.
I mean - it looks like that by design the code intends to throw away some MIDI events.
If I understand correctly, the idea of that code is to map the original time stamps from ‘seconds’ units to a ‘sample position’ units, but why this code allows dropping events?
Am I missing something?
