Midi sucks. I never understood how people could work with 7bit when it comes to filters or mixing consoles. That’s why I started building my [mixer controller]. Now that it at least works halfway, I started experimenting with its implementation with common computer programs. Luckily, Live has the ability to handle 14bit midi messages, and its easy!
How 14bit midi works
The regular MIDI control message has 7bits, giving you a number between 0 and 127. 14bit messages use two of those, using two corresponding control messages. Looking at the list of [MIDI controller numbers] you can see that numbers 32-63 are “LSB for controllers 0-31”. They provide the 7 higher bits to our value. Controller 1 gives us 2^0 to 2^6, controller 33 will add 2^7 to 2^13. A device or program that uses 14bit midi will expect both messages to be sent together.
I built a small patch in PD that takes an analog signal read by an arduino and converts it to two midi messages, sending a 14bit midi message on channel 2, using controller 1 and 33. Note that the Arduinos analog in uses only 10bit. That’s why we multiply the incoming number with 16, adding 4 bits.
The messages are sent via a virtual MIDI port. Here’s a nice tutorial how to set that up on a mac: http://www.johanlooijenga.com/tools/5-apps/12-virtual-ports.html
How to implement 14bit control messages in Ableton
It’s very easy. Activate Abletons MIDI learn function, click on whatever you want to control and turn your knob or use whatever controller you want to implement. Ableton will recognize it. Now look on the bottom of the screen and you’ll see a drop down menu where you can choose the kind of control message Ableton should expect from that controler. Here, you choose “Absolute(14bit)”. And there you go :)
I hope this helps! Let me know if I made a mistake or you didn’t understand something.
Tags: 14bit MIDI, Ableton, Arduino, Controller, PD
I think you may have a typo, I could be wrong.
In your article it says:
“Looking at the list of [MIDI controller numbers] you can see that numbers 32-63 are “LSB for controllers 0-31″. They provide the 7 higher bits to our value. Controller 1 gives us 2^0 to 2^6, controller 33 will add 2^7 to 2^13.”
If 0-31 are MSBs, and 32-63 are LSBs, then wouldn’t CC#1 be the higher values 2^7 through 2^13 while CC#33 would be giving us the lower values?