BEFORE YOU BEGIN (be sure to have):
1) A program on your computer capable of sending SysEx for you. There are several choices - including programming your own webpage with a MIDI interface or a C/C++ program. However, the suggestion is to use a program that is already "off the shelf" with no programming needed.
1.a) Suggestion for x86/Windows PC: MIDI-OX
(above for setup)
Then, within MIDI-OX, click on "View->SysEx". From the Command Window, you can type in SySex data using hex (F0 ## ## ## ## ## ... F7) where "##" is your hex data and each SysEx command begins with "F0" and ends with "F7". Then, use the menu command "Command Window->Send Sysex" to send your SysEx command(s) typed in.
1.b) Suggestion for MAC: Use Snoize MIDI Monitor
SysExLibrarian I believe you have to create a SYX file with your hex data and "feed" it into the utility. I do not have a Mac to provide very detailed information.
2) Your MODX connected to a PC using a USB 2.0 cable between "USB To Host" on MODX and a standard USB connector (type A) on your PC/Mac.
3) MODX should be in USB MIDI mode. On the top line of your display, if the keyboard is in MIDI-DIN mode, there will be a circle with dots in the middle. If in USB mode, you will see the symbol for the USB port which looks sort of like a pitch fork.
4) Be sure to reference the Data List which matches your firmware. The Data List contains all of the published SysEx commands and information on how to construct a valid message.
CREATING A SYSEX MESSAGE:
Preface: The latest firmware version is v2.0 and the associated Data List is "modx_en_dl_c0.pdf". Page number references to the Data List will be using that document. Pages 186-220 cover the information you need to construct SysEx messages. Page 186-188 covers how to construct the general message and pages 190-220 cover all the parameters and what to "fill in" to the general message to change different parameters.
1) Assuming you want to change a single parameter listed on a table between page 190-220, we will need to send MODX something called a "Parameter Change" System Exclusive Message. When we send this message from a computer, MODX will be RECEIVING this message. Therefore, on Page 187 of the Data List - look at "(2) Receive Flow". This summarizes, at a high level, all the various MIDI messages MODX can receive. We are interested in SysEx (System Exclusive). The very bottom of this "tree" we see "SYSTEM EXCLUSIVE MESSAGE" and "<PARAMETER CHANGE>". This line with "<PARAMETER CHANGE>" is the one of interest as we want to change a single parameter. Incidentally, if you want to request MODX to respond with the current setting of a parameter (instead of changing the parameter), you would use the "<PARAMETER REQUEST>" message.
1.a) The "<PARAMETER CHANGE>" format shows: "F0H 43H 1nH 7FH 1CH 07H ahH amH alH ddH ... ddH F7H"
That's the general format of any parameter change. Breaking that down:
The format is showing hex numbers separated by spaces. The capital "H" after two characters is denoting hex. "F0H" would be entered into MIDI-OX as "F0" since MIDI-OX assumes hex and does not need the "H" to tell it to use hex. All hex numbers in the list with ALL CAPITAL LETTERS should be entered in verbatim. If the hex digit has lowercase letters (like 1nH has a lowercase "n", or "ahH" has lowercase "ah" ) then this means we will fill in something here replacing the lowercase letter(s) with hex. These are not verbatim, but "variable" values that can change for every message. Breaking these down:
If we look at the data list page 188, section (3-5-3-1 "NATIVE PARAMETER CHANGE, MODE CHANGE" ) here we see the documentation for each piece of the "<PARAMETER CHANGE>"
1nH (first variable value): Device number. In your [UTILITY] settings, you are able to set MODX to a specific device number. The purpose for this is to deal with MIDI messages when you have more than one MODX connected on the same MIDI bus. By default, MODX is set to respond to any device number. If you have changed your MODX device number (which most people should not have) then "n" should be replaced with your MODX's device number. For everyone else, use "0". I will assume that "0" is appropriate for this tutorial - but be sure to adjust if you're in the minority where you have modified your MODX to respond to a specific device number.
ahH (2nd variable value): Each parameter in the MIDI Data List has a MIDI address. There are 3 parts to the address (3 hex numbers). "Address High", "Address Medium" (or "Address Middle" ), and "Address Low". This variable value is "Address High". We can look at a random parameter to get a feel for how to fill in the right value for "ahH" (address high hex). Look at page 194, the last parameter "Sustain Pedal Select". In this table, the 1st 3 columns are Address High=1st column, Address Medium/Middle=2nd column, Address Low=3rd column. For "Sustain Pedal Select", we see the 3rd column has "3B". The 1st two columns are blank. "3B" is Address Low - we need to look back in the table to find what the Address High should be. Scrolling up, we see the first (non-header) row in this table shows the first two columns as "00 00". Therefore, all the data below has the same Address High=00 and Address Medium/Middle=00. Therefore, we would use "00" for the "ahH" value (Address High).
amH (3rd variable value): See above. Address Medium/Middle. For our "Sustain Pedal Select" example, the 2nd column in the table - the value should be 00.
alH (4th variable value): See above. Address Low. For our "Sustain Pedal Select" example, the 3rd column in the table - the value should be 3B
ddH (5th through ?? variable data value or values): This is the (or are the) data value(s). Each parameter can have one or more data value. The number of data values you have in your SysEx command should match the specification for the parameter you are changing. Most have only one data value - but some have more than one value. Back to our example "Sustain Pedal Select" on page 194. The 4th column of this table is labeled as "Size". "Size" tells you how many data values this parameter is expecting. Here, we see the "Size" is "1" - so there will only be one data value. The 5th column of the table shows us what the valid range of values are. Here, we see the valid range is between 00 and 02. The 7th column tells us what those values mean. Here, I believe the documentation is weak. I would like to see explicit information such as "00=FC3A (Half On), 01=FC3A (Half Off), 02=FC4A/FC5". Instead, we are left guessing. My assumption for these tables is that when there is a list, the list is in order from lowest value in valid range to highest value. Therefore, I assume for this:
00 (lowest value in range) = FC3A (Half On)
01 = FC3A (Half Off)
02 (highest value in range) = FC4A/FC5
The 8th column in the table tells you what the default value is when MODX is initialized. The default for this example is "00" or "FC3A (Half On)"
2) Now use this information to construct a SysEx message. We will change the sustain pedal type from the default value of 00 to something else. Since MIDI-OX and most software does not need the "H" to indicate hex, we will strip that off. Here is the generic message for the sustain pedal:
F0 43 10 7F 1C 07 00 00 3B <dd> F7
Where <dd> is a number from 00 to 02 depending on the sustain pedal selected.
The 3rd byte ("10" ) assumes you have not changed MODX's MIDI device number which is only useful in a scenario where you have multiple MODXs. Modify this to "11" if your device is #1 or "12" if device 2, and so on.
After the "7F 1C 07" are 3 address bytes. 00,00,3B. This is the high/mid/low address we discussed.
Then comes the <dd>. If we wanted to change the pedal type to FC4A/FC5, then the would be 02.
All other values (F0 43 ... 7F 1C 07 ... F7) are verbatim values and will be the same for every parameter change message.
Therefore, the full SysEx command to change the sustain pedal to FC4A/FC5 would be:
F0 43 10 7F 1C 07 00 00 3B 02 F7
Data List Page 197, left-hand side about mid-way down is "Performance Pan" - this is a Performance Common level parameter.
The generic message:
F0 43 10 7F 1C 07 30 40 1F <dd> F7
Where <dd> of 40, which is the default, is center. Value of 01 is pan hard left and value of 7F is pan hard right. So if we wanted to pan somewhere in the middle between hard left and center:
F0 43 10 7F 1C 07 30 40 1F 20 F7
Where the <dd> is 20 (hex) which is half-way between hex 01 and hex 40.
The address low/mid/high is 30/40/1F. Use the same method as the Sustain Pedal example to find what the address high and address medium/middle values should be.