Last Updated:

C u b a s e   S X   M i d i   D e v i c e   P a n e l s 
S o m e   T i p s / H o w  T o . . .

How to Create (Better) SysEx Strings

INTRODUCTION

WARNING: ADVANCED STUFF!!

FAQ:
Since there is virtually zero documentation in how to create SysEx string in the Midi Device Manager / Define Parameter pane, a lot of people have been asking how this is done, like in the SysEx box, they can't enter a value, etc.  Hopefully, this page will try and explain how this is done.

PROBLEM:
You have a device that use 1 common SysEx string,
eg F0 41 10 6A 12 01 00 PT Fn XX F7,
where
PT is say Part 1 to Part 16 or sometimes the Midi Channel,
Fn is the Function code, eg Filter, or Key Mode Change etc
XX is the actual Value 'x' to be sent by the panel slider/knob
If you create a SysEx string for EACH part, and Each Function, you're gonna end up having 300+ SysEx strings!!

The same applies to Importing old Mixer Maps, where each SysEx String is imported as a separate standalone one.
Or there are Panels you've downloaded (or even the Steinberg stock Panels included with SX), all these extra 100+ SysEx strings can clutter up the Mid Device Manager - all these strings are now listed, not only under Parameter Definitions, but also under Program Change / Midi Bank Commands.

I was helping out another forum member (Hi, Vic!) in merging a Roland JV-1080 XML with the Patch Name Scripts, and I found that the stock panel, has each SysEx defined as a single separate item, which is like 500 SysEx strings!!
PLUS, when you want to add extra strings, you cannot use the Multiple Add function, say I want to add 16 Paramters, with the PART value going from 1-16, I can't be done with these single SysEx strings.

The goal is to define 1 or 2 SysEx string, with substitutable values where it can be defined in the Parameter box.

Below it's an example / procedure of how this could be done.

2006/02

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

SysEx Preparation...

First you need to know what SysEx String you're trying to define or send.
For this you need to look at the device's manual.

For this EXAMPLE, we'll be creating a generic SysEx string for the Roland JV-1080.
For Performance Edit, the SysEx string is :

For Performance Common,
the SysEx string is :

F0 41 10 6A 12 00 00 00 Fn XX CS F7 
 

where
bullet00 00 00 is the address map
bulletFn is the Function Code
bulletXX is the 'x' value.
bulletCS is the Roland Checksum

For Performance Edit,
the SysEx string is :

F0 41 10 6A 12 01 00 1P Fn XX CS F7 
 

where
bullet01 00 1P is the address map
-> 1P  - P is the Part number,
so it's 10 - 1F for Parts 1 - 16
bulletFn is the Function Code
bulletXX is the 'x' value.
bulletCS is the Roland Checksum

For Patch Edit,
the SysEx string is :

F0 41 10 6A 12 02 0P nn Fn XX CS F7 
 

where
bullet02 0P nn is the address map
-> 0P  - P is the Part number,
so it's 00 - 0F for Parts 1 - 16
bulletFn is the Function Code
bulletXX is the 'x' value.
bulletCS is the Roland Checksum

As you can see...
you can define a ''generic'' SysEx string for this like: 

F0 41 10 6A 12 aa bb cc Fn XX CS F7 

where
41 10 6A 12 are fixed, and we can just specify aa, bb, cc, fn in the Parameter box.

This is generally very similar for most devices, the "fixed values" at the front usually specify the manufacturer's ID, the device ID and SysEx editing function commands.

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

Creating the SysEx - The "Create SysEx" Box

You can't actually define the SysEx without doing it in a Parameter pane.

 

So If you don't have any Parameters defined yet, then Click the Add Parameter button.

This will then bring up the Parameter pane

Enter a name for the Parameter you're creating.

 

Then Click the mighty ''Create SysEx'' button!!

A new window will pop up. This is the Create SysEx string window.

