Converting Sysex (hardware synth) to CC (software synth)

Hello,

I watched the video on youtube Convert System Exclusive to Control Change using Bome MIDI Translator Pro. But I am still confusing if Bome can do the following.
I have a Moog Voyager which sends out a patch in the form of sysex. I like to translate that sysex dump to cc to my Mini V3 Arturia Vst instrument. So in short I want to translate the Sound of a Moog Voyager patch to a Mini V3 Arturia patch (as close as possible). Is this possible and is it a one time setup or do I have to setup for every patch I want to send from the Voyager to the Mini V (which is more time consuming than do it by hand)

Thanks,

Hi and welcome to the Bome Forum!

If there is a pattern to the SysEx message and it is short enough, you should be able to do it with Bome MIDI Translator Pro. Could you share with me an example of the pattern you are sending, which bytes are variable and the resulting CC message you want it converted to?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Please enclosed find a patch dump from the Voyager to Cubase. I like to translate this sysex patch dump to a cc patch dump for my Mini V3 (or any vst).

Thanks for the quick reply. I attached a dump from my Voyager to Cubase. So now I like to transfer this sysex in cc so I can transfer it to my Mini V3 software (or any vst who can accept cc data).

Hi,
It doesn’t look complete. All SysEX will start with F0 and end with F7. There is no F7 on your example.

Also I would need to know which bytes are variable (change), and which bytes are fixed.

If you are just missing one byte and the last byte is a variable, then the incoming pattern would be:

F0 04 01 00 02 03 42 1D 54 qq F7

The outgoing action would be

CC #1 on MIDI CH 1 value qq

Again, this is with my assumptions, I t could be that multiple bytes are variable but I have no way to tell.

You could set up you synth as incoming to MT Pro and capture MIDI in data there for better analysis.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Here is a screenshot from Bome hope this gives more insights

OK, so now we have a complete SysEx input. You replace any of he bytes you want to convert to something else to variables and then in rules, manipulate as needed, then output to CC or whatever in the format you want. Do you have an understanding of what the attached SysEX message means and which bytes you would want to convert to CC messages? My guess is that there are several areas within the message that adjusts the parameters of various controllers, however most SysEx messages are unique to a given manufacturer and model and not always well documented. If you don’t know what the attached message represents, you would need to either contact the vendor or look into their documentation.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hello Steve,

Thanks, there is enough documentation about the RME sysex so that would not be a problem.
The question is how long would it take to make the rules for converting 1 patch based on your experience ( There should be around 100 or 127 sysex to cc messages to convert). Another important question is, is this a one time setup so I have a working template or do I need to set this up for every patch witch I want to convert?

Thanks.

Regards,

Martijn

If the messages all have the same pattern, you could probably do it with one translator and maybe 90 global variables and you would be done. If each message has a different length or pattern, then you would have to put together a pattern for each message, but again once you are done, you shouldn’t have to do it again as long as the SysEX always follows the same pattern.

If you could point me to maybe 5 bytes or so in the above pattern that would represent a a CC value, I could show you an example with that pattern. Of course it would be better to copy and paste the pattern as text as it would be easier to edit some numbers into global variables from there.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hello Steve,

Not sure if I understand you well but here are 2 screenshots from turning the Cutoff on my RME. I also enclosed some screenshot from the sysex document of the RME maybe this gives a better insight.

RM Controller Cutoff . I hope this is the info you where talking about. Regards, Martijn

Can you

  1. Copy and paste the patchdump example into a text file from the Moog. It will be a lot easier to work with than a screen shot which is not text.

  2. Point me to the document that describes the contents of the SysEx byte byte by byte.

I will extract a portion of it to give you an example

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

If this is the document you are talking about, then byte 89 (not including the header) should be the master volume value.

In this example, I’m just using the patch format for a single preset and using the pattern (with local variable oo meaning anything) and ignoring all parameter except master volume (which I set to qq) which I am converting to CC 07 on MIDI Channel 1.

Moog-Master-Volume to CC7.bmtp (1.4 KB)

