I’ve recently faced an interesting and mysterious issue:
I have to send a huge portion of MIDI data, let’s say 600 notes at a give time, with interval of 1/16 120 bpm from my audio DAW to the controller.
I have a set up when I use 5 DIN MIDI connector and I experience visual latency when I send 60 notes already. I’ve set the internal LED on my Fez Panda 2 to blink when MIDI data is read, so having a metronome beeping and light going off I see that it takes significant (audible) amount of time to read those 60 notes. This is no brainer as:
- the serial speed is 31250 bits per second
- midi note message is 24 bits
- audible latency is ~20 ms let’s say
- 60 notes * 24 bits = 1440 bits
- the serial bandwidth per 20 ms is 31250 / 50 = 625 bits
Hence we see that serial port accepting MIDI is not capable of providing a good performance with non-audible latency.
Therefore I started to look into other solutions like MIDI over USB (1.5 Mbits/s), MIDI over Ethernet (400 kbits/s)… and I’ve read a lot… and I saw a lot of libriaries code… and one thing didn’t give me a peacefull state: everywhere, even in Arduino MIDI over USB library I saw that Serial.Open(31250)
And here goes the real question: is it true, that even though we use higher bandwidth protocols, when it’s down to MIDI we still need to use the 31250 bps rate which is there in MIDI specification for a given MIDI port?
Even though we can’t be sure the DAW, like Ableton Live doesn’t use that 31250 bandwith to send the MIDI out, right?