A little help with sysex formatting ?

chapelier fou's icon

Hi there, I'm having a hard time trying to send sysex messages to my Yamaha reface DX. A little example as a starting point would be so helpful.
According to this document, how would you, let's say, change the Global Transpose ?
Thank you for the help !

Jeremy's icon

I love Yamaha's sysex documentation, it's just so good. To change a single parameter using sysex, this document states that you need to send:

0xF0 0x43 0x10* 0x7F 0x1C 0x03

followed by the addresses of the parameter. In the case of Master Transpose, that's

0x00 0x00 0x07

then the data. In the case of Master Transpose, it's a single byte 0x34-0x4C, which represents -12 to +12 semitones. So 0x40 (64) is no transposition.

and terminating in

0xF7

To transpose up a 5th:

0xF0 0x43 0x10 0x7F 0x1C 0x03 0x00 0x00 0x07 0x47 0xF7

Changing a more complex parameter like Master Tune will require a little more work, but not much. That parameter (address 0x00 0x00 0x02) takes 4 bytes which altogether appear to represent a 16-bit value. You'll need to experiment a bit to see how it's encoded, according to the docs, it looks like only 4 bits per byte are used, representing value bits 15-12, 11-8, 7-4 and 3-0 respectively.

Yamaha synths typically send sysex when you change parameters on the instrument so you can look at what you're receiving in Max when making changes and then see what happens if you send it back... Good luck.

* the lower 4 bits of this number represent the sysex id of your instrument. Typically that's 0, but some people change it, and your instrument won't receive the message unless it matches.

chapelier fou's icon

Thanks A LOT. That's so helpful.
May I ask where it is stated that the sysex messages have to start with 0xF0 0x43 0x10* 0x7F 0x1C 0x03
?

Jeremy's icon
chapelier fou's icon

Thanks again !

chapelier fou's icon

Sorry if this is trivial, but why doesn't it work ?

Max Patch
Copy patch and select New From Clipboard in Max.

chapelier fou's icon

Making some progress.
There were mistakes in your quotes.
You quoted from the Reface CS section ! So the Model ID is 05H instead of 03H.
Also, i don't know where the 0x47 in your final message example came from.

chapelier fou's icon

Also,

I don't understand how to convert the address to a decimal value.
To keep the global transpose exemple, the address is
High : 30
Mid : 00
Low : 0C

(Then the value, converted to decimal, would be between 40 and 88 unless I'm wrong).

chapelier fou's icon

Okay, I went through you example again, knowing that it would be for a Reface CS. I think I fully understood it.
So I made this patch to control global transpose on a Reface DX. But nothing happens. This drives me mad.

Max Patch
Copy patch and select New From Clipboard in Max.

Jeremy's icon

OK, sorry about that, I assumed it was one synth per document and didn't even look past the first set of listings. For the Reface DX, a parameter change is:

0xF0 0x43 0x10 0x7F 0x1C 0x05 addrbyte1 addrbyte2 addrbyte3 databyte1 ... 0x7F

Master Transpose is still 0x00 0x00 0x07 with 0x40 as the center value (range is given as 0x34 - 0x4C). 0x47 means +7 semitones.

Final message for transpose up a perfect 5th:

0xF0 0x43 0x10 0x7F 0x1C 0x05 0x00 0x00 0x07 0x47 0x7F

Which I think is what you got. If the instrument isn't responding, check that your sysex id isn't set to something other than 1 (assuming it goes from 1-16 on the interface, 0 if it goes from 0-15).

Max Patch
Copy patch and select New From Clipboard in Max.

chapelier fou's icon

I've got it finally working. Now I think I've grasped how this whole thing works !
You've been so kind, thank a lot.

Jeremy's icon

Sure, I've been hacking Yamaha sysex pretty extensively the past couple of months. Happy to help others working with this stuff, too.

chapelier fou's icon

Looks nice, almost like what I'm trying to do for the Reface DX... Is it downloadable ?

I could save me a lot of time !

Jeremy's icon

Not yet... still ironing out some stuff. I'll let you know when it's ready. It probably won't help too much, though, since the Reface DX is a 4-op synth with a different sysex implementation than the original 6-op DX series.

chapelier fou's icon

I'm mostly interested in how the graphical display of enveloppes is handled.

Jeremy's icon

Ahhh my secret sauce. It's a JSUI (as is the keyboard scaling indicator), I can send over the code after I've had a chance to clean it up a bit.

chapelier fou's icon

I see. Very curious to have a look to it !

Javi Riverola's icon

Wow!
I'm trying to send sysex messages to the reface dx but don't know how to do it yet...
Let's say i want to change the LFO speed, given the manual i guess numbers 30 00 12 (1) 00-7F are important:

But i don't know how to translate or use this in your code example:

Could you point me please in the right direction????

Thanks!


chapelier fou's icon

I just found this on my computer. No idea if it's my most accomplished version, but it should help you.

Reface_DX_Controler 0.03.maxpat
Max Patch

Javi Riverola's icon

Thank you so much!
It really helped me move forwards!

chapelier fou's icon

Happy to help. Feel free to use and share.

Javi Riverola's icon

Thank you!
I'm published another topic with a problem I'm having related to this in case you can help:
https://cycling74.com/forums/linking-cc-messages-coming-from-a-midi-controller-to-some-parameters-in-a-m4l-device-causing-buggy-behaviour-in-hardware-synth

Markus Schlösser's icon

@jeremy: how did you do the envelopes? They look great!
Currently looking to implement GUI ENVs for my MKS80 and MKS70 m4l devices.

Jeremy's icon

It's the JSUI object!

Markus Schlösser's icon

Thanks! Will try this 😊