Synth Forum

Notifications
Clear all

HOW TO: Send SysEx Commands To Montage

3 Posts
2 Users
0 Likes
4,281 Views
Jason
Posts: 7905
Illustrious Member
Topic starter
 

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
http://www.midiox.com/mfaq.htm#whyNoSysEx
(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
https://www.snoize.com/MIDIMonitor/
or
http://www.snoize.com/SysExLibrarian/

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 Montage connected to a PC/Mac using a USB 2.0 cable between "USB To Host" on Montage and a standard USB connector (type A) on your PC.

3) Montage 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 have the Data List which matches your firmware version open. 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 "montage_en_dl_f0.pdf". Page number references to the Data List will be using that document. Pages 183-217 cover the information you need to construct SysEx messages. Page 183-186 covers how to construct the general message and pages 187-217 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 187-216, we will need to send Montage something called a "Parameter Change" System Exclusive Message. When we send this message from a computer, Montage will be RECEIVING this message. Therefore, on Page 184 of the Data List - look at "(2) Receive Flow". This summarizes, at a high level, all the various MIDI messages Montage can receive. We are interested in SysEx (System Exclusive). The very bottom of this "tree" we see "SYSTEM EXCLUSIVE MESSAGE" and "". This line with "" is the one of interest as we want to change a single parameter. Incidentally, if you want to request Montage to respond with the current setting of a parameter (instead of changing the parameter), you would use the "" message.

1.a) The "" format shows: "F0H 43H 1nH 7FH 1CH 02H 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 185, section (3-5-3-1 "NATIVE PARAMETER CHANGE, MODE CHANGE" ) here we see the documentation for each piece of the ""

1nH (first variable value): Device number. In your [UTILITY] settings, you are able to set Montage to a specific device number. The purpose for this is to deal with MIDI messages when you have more than one Montage connected on the same MIDI bus. By default, Montage is set to respond to any device number. If you have changed your Montage device number (which most people should not have) then "n" should be replaced with your Montage'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 Montage 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 191, 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 191. 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 Montage 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 02 00 00 3B

F7

Where

is a number from 00 to 02 depending on the sustain pedal selected.

The 3rd byte ("10" ) assumes you have not changed Montage's MIDI device number which is only useful in a scenario where you have multiple Montages. Modify this to "11" if your device is #1 or "12" if device 2, and so on.

After the "7F 1C 02" are 3 address bytes. 00,00,3B. This is the high/mid/low address we discussed.

Then comes the

. If we wanted to change the pedal type to FC4A/FC5, then the

would be 02.

All other values (F0 43 ... 7F 1C 02 ... 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 02 00 00 3B 02 F7

ANOTHER EXAMPLE:

Data List Page 194, 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 02 30 40 1F

F7

Where

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 02 30 40 1F 20 F7

Where the

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.

 
Posted : 19/02/2018 5:02 pm
Joel
 Joel
Posts: 529
Honorable Member
 

Thank you Jason, nice work 😉

 
Posted : 19/02/2018 5:20 pm
Jason
Posts: 7905
Illustrious Member
Topic starter
 

Yes - RPN is supported. Use the same reference. Look at page 183-186 for the RPN details.

Here's some general background for others who may not know: http://www.philrees.co.uk/nrpnq.htm

The RPN commands supported are:

Pitch Bend Sensitivity, Fine Tuning, Coarse Tuning, and Reset

It's a "CC" (BnH where n=MIDI channel number) followed by 64H (100 decimal) for RPN.

The details on the left-hand side of page 184 give the full format of these commands. You can transfer most of what was discussed for SysEx to figure out how to "fill in" the information for RPN. There's less to "fill in" since there are only a limited number of specific commands.

Page 185 (lower left) breaks down the entire RPN message:

Starts with:
BnH (n=MIDI channel. 0=MIDI channel 1 through F=MIDI channel 16)
64H (meaning RPN address LSB)
can be any of following: 00H, 01H, 02H, or 7FH
65H (meaning RPN address MSB)
can be any of following: 00H or 7FH. 7FH is for Reset, 00H is for all others
06H (meaning data MSB)
see table on this page (185) for valid data meanings and ranges for each command
26H (meaning data LSB)
see table on this page (185) for valid data meanings and ranges for each command

Maybe RPN supports more than what's documented - but the list of supported (documented) commands is very short.

 
Posted : 20/02/2018 12:29 am
Share:

© 2024 Yamaha Corporation of America and Yamaha Corporation. All rights reserved.    Terms of Use | Privacy Policy | Contact Us