I've been working with Midi protocol for the past month or so. The links I found to be very useful (and free) are as follows: http://ccrma-www.stanford.edu/~craig/articles/linuxmidi/ (basic overview of midi programming in Linux) http://www.borg.com/~jglatt/tech/midispec.htm (midi protocol) http://ccrma-www.stanford.edu/~craig/articles/linuxmidi/misc/essenmidi.h tml (another midi protocol) As far as the standardization is concerned, only the messages with status byte being 0xEF - 0xFF are reserved for vendor-specific stuff (with a couple of exceptions). Everything else is status byte + 1 or 2 data bytes (i.e. note-on is 144 status byte (meaning note-on on channel 1), then pitch (0-127), and then velocity (0-127)). Status bytes are generally persistent, so if you have a stream of note-ons on the same channel only pitch and velocity values are sent, once the first status byte has been invoked. Beyond that, it is really rather simple linear protocol (albeit too rudimentary). OTOH, lately I've been messing with OSC and found out that it is much more flexible. I think at least twp commercial apps support it as well, one of them being Max (+ over a dozen oss apps, such as pd, supercollider, etc.). See here for more info: http://cnmat.cnmat.berkeley.edu/OSC/ So, this may be a path to pursue if one wants to attain greater flexibility. Hope this helps at least a bit. Ico