Sysex with 16bit data


Is there a way to attach sysex messages with 16bit data to an encoder? Some Roland gear is using this for realtime control. (SDE / SRV / SDX).

They send four data bytes, using only 4 bits in each byte, to transmit a 16 bit value.

LSB | data | data | MSB (for example 0F 0B 00 04 = 40BF)

The value function in the editor offers 14bits, which is enough for most parameters, but there are a few where you have to sacrifice resolution or crop the data.

Yes, you do this by creating a lua function for it, where you convert the value of a virtual control into four bytes you then transmit. Lua allows you to resolve all these special cases, without making the user interface in the editor overly complex.

Perfect. I’ll look into it!

The same apples to special cases for the display of parameters?

For example a frequency which can be set from 0.1Hz to 1000Hz, but is transmitted as values from 1-10000.
I was not able to have it displayed correctly.


but the first example is lua as a “function”: the control must do something different from the normal way of working

showing a different value is also via lua but now you use the lua as a “formatter”. In that case it only changes the way the control value is being diplayed.

1 Like

Already figured out the formatting. :slight_smile:

After trying some things, let me rephrase the question.
The controls are limited to 14bit, aren’t they?

So I have to scale them to the required number of bits?

Another example is a value going from 0.7 to 29000, where it goes in 0.1 increments unter 100, so effectively 29.993 values, which is in a 15bit range.

Midi cc is limited to 7 or 14 bit yes, because that is within its definition.
But try a virtual control… they go until 99.999 AFAIK

Solved it by using only the values I need and then scale it up to 16bit and create the 4 sysex bytes needed. Thank you for pointing me into the right direction. :slight_smile:

1 Like