96 kHz.org
Advanced Audio Recording

Improved MIDI transmission

This article describes limitations of the MIDI standard and shows ways to get around several issues by increasing transmission speed and controller resolutions. Read here about the limitations of MIDI.


impact of a low MIDI-speed on sound

 When having a closer look at today's synthesizer music, one recognizes that it is nearly impossible to transport all the information for many simultaneously pressed keys appropriately with the current MIDI protocol which is running at around 30kHz only. With e.g. 10 keys pressed the same time, nearly 10ms are required before all the "start note" commands are transmitted. In cases when musical instruments have to send a lot of additional controller data in order to manage functions like filtering and distortion in real-time, the limitation quickly becomes critical because it will cause jitter. This is very bad for fast and pulsed voices using also arpeggio effects. The example below shows a chord played at 160 bpm, creating 1/32ths notes repeating at 50ms. The intended echo effect of the automatic arpeggio is totally ruined because of jitter and partial bandwidth overflow:

Jitter in MIDI Systems when transmitting MIDI notes


But this is not only the case with electronic music: Having a look at qualified piano players, it becomes evident that finger movement has to be reproduced very precisely in order to maintain the real information. It is not possible to use simple velocity curves as with synthesizers but has to send continuous controller information with at least 1kHz along with the transient time of the note. This leads to what I call the "piano 10 finger problem" which means, that 10 controllers must be send in less than some ms and at least 20 have to be sent during note start leading to 30 midi massages at the "same" time totally overwhelming the midi speed. The table below shows this and other cases:


Comparison Table of MIDI-speeds

Comparison of hispeed MIDI and Standard MIDI

Even with enhanced MIDI at 230k like I proposed here, the precise piano playing was impossible. .

 Most PC's limit seems to be 460kBaud, which I achieved using Linux and the wxWidgets Library. See my PDF-document here for a detailed explanation provided for Joachim Bürmann. www.iftools.com (CTB library). With 460kBaud piano control in real-time is principally possible. With special hardware, even 920kBaud is possible using Linux. So from the PC side, it was possible to switch to an enhanced MIDI standard with increased speed.

The question is how to get even more speed with MIDI. Well looking at the MIDI speed comparison chart, it is very obvious, that with the current even when using USB interfaces for PC, there will still be a bottle neck when transferring music data to the sound device.

The orchestral case, using 32 or 64 voices and intensive controller activity cannot be handled by the MIDI protocol. Latency should not be the big problem during offline work like production, but bandwidth is. The density of orchestral music ranges between 10% and 50%, so the number of voices simultaneously active is about 5 to 30! even for small orchestral music. Including controller values and sysex, around up to 100 midi messages will be required within the critical 2..3 ms period. Allowing 5ms for maximum delay, a 1MB connection will be required. According to the table more than 16000 events could be transported per second which will work for most applications.

Anyway, to reduce the time and also increase the resolution of the controllers, I thought of a new protocol adding 2 more bytes which contain addition resolution bits or could contain other pieces of information and replace the serial slow protocol by physical S/PDIF.

MIDI 2000 - high speed protocol midi over spdif

Using 5 Byte MIDI solves the issue of the coarse controller values since 12 bits are available now. Using S/PDIF physical layer at least 3MBaud are available to transmit MIDI data with acceptable delay and sufficient precision. Using 10 Bit reduced MIDI like in the 10 Bit MIDI Controller, 2 MIDI messages can be compressed into a S/PDIF word of 32 Bits. Alternatively two S/PDIF words can be used to store MIDI raw data including start / stop and parity bits for easy decoding. Finally full 5Byte MIDI can be transmitted using external S/PDIF connection using the normal protocol. Unlike described in my first MIDI2000 approach, this protocol fully works with existing hardware and fits well in the already defined S/PDIF standard protocol. Common transceivers can be used to transmit data.

Comments are welcomed.


  Read also the former article about the limitations of MIDI.


© 2003 - Jürgen Schuhmacher