Specify a name for this SysEx. Usually I name it as, for example, "Roland JV-1080 SysEx1"

We need to first specify the LENGTH of the SysEx string.

For this example, the Roland JV-1080 string is
F0 41 10 6A 12 aa bb cc Fn XX CS F7 
which has Values:
00 01 02 03 04 05 06 07 08 09 10 11
so we need to set the LENGTH to 12.

When you've set this, you'll notice the Value LIST on the bottom left has Value1, Value2, ..., Value 10.
(Value 0 is F0 and Value 11 is F7, the start and end of SysEx.)

SPECIAL CASE:

This is for most Roland synths only.
Roland Synths have that CS value in the SysEx, which is the almighty "Checksum" value.

The Midi Device Manager SysEx is quite smart, and has included this Checksum calculation. On the right, you need to select Roland Checksum in the Checksum drop down list.

NOTE:
Once you've selected the Roland Checksum, you'll see the Value List at the bottom left has now one less Value, in this case, Value 10 is gone. Because that's the Checksum value.

Now, we need to specify those "FIXED VALUES" in the SysEx String.
A lot of people ran into problem here, they tried to enter the values at the white boxes but they all return to zero.
The fact is, at the moment, all Values are defined as "definable" Values, which are listed at the bottom left value List.
To make them PERMANENT, you'll need to Remove the Value.

Highlight the Value,
then click on "Remove Value"

Then you'll see, this Value is no longer available in the Value List.

By doing this, you have successfully removed this Value's "definable" property.

Once you have removed a Value in the Value List, you can then ENTER a fixed value for this at the top white boxes.

You can either click on the HEX column or the DEC or even the Binary Column to enter either a HEX number, a decimal or a binary value.

In this example, the 1st value we need it to be fixed at 41H.
So Enter "41" at the Hex column under "1".
(Or enter 65 at the Decimal column, or 0100 0001 at the binary)

You'll see that this number STAYS THERE and not return to 00.
(For values that you have not removed, it will return to 00 - not allowing you to 'set' these values)

Repeat the process, until you have removed all the Values that need to be "Fixed Values"

In this Example, we need the 1st 4 values to be fix, so we remove up to (and including) Value 4.

You can see from this screen cap:

41 10 6A 12 are now entered as the FIX Values.

The rest is quite simple now.
For the remaining Values, since we want them to be available in the Parameter box, we leave them in the Value List.

But for convenient sake, we can rename them to something more meaningful or easier.

Highlight on each value.

Double-click on it.

Now you can enter a name.

You can even type in some names that helps you remember what to put later on.

In this example, the PART value is 1P, which can be 10 to 1F, so in decimals, it's 15+1 to 15+16, so I just put (15+P#) as a reminder for myself!

The last value in this case is our 'x' value, so I'll just rename this to x.

For this example, everything is done and you can hit OK to leave the SysEx definition window.

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

CONFIGURING THE VALUES FOR THE SYSEX PARAMETER

Once you hit OK the SysEx window will close and you're back to the Add Parameter pane (Or just the Parameter pane if you 're doing this within an already defined Parameter).

You can see here, that the SysEx string appears as the selected Transmission, with its easy to remember name.

Underneath you can still see the current transmission string.

AND the most important:
You are now presented with a few lines for specifying the VALUES.

By entering appropriate numbers or formulae in the formula item, you can change the SysEx to the exact functions you're trying to send.

NOTE:
Please note that what u enter at the Formula column here are DECIMAL.
You need to check the black HEX string above to make sure the value u entered are correct as HEX.

In this example, I'd like to define my parameter to be, say, the JV-1080 Performance Edit, Part Mix/Eff Send.  This is :
F0 41 10 6A 12 01 00 1P Fn XX CS F7 
where
P=part#
Fn = 0BH for Mix/Eff Level

So in this case,
We want A = 1, B=0

