Hi - I started a thread on a similar topic so I hope you don’t mind if I chip in.
I have a Novation SL61 mkii controller and it would be nice to be able to use its endless controllers in relative mode. I think I could do this with some scripts but it might be good to build this in as a feature for a future release.
Unfortunately, it looks like there are a number of protocols used for midi encoders but for the record the SL61 endless controllers (and probably most Novation controllers) can be configured to send out midi messages using one of 4 protocols as follows …
REL1 (Relative 1): A message with value 65 is sent out for every clockwise step (increment) and a message with value 63 is sent out for every anti-clockwise step (decrement). With this option the encoder functions as a true endless control rather than emulates an analogue pot as with the 0-127 and -64/+63 settings.
REL2 (Relative 2): This is similar to the ‘REL1’ setting however it includes encoder acceleration. A message with value 64+n is sent out for every clockwise step (increment) and a message with value 64-n is sent out for every anti-clockwise step (decrement). The value n depends on how fast you rotate the encoder. It will be 1 when you rotate it slowly and get larger the faster you rotate it, meaning that you can scale the full range of a parameter with a small quick turn of
0-16K (14-bit mode): MIDI data values are transmitted as a 7-bit binary number, allowing a maximum value range of 0-127. The MIDI Specification allows for two MIDI control messages to be sent together where the data values form an MSB (most significant byte) and LSB (least significant byte) pair, making a 14-bit binary number and allowing a maximum value range of 0-16383. This is useful where fine control over a parameter is required, however the parameter you are controlling must be able to receive 14-bit MIDI values. If you want to send 14-bit values for fine control over a parameter then set DispType to ‘0-16K’. For CC controls, the MIDI Specification only allows for CC numbers 0 to 31 to be used in this way. Two CC messages are sent when the value of a parameter is changed – the first with the MSB value and the second with the LSB value. To enable the receiving device to distinguish between which CC message has the MSB value and which has the LSB value, the LSB value message is sent using a different CC number, calculated by adding 32 to the original CC number. Consequently CC numbers 32 to 63 are used for sending the LSB value in 0-16K (14-bit) mode. As an example, if a CC encoder has DispType set to ‘0-16K’ and CC Num set to 0 then, for each encoder step, two messages will be sent, a CC0 message with the MSB value and a CC32 message with the LSB value. The important point to note is that if an encoder has Control set to ‘CC’ and DispType set to ‘0-16K’ then CC Num should only be set from 0 through 31 and not higher.
APOT: This is a variation of ‘REL2’ and is the same system that is used by some other existing popular control surfaces. A message with value 0+n is sent out for every clockwise step (increment) and a message with value 64+n is sent out for every anti-clockwise step (decrement). The value n will equal 1 when you rotate the encoder slowly and increases as you rotate the encoder faster.