Well, first of, you wouldn't be filling it up with notes, although your last might COULD be a note if, for example the note was intended to start some kind of ambient sound.
But you're really thinking about it inside out. The goal is to have the synth be able to reset to its next sound but not lose any of the extra initialization (volume, expression, maybe even some real-time sysex) messages that are sent immediately after to modify that sound before the synth is actually played.
An interrupt driven buffer is simply the mechanism one uses to store the pending messages until the synth is ready to respond to them. Parsing the byte stream into MIDI events is done upstream, it's not an issue.
@Dan Clearly buffering has to be done unless the synth really can poll/respond in real-time, which is of course is unlikely. However, for a start, I have KARMA turned off globally, I never use that stuff. But even if there's a bunch of messages being created internally during start up, that's still no reason for external messages to not be held up and then processed when the initialization is completed.
Uh, yeah --- that's precisely why I ASKED in my initial thread if buffering is being done. It should be, but I'm seeing symptoms that would suggest that MIDI messages arriving immediately after a program change are being lost and I don't think that should be happening. Lost or improper handling of messages after a PC would explain this. If you're confirming that buffering is being done such that subsequent MIDI messages don't get lost, then why aren't those subsequent MIDI messages being handled? Are they being processed to early, while the synth is still resetting to the new sound? If so, then I would argue that that's a bug.
what you are describing does not mean that buffering is not being done
Actually, with simpler synths, particularly older ones that are slower, it would be even more necessary to have decent buffering. The standard practice of delays is a historical hack because buffering wasn't being handled properly and shouldn't be needed in a modern complex synth like an Oasys or Kronos. How is one supposed to know how long the delay should be? What if some sounds only take 1/2 second to initialize and others take 3 seconds....is one supposed to always have a delay of 3 seconds just in case? Buffering and responding to external MIDI after everything else is initialized makes the process completely deterministic, that doesn't seem like an unreasonable behavior.
even with much simpler synths, it's always been standard practice to insert delays
KronosX, Eigenharp Alpha, Roland AX-1, Roland A800Pro (4), RME UCX (2), MaxMSP, soft synths from Native Instruments, AAS, Arturia, G-Force, RealLabs, Korg Legacy and others