Now as for that PART value...
There are a few ways / tips to do this.
You can either enter a fix value, in this case 16 or 17, ..., 31 - you'll see the HEX above will display 10 to 1F.
Or you can use a formula, (15+1) or (15+2) ... (15+16) since 1 to 16 are the part numbers. (see below)

Or you can enter (15+Part) and then define "Part" as a variable in the sub-node.


In this screen cap example, it is defined as (16+channel) which "channel" is already a midi channel variable defined in the sub-node.

But if you just want this for Part 1, then just enter 16 here, which in HEX is 10, which is the correct number for this part.

And for the Function FN,

Fn = 0B for Mix/Eff Level

0B is HEX
so we enter 11 here as DEC.

You can check on the HEX string above, it changes to 0B.

Last of all, make sure that the X value, is 'x', which is what Cubase sends with the Slider/Fader/Switch.

NOTE:
Currently there is a bug that certain formulae for the 'x' value might not be sent properly (they get calculated correctly but not sent correctly). This is ONLY for the 'x' value. Other mathematical formulae for the other values all work correctly.

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

OTHER TIPS

So that's it.

We've now created a ''Generic'' definable/customizable SysEx string for the Roland JV-1080.
For this ONE SysEx string, all you need it to play around with those A, B, PART, fn values, and u can then define tons of parameters just based on 1 string and not having to have 300+ strings cluttering up your Midi Device.bin!!

TIPS: QUICK CREATING MULTIPLE PARAMETERS

Having a SysEx string like this also helps to speed up creation of multiple parameters, say you have 16 parts so you need 16 paramters with just the Part value different.

Using the same JV-1080 example...

I want to create 16 Paramters for each PART LEVEL, i.e., I want 1 parameter for Part 1 Level, 1 for Part 2 Level, etc, up to Part 16 Level.

For the JV-1080 the SysEx for changing Part Level is again:
F0 41 10 6A 12 01 00 1P Fn XX CS F7 
where
P=part#
Fn = 06H

So for this example, you enter:
"Part Level" as the name,
A=1, B=0, fn=6

For the PART VALUE: Enter (15+P)

NOTE: It'll say Error in the PART result, but this is because the Multiple P is not being fed to the calculations yet.

Then all you need to do is is check
CREATE MULTIPLE

By checking this the Variable Name and Range becomes available.
Type in P here as the Variable Name
and Range is 1 - 16

Then hit OK.

AND VOILA.

You get 16 Parameters created,
they're named "Part Level 1", "Part Level 2", ... , and up to "Part Level 16".

All with values set for A=1, B=0, fn=6.

And in the PART formula, you'll see it says (15+1) for the Part Level 1 parameter, (15+2) in the next, and on the last one it's (15+16).

This really makes creating multiple parameters a lot easier, and YOU CAN'T DO THIS if the SysEx string is fixed with no extra values and hence not configurable.

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

DOUBLE VALUE SysEx

While helping out creating these configurable SysEx strings, there was one SysEx string that needed a double Value.
i.e. value 'x' needs to send out "XX YY" rather than just "XX".

For example, this is the SysEx for selecting a Patch # for the Roland JV-1080:

F0 41 10 6A 12 01 00 1P Fn XX YY CS F7 

P=Part#
Fn = 04H
XX YY  = Patch Number (0-255) or in Binary it's 0000 xxxx 0000 yyyy
CS = Roland Checksum
You see that XX YY are 2 values, so this string is has 13 Values instead of 12.

In this case, when the values cross over from 127 to 128...

Patch #127 = 07H 0FH
Patch #128 = 08H 00H

So if this is in 1-199 decimal terms, it's like XX is the 100th's, and YY is the 00-99

So for this we need to create a new SysEx since it has another value, plus we need to deal with the double value, since Cubase only have ONE x value...

Refer to Creating SysEx above, in this string, we need Length = 13, and Roland Checksum selected.

Then Delete the Value 1 to Value 4 and enter the FIX Values at the white boxes, also rename Values 5 to Value 8.

