There are some synths and maybe some controllers out there that seems to be able to send 14bit MIDI controller values. I do not have such a device and can not make any tests. The Moog Voyager seems to be one of them...
The JUCE MidiMessage standard controller-event supports 7bit values. Think thats how it is defined in the MIDI specifications. Would it be a big hack to support 14bit values too or is something like this already available without parsing MIDI data by myself?
It looks like JUCE plugins can process 14 bit MIDI messages since somewhere last year by default, but it always returns a controller value in the range from 0..127. Is there any way to get the 14bit high resolution value? Could not find something like this in the MidiMessage class.
Thanks for the info. I'm not sure if i undertand that right.. should i get a MIDI Message with a special controller number like 101? I always get the same "real" controller number. Is this already filtered out by the MIDI parser when i do this inside the plugin processor code processing loop?
Ah, now I get it. You don't want to parse RPN and NRPN messages. You want this:
The first CC message encodes the high 7 bits (128s, MSB) of the value, and the second CC message encodes the low 7 bits (1s, LSB) of the value, and the two CC numbers used are separated by 32.
So a 14-bit message on CC7 with a value of 522 would look like this:
CC7, value 4, IMMEDIATELY followed by CC39, value 10.
JUCE does not directly support this at the moment. You'll have to do it manually by receiving the MSB and LSB as two separate CCs and combine them when you received both.
For example, MPEInstrument::handleTimbreMSB() and handleTimbreLSB() do exactly that. OK, not quite like the above quote: the slight difference is that it expects the LSB first and then the MSB. Makes more sense to me because otherwise you break backwards compatibility if a device sends the MSB only.