I've used midir to my satisfaction for a while now. However, in a synth or sequencer application you'd need to do intricate timing related code. A closure to handle the incoming MIDI messages just won't cut it. Sure you can use a ring buffer and send the data to your main processing thread, but the problem arises when you reconnect. Is there any reason you chose to use a closure for this purpose? I'd much rather have asynchronous way of working where I just poll for MIDI data every iteration. This is much easier to integrate in a real-time application, which is largely based on state machines. Alsa-rs gets these things right. Cpal and Midir seem to favor closures and even delegating streaming to threads, which just complicates things. It may look cleaner and safer, but it doesn't scale up to professional usage. Unless I'm missing something.