Jump to content

SysEx ranging across 4 bits

Go to solution Solved by des99,

Recommended Posts

I have a Yamaha Motif ES synth for which I'm building an environment in Logic 10.7.7. This consists primarily of SysEx faders.  

For example, on the Motif, F0 42 10 7F 00 0A 00 01 VAL 7F would select MODE CHANGE. That's easy since there is only 1 value to tweak with the fader. However, I've run into two instances where I'm stuck, as there are multiple values to tweak. 

I suppose I have three questions: 1) How to I do about iterating through these multiple bit options on Master Tune and Output Gain?      2) Can you please explain what the Yamaha manual is trying to tell me here?    3) Is it possible to use multiple faders to control multiple VAL slots in a SysEx message? Many thanks.

F0 43 10 7F 00 00 00 02 then what?? 7F
-102.4 – +102.3 [cent] 
1st bit3-0 → bit15-12 
2nd bit3-0 → bit11-8 
3rd bit3-0 → bit7-4 
4th bit3-0 → bit3-0

F0 43 10 7F 00 00 00 10 then what?? 7F
bit0: 0/+6dB 1 & 2
bit1: 0/+6dB 3 & 4
bit2: 0/+6dB 5 & 6
bit3: 0/+6dB 7 & 8
bit4: 0/+6dB 9 & 10
bit5: 0/+6dB 11 & 12
bit6: 0/+6dB 13 & 14


data range.png

Link to comment
Share on other sites

You are always going to be limited in the complexity of encoding/decoding sysex message formats over using dedicated software for this, unfortunately. If you're hitting the limits of what Logic can do with sysex faders, there's not a huge amount further you can go with this approach.

Link to comment
Share on other sites

  • Solution

Extracting multiple different parameters out of a sysex string, performing common sysex manipulations like bitwise operators, masking, nibble en/decoding, ASCII tables and unpacking multiple parameters and so on are all things relatively easily done with proper programming or sysex software dedicated to the task, but aren't really doable in Logic's Environment, which is not a programming environment.

Sometimes you might be able to find some hacky workarounds for some things, but like I say, the limits are easy to hit if you have a sysex format that's in any way complex, and the things listed above, like in the documentation you show, aren't easy to do with Logic's relatively limited sysex support.

  • Like 3
Link to comment
Share on other sites

Those are two examples of two different problems (and strategies) often encountered with SysEx. des99 already gave an introduction.

"Master Tune" is clearly a 16 bit parameter meaning that the whole parameter encompasses 16 bit. The problem with MIDI data is that we only have 7 bit at our disposal in SysEx (the 8th bit is the status bit). This in turn means that we have to split those 16 bit across multiple MIDI bytes (each allowing up to 7 bit). Since we're having a 16 bit parameter we're going to need at least 3 bytes; a possible scenario to split it 7-7-2. Yamaha choose 4 bytes instead (going 4-4-4-4); this has the advantage of making the data more easily readable and in general slightly easier to handle. Different manufacturers have used different approaches to this problem.

"Individual Output Gain" is completely different: here are several parameters combined. This is pretty bad because it requires a slider in software (or hardware) to "know" about the other parameter values.  Basically if you want to change the value for pair 3&4 you have to know the values for 1&2, 5&6, 7&8 and so on as well and have to incorporate those values into the SysEx message, too.

This is not a problem when first transferring the data from the device (by requesting a SysEx dump) and working then "externally" on those (now known) bytes.

Back in the day when all memory was very expensive it was completely normal to pack several parameters into a single byte inside the devices. Since Yamaha has chosen a SysEx format that basically mimics the internal memory structure of the device we're ending now with this unfortunate situation.


  • Like 2
Link to comment
Share on other sites

Thank you for the added insight. I'll just use the environment for the basic things.

Des99 mentioned more dedicated software has no issue with these sorts of parameters. Yamaha has an editor for PC that indeed handles it all, and I think it remains on my laptop. I'd rather do it all on the mac.

I suppose something like Pd, Max, ... or even CTRLR could manage through its Lua scripting? There appear to also be a range of python MIDI libraries on github. I have enough programming experience do severely endanger myself so I might dive down that rabbit hole. Both of your posts have been very enlightening.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

I have exactly the same problem with the bits. Just I am programming my novation remote 1.
but HAlf solution or a general thing is when the size indicator? after the sysex  adress


F0 43 10 7F 00 00 00 02 then what?? 7F
When the size is greater than 1 eg 2 add a 00 After! so: 00 00 02 00
if size is 4 add a 03 00 00 02 03 to count one (128) up.
But I havnt been able to find where the Bit stuff is hiding.

oh add 3 zeros to get the first bit set values
43 10 7F 00 00 00 02 00 00 00 DV

This code adjust around "0 -+1.5"
43 10 7F 00 00 00 02 00 04 00 7F

add this 00 04 00
play around with counting up or down on the parameters 04 00

Found with trial and error tha this the highest tuning (+102.3):
43 10 7F 00 00 00 02 00 07 1F DV

Edited by ABkasti
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...