As far as I have found out, the MIDI standard defines only one way of implementing relative CCs; namely using CCs 96 and 97 for a +/-1 value change where data2 - which normally contains an absolute CC value - instead is used for the "actual" CC to change.
This is a bit restricting, as you would have to send 127 messages to go from one end of the range to the other no matter how fast you want the changes to happen at the destination. In comparison, most controllers when rapidly moving the fader or pedal or whatever would only generate a handful of CC values with smaller or bigger gaps between them.
To overcome this limitations, manufacturers have implemented other ways of doing this, especially with endless rotary encoders. I suppose you can find it on some pressure sensitive buttons as well. I don't know the details about every "standard" :rolleyes: created, except for the four described in the Axiom manual. I've taken a look at the BCF2000/BCR2000 manual as well, and it lists three 7-bit and three 14-bit relative modes, but I haven't found any details about those. Chances are that at least one of the 7-bit modes is the same as one of the Axiom's, probably also with "accelerating" values depending on the speed of knob twiddling.
Like the CC 96/97 variety, Usine's existing relative mode handles only changes of +/-1 per message. It interprets a CC value of 127 as -1 and 0-126 as +1. The accelerated modes listed in the Axiom manual use different ranges of CC values to increment or decrement the value by different amounts. One example is the "Sign Magnitude / Relative (Signed Bit)" mode, where CC values between 1 and 63 increments with the same amount, while CC values between 65 and 127 should decrement with (value - 64). All the listed methods don't use CC value 0 and/or 64, which in fact could be used for something like return to default like ctrl-clicking with the mouse.
The thing with relative values that's seldom mentioned (at least I haven't found anything about it yet), is that the interpretation of them (whether single value or accelerated) doesn't have to be restricted to 128 possible values. As long as the controller is only telling whatever is receiving the message to increase or decrease the current value, why not also have a resolution added for the destination? Sometimes a control like a fader jumps between just a handful of integer values, sometimes a really high resolution can be useful for "surgical" tweaking.
Well - these are some thoughts I have, and I would like some input and opinions from you guys'n'gals out there about what hopefully can be implemented in V5. If not in the first version, then at least in the not to distant future. I would especially like some input on the various methods of transmitting accelerated values, either from documentation you have or from analyzing the output from your controller(s). To sum up, I propose:
1) Keep the existing relative mode (of course).
2) Add MIDI standard, single value increment/decrement using CCs 96 and 97.
3) One or more 7-bit relative, accelerated modes. Either hard-coded, or with increment/decrement ranges defined in the setup, optionally with one value designated for "return to default".
---
PS Some will probably miss a mention of RPN/NRPN messages. The good thing about those is that they can send absolute values with a (theoretically) 14 bit resolution, and use 96/97 for single value increments. The bad things about them is that there seems to exist different standards for both generating and interpreting those values (maybe things are quite standarized with GM stuff, but I guess most of us don't use that very much
PS2 Yeah, yeah, I know... MIDI isn't very sexy in this age of multitouch, OSC and whatnot, but most of us do have at least one MIDI controller, and many of them can send relative values. So there...