Now we're left with the last 2 values. These are our XX YY Values.
We need to "combine" them to ONE Value, 'x', but define it here to so that it sends out YY values then nudges to the XX value when it crosses over the 127 number.

Next, we need to remove Value 9.

To do this, again, highlight Value 9, and hit the Remove Value button.

Now, to give a better idea of what we're doing, if you look at the white boxes, under Value 9 and 10, you'll see in the lowest row, it says 0/7 for Value 10.
Also look at the NORMAL VALUE, it says Number of Bytes = 7, Bits Per Byte = 7

Click on Number of Bytes and increase this, to say 14.
You'll notice 2 changes:
1. In the last row, under the Value 9 Column, it changes to 1/7
2. On the bottom right, you see that Byte Position 1 is now available.

Also, take notice of the DECIMAL ROW under Value 9 and Value 10, they're now 0xxx xxxx and 0xxx xxxx. Looks familiar? Kind of, since we want 0000 XXXX and 0000 YYYY.

You see, this is for 7 Bits per Byte. (so u get the 0/7 under Value 10).
And since we specified Number of Bytes = 14, now the 1/7 is under Value 9.
Note that these can be swapped around using the Byte Position on the right.

But we want 0000 XXXX and 0000 YYYY, it's 4 and not 7.
So we change Number of Bytes = 8, Bits Per Byte = 4

Now you can check in the Decimal row under Column Value 9 and Value 10, they have changed to 0000 XXXX

The Byte Position selection lets you select which is the 0/4 and which is the 1/4.

You can change these in the black boxes, so that if you want the increment to go from 9 to 10 then u put 9 at position 0 and 10 at position 1.

But in this example for the JV-1080, the next large number is Value 9, so our Byte Position 0 is at Value 10.

You can always check which is which, at the last row in the white box above, in this case, notice where the 0/4 ad 1/4 are placed according to the Positions set.

Well, that's it, just hit OK, and what do we have...

You can see we have here a new SysEx, again, you can specify the values for A, B, PART and fn here.

Notice that the range for the 'x' value is now 0-255!!

Now just enter 127 and then 128 here to double check and see if the HEX strings displayed are correct or not.

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

Final NOTES

So that's it.

I hope the info above can help anyone create their proper SysEx strings.

Last of all I should mention 2 important notes:

1. There is no way to delete or edit a defined SysEx string.
So, if you got it wrong, you have to start and create a new one instead.

2. You can 'bulk' delete all unnecessary SysEx strings, well, in some way...
Basically if you delete your Midi Device.bin file located in the Cubase Application Data folder, %APPDATA%/Steinberg/Cubase SX 3/
- where %APPDATA% is usually C:/Documents & Settings/<user>/Application data/

When you delete the Midi Device.bin file, Cubase will lose all these references to any Panels loaded or imported. And it will re-create a new fresh Midi Device.bin. the next time it starts (and re-saved on next quit).

So... if u have tons of SysEx strings you now replaced with the 1 string method above and want to get rid of those unnecessary strings, this is what u do.
- Export the new XML, with only references to the new SysEx string(s).
- quit Cubase.
- Delete Midi Device.bin
- Start Cubase, then in Midi Device Manager, re Import the XML you've saved just now.
Now, you'll see the SysEx available are just those referenced by the XML, all previous unused SysEx strings are gone.
 

 

Q U I C K   J U M P

  | Top | Introduction | Preparation | Create SysEx | Config Values |
| Other Tips | Double Value SysEx | Notes |

BACK TO DEVICE PANEL HELP PAGE  |  BACK TO DEVICE PANEL MAIN PAGE

 

 

 

CONTACT INFORMATION
Don't email me about any panels not working properly or asking for a bugfix!
Honestly, I made these for my own use and I thought
I should share them for anyone who can also make use of them!
But, in any case...

Cheers!

Home Cubase SX Panels SX Panel Help XML Copying Parameters Copy Create SysEx