You could either use different translators for each parameter changing just the byte you want to use or include variables for each byte you want to use in a single translator. In my case I’m using local variables but there are only 10 of those so if you want to use more than variables, then you will need to use global variables. Global and local variable naming conventions are called out in the Bome MIDI Translator Manual.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

I might need to revisit this example as it appears the volume is a 14 bit number across 3 bytes.

Here is a patchdump af a sound from the rme

F0 04 01 00 02 01 2E 1F 54 15 40 46 02 19 00 00 48 40 08 00 00 00 60 01 00 00 6C 29 00 68 60 03 07 5F 07 28 1D 00 00 42 7F 05 0E 30 08 35 01 3D 04 00 10 64 4A 30 50 02 00 00 00 20 48 65 00 38 03 49 17 7C 7F 00 00 00 00 00 2A 2D 00 00 00 00 05 04 06 28 53 20 36 02 00 0A 02 7D 69 54 77 5A 0F 37 00 40 17 53 72 39 1B 06 64 1B 39 20 26 5D 4B 56 1D 08 10 20 40 00 01 02 04 08 10 20 40 00 05 10 06 00 13 00 66 00 18 78 1F 06 00 00 00 04 04 00 20 20 F7

The document can be find here http://www.moogmusic.de/SysEx.pdf.

So I am still a bit confused because I understand that you can convert sysex from a controller knob to a cc event. But how do you do it with one complete patch?

Regards,
Martijn

Hi,
From what I gather in the document, the patch is merely a collection of settings (CC’s), so we can use the same incoming SysEX pattern and have each translator extract a few bytes from the pattern producing the CC number you want for that parameter. I will look again at the volume example and fix it as I now realized the CC for volume will be a combination of bits from 3 separate bytes. I can also use what you posted to see if I can validate that it matches the document link you sent. It also appears that the SysEx you want to look at is a “Panel Dump” and not a “Single Preset Dump”. I determine this by the 5th byte (02 instead of 03)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve,

You are completely right it is a panel dump. Looking forward for your coming message.

Regards,

Martijn

Hi Martijn,

You can try this. It was a bit more complicated than originally thought because the volume parameter
is a combination of bits over 3 bytes in the SysEx message

//Master Volume Bits 0-2 in 4-6 qq
//Master volume Bits 3-9 in bits 0-6 rr
//Master volume Bits 10-15 in bits 0-6 ss

So in the rules, I did some bit manipulation to put everything into the local variable qq.

Since input range can be 0-65535 but a CC MIDI output range can only bet 0-127, I had to scale the parameter in the rules, so you will lose some precision. If your virtual synth allows for 14 bit CC then we can change the scaling and get some precision back.

So the way this would work for an entire dump is to set up individual translators similar to what I have and then extract the necessary bytes and bits for a given parameter and convert it to a CC. Anything else in the pattern for a given translator would be ignored.

Try changing the master volume and then doing a panel dump to see if the volume changes on your virtual synth. If it works, you would need to do similar for all other parameters you want to adjust in your virtual synth.
I’m using BMT1 for input and BMT2 for output and used SendSx using your SysEx message to test the translator.

Output in the case of your message was CC 7 value 0x5A.

Also, I noticed that the message was only 143 bytes (not including the 5 byte header and trailing 1 byte, so it seems like the documentation may not be 100% accurate as it calls out 148 bytes.

Moog-Master-Volume to CC7.bmtp (2.4 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve,

It worked as soon as I did a panel dump the Volume knob on my vst was moving so this is working.
Now I have to set it up all the other controls. I think this will take some time but luckely I have an example which I can duplicate and I have to change the cc control and check the sysex bytes. Hope I can figure it out.

Regards,

Martijn

Yes, initial setup will likely be a pain but once you have it, you will be all set.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve,

I started to work on the conversion but as I have little knowledge of sysex it’s quite daunting.
So I understand
F0 start of the message
04 manufactures code
01 device code 01
00 model used
02 here I got lost. How can I find out wat the 02 is and also the 01 and than the 2E etc.

It’s one big patch dump not a single line so I quickly get lost. I also get lost in the Voyager system Exclusive panel dump format. Is there more information about this subject so I can figure out wich function (cutoff for instance) is where and what the value of this knob is.

Thanks in advance.

Best regards,

Martijn