I've just finished major updates to PortMidi for Windows (MME API). While trying to figure out why my tests worked, yet others were having problems, we discovered a bug in the MIDI Yoke drivers. I added a workaround for old drivers, but I see that MIDI Yoke NT driver has already been fixed and updated. I also did some experiments and found some cases where messages seemed to be dropped when there are few buffers (e.g. double buffering may have been a bad idea), so the buffer allocation policy has changed. I also discovered that my experiments that indicated entire sysex messages must be sent in one buffer were flawed -- probably some other bug allowed whole messages to work and caused fragmented messages to fail. In any case, it is NOT necessary to fit an entire sysex message into a single buffer, which means the dynamic buffer reallocation is unnecessary. The new code is smaller and simpler in many areas. Because of Fabien Costantini's report on real-time problems with sysex, I optimized the sysex routines. Previously, sysex was transmitted byte-by-byte in order to simplify the complex error checking and parsing, e.g. there might be embedded real-time messages among the sysex data, and you need to check for EOX. There is now optimized code where the system-dependent layer *optionally* passes back a pointer to a buffer to fill, a buffer offset address, and a buffer length. The system-independent layer can then copy bytes directly to the system-dependent data structure with very little overhead. This makes PortMidi sysex code *much* faster, but I didn't measure the time spent in the device driver. I also added a "shortcut" to optimize copying sysex data from input buffer to the FIFO that clients read from. By the way, the new FIFO queue is multi-processor safe and non-blocking, even with out-of-order writes, although there are still some flags elsewhere in PortMidi that might fail if out-of-order writes occur. These are associated with error signalling. Finally, I ported my old CMU MIDI Toolkit Midi Monitor program (mm) to PortMidi to help with debugging, and it is now in pm_test/mm.c.

I am now checking up on some Mac OS X issues, but if anyone is able to test the new Windows code, I'd like to just email you a zip file of the current state.

Thanks to Fabien Costantini, Ben Allison, Jamie O'Connell, Oron Cherry, Joe Newcomer, and anyone I'm forgetting for help on these Windows issues.

-Roger

_______________________________________________
media_api mailing list
[email protected]
http://www.create.ucsb.edu/mailman/listinfo/media_api

Reply via email to