Very complex Sysex (Yamaha SY/TG77) patch parsing

Now that I’ve been able to grasp the way a TX7/DX7 works (with the help of @martin ’s preset), I had a look on the main difference with a SY77/TG77. And these are not minimal:

  • much more parameters per operator (AFM instead of FM)
  • dual LFO’s
  • 1, 2 or 4 elements per voice, each of which can be AFM or AWM.
  • effects section

From a control perspective , it’s a lot to set up but it’s doable.

But the two biggest hurdles I see currently for patch parsing. They are:

  • a voice dump is not fixed in length. The length depends on the amount of elements (1, 2 or 4) and the type of elements (AWM or AFM).
  • the position of a parameter of let’s say element 1 shifts with 9 bytes, depending on the amount of elements there are in that dump. The header of each dumps is namely variable in length as well.

Currently I can’t see clear on how to parse such a complex way of dumping voices. It’s like there are several synths combined in one device, where only one responds to a patch request but you do not know which one…

1 Like

Keeping my fingers crossed! That would a wonderful achievement and really bring my TG-77 more into the foreground… Everytime I turn it on I think “Wow, you sound really good!”, but then never do much with it as it feels too complex to dive into!

1 Like

Same here for the FS1R :wink::innocent:


Just checked the sysex implementation. There are ten different voice dump responses. To test of it would work, I’ll first try out if the E1 would allow 2 different responses to the same request , i.e. a 1 AFM and a 1 AWM response.
In the documentation of the TG77 there are 2 mysterious bytes on position 4 and 5, called ‘byte count’. Let’s hope they are not variable. Because we will need to fix the first 33 bytes to distinguish both messages. Byte 32 namely is ELMODE, and that is the one that identifies the used voice structure.

As for preset itself. It’s impossible to make room for each separate element. There is probably only room for one AFM and one AWM element. So will need a trick to control the different AFM or AWM elements using the same controls…

I’m not in my studio but will test these later in the week

1 Like

Reading about all this complexity already in a 30 years old peace of gear let me assume that it wouldn’t work at all on current Yamaha instrument series like MONTAGE / MODX. Which is, of course, a pity.

I just wonder if it were possible to just parse part the parameters i.e. per E1 page. No-one works on more than one page at the same time and if I could request the settings of the parameter the current E1 page shows with a command it would be better than nothing.

Unfortunately I am not the guy who has a clue about scripting. Apologies in advance if I misunderstood something. Thanks.


First the good news: it is indeed possible to have a synth respond with different messages to the same request . I’ve been able to parse the voice name from a 1AWM as well as a 1AFM preset within the same JSON using ELMODE as differentiator. It also looks the bytes 4-5 called ‘byte count’ are fairly static. Let’s hope they remain so.

The element trick? Not there yet…

1 Like

About the Montage, I talked to one of the Yamaha engineers at SB 22, who showed me that SysEx is indeed still implemented, but primarily used by Yamaha themselves. I guess not much about it is made public then?

The concept of the TG77 preset would look as follows:

  • 6 pages for 1 AFM element
  • 2 pages for 1 AWM element
  • 1 Filter page
  • 1 Effects page
  • 2 pages for common and element settings

Each AFM page will show 6 parameters of each of the 6 FM operators. It is essential you see the 6 operators at the same time, because a typical FM sound is made primarily on the operator interactions.

For complex voices you will thus only be able to control one element type at a time.


Well, thanks so much @NewIgnis. Indeed I’m not an engineer but just working as a freelance product specialist for Yamaha Music Europe. Believe it or not, I’m the one you had been talking to. :rofl:

I just got your first question about SysEx wrong for a reason I don’t remember and thought that I corrected my answer afterwards. But obviously I didn’t make myself clear enough on this. Sorry about that.

The SysEx documentation is probably offering everything you need. If you like to download the MONTAGE Data List as an example to take a look, here is the link…

But unfortunately my scripting knowledge is about zero and I also never worked with this advanced things like bulk requests and stuff like this. At least I managed to work with SysEx for regular controllers and buttons after going the hard way of try and error because the documentation IMHO leaves “some” room for improvements in this area. My questions about that also stayed unanswered…

I didn’t even think of concepts for more advanced editing because these would just make sense if I were able to at least get some parameter settings requested that updates the controllers on the E1. Just catching every value from its initial setting is not the ideal workflow.

1 Like

Hi @HaPe Hans-Peter, nice to meet you again :joy: :rofl:

I had not been looking for the SysEx docs on the Montage since we met, for the simple reason that I do not have that instrument. But I recall our conversation where you showed my SysEx was still implemented, and I was happy for that!
Now that you sent me the SysEx, I of course felt obliged :stuck_out_tongue_closed_eyes: to have a look at it. Well, one thing is clear: the best hardware controller (I know nothing about software controllers for Yamaha) for a Montage, is… a Montage! This thing is so deep, there is no end to that SysEx !! Some studying will be required to figure out a edit buffer voice dump, that was not apparent at first sight.
A reason some one should make apreset for a Montage would be to control very specific parameters in a gigging situation, not as a replacement for creating a sound. At least that’s my hasty conclusion based on the Sysex doc.

For your SysEx question, I’ll have a look at it later. It is surely doable, but I’ll need to make an example myself how to do it without scripting. I’ll come back to that later on.

Do you have an older Yamaha yourself?

All the best,

1 Like

Hi Ignace,

… thank you so much! The pleasure is on my site. :grinning:

I totally agree. But for some specific edit situations it could also be more comfortable to have real knobs to turn instead of using data wheels or even software editors. I created a tool using MIDI Designer on iOS which helps me a lot when programming MONTAGE / MODX. But it’s also “just” a touch screen and no real knobs.

So far I already created some pages on the E1 that gives me access i.e. to the Part Assignable Knobs and Elements. One page contains all these controllers per Part of the 8 main Parts under “Kbd Ctrl”. This makes it easy to work with software editors and immediately change the referring values without the need to touch the instrument or use the software itself.

And this is - for example - a situation where it would be great to have a button on the E1 screen that catches the current values from the instrument so that I see them immediately and can start changing from there. If this would be doable and someone could help me get started I’d even be willing to pay something for the “lessons”. :wink:

Thanks so much in advance. Much appreciated! This is indeed not related to MONTAGE but just for myself to experiment with some special things on a piece of software.

I “just” kept my SY99 and my MOTIF XS. Everything I owned during the decades like DX7, DX7II, TX802, TX16W, SY77, TG77 and a few more had to go mostly for the lack of space.

Thanks again and have a great evening.


1 Like

I’ve made an example for you, @HaPe , where I assumed the constant bytes to be 01h,02h,03h.
Can you reach this preset ? Electra One App

Anyways, the way to make the Sysex:

  1. First make a SysEx control running from 0 to 1023


  1. Add a first value byte to the Sysex message, 7 bits wide, but starting at parameter position 7, instead of 0.

  1. Add a second value byte to the Sysex message, 7 bits wide, starting at the default parameter position 0.

The result from value 0 to 1023:


1 Like

Thanks so much Ignace (@NewIgnis) for your help and the example. I had access to it and copied it to my library to be able to open it in edit mode.

Since my tests are almost two months ago in the meantime I needed to check my own results. I found out that I came to the same result but am sure that it didn’t work in June. This morning I tried it again and it works great!

So again, thanks so much for your help. Much appreciated!

Have a great weekend! :sunny:

1 Like