I am trying to better understand what the exact message should be for sending to a Yamaha CL5 soundboard via SysEx. I am new to MIDI, so please forgive the elementary questions.
My message so far to request the current value
[code type=markup]F0 43 3n 3E 19 01 00 37 00 00 cc cc F7[/code]
My message so far to change the current value
[code type=markup]F0 43 1n 3E 19 01 00 37 00 00 cc cc dd dd dd dd dd F7[/code]
My understanding:
"n" is the midi channel number(0-15)
"cc cc" is the channel in hexadecimal
"dd dd dd dd dd" is the value in hexadecimal
My questions are:
1) Confirming that "n" is the MIDI channel number? (0-15)
2) What do I put for the "cc cc"? If the channel is channel 1, then the docs show "0", but do I convert that to hex? What if it's only 2 characters?
3) What should my "dd dd dd dd dd" be if I am wanting to send it a value of 25, for example?
4) Will I receive a confirmation that the message was received by the board? (Kind of like 200 message in web programming?)
5) When I send the request message, what format should I expect the response to be?
Thanks for any help. Please don't hesitate to ask for any clarifying questions....as I said, being new, I don't know what I don't know.
Simplified Documentation Here:
Yamaha CL5 Documentation Link: Documentation
Page 192-199 - MIDI
Page 37-43 - MIDI Data Format AT THE BACK OF THE DOCUMENT
Page 49 - MIDI Implementation Chart AT THE BACK OF THE DOCUMENT
Page 27-30 - NRPN Parameter Assignments *** AT THE BACK OF THE DOCUMENT
MIDI Parameter Change List: Download(Zip File with 3 CSVs)
I spent several hours looking this over as well and it was helpful: SysEx Tut
Hello,
This is rather a pile of data to look at, but I'm not at all sure about what is important?
First point, in case you don't know, the Eddie Lotter who wrote the TutSysEx piece you attach is one of the resident experts here, so you may well get info from him directly.
Regarding the specific message, it seems a little strange to get Channel Numbers in the header of the SysEx message. Are the messages you're hoping to send supposed to be specific to a channel in the CL, i.e. you may need to send the same message, but with different data, to various different channels on the receiving device (i.e. the CL)? The CL seems to have a LOT of parameters, and various seems to be MIDI controllable, so this is possible. Then again, a quick look at the main manual suggests that you need to make a setting as to which channel is used. That might refer to using a keyboard to send musical data (a keyboard might send data on one channel only).
Maybe you could explain how you'll be using the CL, and how it will be linked, and is there a computer (and software) involved in the setup?
Geoff
My initial thoughts on your specific questions:
You may need to be sending different messages to each 'soundboard' (I assume that this is each control module within the mixer)? Each one may be assigned to a different midi channel. Are there just 16 of them? Is that say 16 mono ones, or 8 stereo pairs, or combination? Hence the first 'channel' data.
I think the cc cc is something else. The table you show has a 'CH table 01'. This may show a range of values for different things, CC CC may refer to a value from that table?
There is another table CH Table 02, this seems to refer to a (possibly ?) much larger data value - the dd dd dd dd dd etc refers to this data - I guess?
Normally, such numbers would be hex, and I'd expect that the digits would be MSB first, and in hex. So for a two byte data, cc cc, then 0 would be 00 00 and 1 would be 00 01 and 256 would be 01 00. But this might be defined differently. Some values may need to be, say, 1000 - 0 - -1000, the Table 02 may define how these are entered.
I would not expect you to get a confirmation message, but this is possible. More normal, I'd expect, is that an indicator on the CL5 might flash (or similar) to indicate a good/bad data message.
A 'data dump message (i.e. to confirm the existing data) maybe the same format, and you may need to use the same Tables to translate the returned data?
Does this make sense?
Geoff
Unfortunately my experience is with Roland devices, I am not familiar with Yamaha devices.
What might be helpful to you is on page 192, where it says:
When specific events (fader, knob, or key operations, changes in system settings or user
settings) are executed, “Parameter Change” SysEx (system exclusive) messages can be
transmitted to an external device.
What you can do is use a MIDI sequencer or DAW to record the MIDI messages transmitted from the CL 5 when you change the controls on it. That will help you identify what messages to use and what values to use in those messages.
If you still have trouble achieving what you want, I recommend that you find a Yamaha specific forum to ask your questions because you are more likely to reach users of the CL 5 there than here.
Thanks @Geoff, and sorry for the data overload.
This is rather a pile of data to look at, but I'm not at all sure about what is important?
I have added a "Simplified Documentation" that pulls the relevant information. I'm pretty confident that after I figure 1 of them out, the same rules will apply to all.
Are the messages you're hoping to send supposed to be specific to a channel in the CL, i.e. you may need to send the same message, but with different data, to various different channels on the receiving device (i.e. the CL)?
Yes, so for instance, I want to get the fader level of Channel 1 on the sound board. To do this, I would use the "kFader" Index on the "Simplified Documentation.
The CL seems to have a LOT of parameters, and various seems to be MIDI controllable, so this is possible.
Yes, there are roughly 128 channels and each channel has probably 40-50 parameters that can be set.
Maybe you could explain how you'll be using the CL, and how it will be linked, and is there a computer (and software) involved in the setup?
So, the end goal is to send a midi request to the sound board from a raspberry pi to change a value and another midi message to request current values. In my 'Simplified Documentation" you can see the "Parameter Change Format" which will change the value on the sound board and the "Parameter Request Format" which will send a request to the sound board to have the sound board send me back it's current values.
You may need to be sending different messages to each 'soundboard' (I assume that this is each control module within the mixer)? Each one may be assigned to a different midi channel. Are there just 16 of them? Is that say 16 mono ones, or 8 stereo pairs, or combination? Hence the first 'channel' data.
This is slightly confusing because of the 'channels' terminology since a sound board has channels and midi also has channels. I may not be using the correct terminology, but I believe MIDI has 16 Program Channels and that is what I was referring to with the 16....the sound board has 128 channels.
I think the cc cc is something else. The table you show has a 'CH table 01'. This may show a range of values for different things, CC CC may refer to a value from that table?
Yes, that is correct, but this is how new I am to MIDI...I'm not even sure how to use that value in the place of "cc cc"?
There is another table CH Table 02, this seems to refer to a (possibly ?) much larger data value - the dd dd dd dd dd etc refers to this data - I guess?
Same as above...I believe that is correct, but don't know how to utilize it.
Normally, such numbers would be hex, and I'd expect that the digits would be MSB first, and in hex. So for a two byte data, cc cc, then 0 would be 00 00 and 1 would be 00 01 and 256 would be 01 00. But this might be defined differently. Some values may need to be, say, 1000 - 0 - -1000, the Table 02 may define how these are entered.
Ahhhhhh! I think this is the missing link in my mind! So, based on this, the request could look like the following?
[code type=markup]F0 43 3n 3E 19 01 00 37 00 00 00 01 F7[/code]
Thanks @Eddie Lotter,
What you can do is use a MIDI sequencer or DAW to record the MIDI messages transmitted from the CL 5 when you change the controls on it. That will help you identify what messages to use and what values to use in those messages.
This is a great idea and might help bridge the gap for what I'm trying to do.
If you still have trouble achieving what you want, I recommend that you find a Yamaha specific forum to ask your questions because you are more likely to reach users of the CL 5 there than here.
That's the down side is that I have already asked on Yamaha forums, but no luck on any response. What you and Geoff have mentioned so far has been 10 times more helpful already.
As I understand the way this might work, and the tables, your new message would be trying to request the setting for 00 01 which translated by Table 01 would mean INPUT 02. You don't show a Channel setting, not sure if this matters?
As Eddie suggests, one way forward would be to set up your system so that the CL5 sends the data OUT, and a DAW or whatever on the PC receives the midi/SysEx data. Then you implement a number of (useful ?) setting requests, and changes, on the CL, and make a note as to what they are.
You then relate the SysEx messages received (and recorded ?) on the PC to what they were supposed to be, and relate the data/table components to the settings you were trying to make, and this should be a BIG help re working out how this all functions.
If you can save the received data as a midi file, or even as raw SysEx, then you could attach the data to your message and I (we) could have a look at the data directly.
Just remember that the data system may be peculiar, even obscure, certainly complicated, but there will be a logical structure to it and it's just a matter of understanding that structure. Just like SuDoKu, or something like!!
Geoff
After looking over the documents, here is my understanding:
[quotePost id=13067]1) Confirming that "n" is the MIDI channel number? (0-15)[/quotePost]
Yes, on the CL5, the n in that spot matches the MIDI Channel number selected in the MIDI SETUP page. Note that MIDI Channels are values from 1 to 16, but n is a hex digit from 0 to F (decimal 0 to 15). MIDI Channel 1 corresponds to the n value of hex 0 (decimal 0), up to MIDI Channel 16 corresponds to the n value of hex F (decimal 15).
If you ever use other Yamaha devices, note that in general, for Yamaha System Exclusive messages that start with these patterns:
F0 43 0n...
F0 43 1n...
F0 43 2n...
F0 43 3n...
the n part is called a "Device Number". This is usually a separate kind of ID number that doesn't correspond to a MIDI Channel. However on the CL5, the Device Number in the System Exclusive messages is the same as the MIDI Channel number selected in the MIDI SETUP page.
In the Reference Manual, see PDF page 199, right column: "On the CL series console, you can use a type of system exclusive messages called 'Parameter Changes' to control specific events", then the note at the bottom of the column says "Parameter changes include a 'device number' that specifies the transmitting or receiving device. The transmit (Tx) channel and receive (Rx) channel specified on the MIDI SETUP page are used as the device number."
And on PDF page 326 (Data List page 39), in the middle column, the data format description shows items like "1n n=0-15 (Device number=MIDI Channel)" and "3n n=0-15 (Device number=MIDI Channel)" for the Device Number spots.
[quotePost id=13067]2) What do I put for the "cc cc"?[/quotePost]
In the Reference Manual, PDF page 326 (Data List page 39), middle column, describes the overall basic format of the Parameter Change System Exclusive messages for things like changing knobs and sliders ("CURRENT SCENE"):
STATUS 11110000 F0 System exclusive message
ID No. 01000011 43 Manufacturer's ID number (YAMAHA)
SUB STATUS 0001nnnn 1n n=0-15 (Device number=MIDI Channel)
GROUP ID 00111110 3E Digital mixer
MODEL ID 00011001 19 CL Series
DATA Category 0ccccccc cc
DATA 0eeeeeee eh Element no High.
0eeeeeee el Element no Low.
0iiiiiii ih Index no High.
0iiiiiii il Index no Low.
0ccccccc ch Channel no High.
0ccccccc cl Channel no Low.
0ddddddd dd Data
: :
EOX 11110111 F7 End of exclusive
The "cc cc" spots in the spreadsheet correspond to the "Channel no High" and "Channel no Low" spots.
[quotePost id=13067]If the channel is channel 1, then the docs show "0", but do I convert that to hex?[/quotePost]
You will be sending MIDI messages as a sequence of bytes. Each byte is a value from decimal 0 to 255, or hex 00 to FF. Depending on what is easier for you or what programming langauge or library you are using, you might be able to specify the byte values in decimal (0 to 255) or hex (00 to FF).
[quotePost id=13067]What if it's only 2 characters?[/quotePost]
The "High" and "Low" terms mean that the high bits of the value are sent in the first byte.
Be aware that the contents of System Exclusive messages must always have the highest bit of each byte set to zero. In other words, the bytes are always values from decimal 0 to 127, or hex 0 to 7F. So if you have to send a value over 127, it will have to be split into multiple bytes.
For the Channel value, it looks like the value can only be decimal 0 to 95, so I think the first byte will always be zero.
value bytes decimal bytes hex meaning
0 0 0 00 00 INPUT 01
: : : : : :
71 0 71 00 47 INPUT 72
72 0 72 00 48 ST INPUT 1L
: : : : : :
87 0 87 00 57 ST INPUT 8R
88 0 88 00 58 reserve
: : : : : :
95 0 95 00 5F reserve
[quotePost id=13067]3) What should my "dd dd dd dd dd" be if I am wanting to send it a value of 25, for example?[/quotePost]
The "CURRENT SCENE, SETUP, BACKUP, USER SETUP" format doesn't show "High" or "Low" labels on the data bytes, but I predict it will also put the high bits in the first byte. For comparison, look at the "FUNCTION CALL - LIBRARY ATTRIBUTE" format on PDF page 328 (Data List page 41) which has data bytes like this:
0000dddd dd Data28~31bit
0ddddddd dd Data21~27bit
0ddddddd dd Data14~20bit
0ddddddd dd Data7~13bit
0ddddddd dd Data0~6bit
Since that format sends the high data bits first, it seems likely all the other formats will send the high data bits first also.
For the Input Fader data value, the value can be from 0 to 1023. So the first three bytes will always be zero:
value bytes decimal bytes hex meaning
0 0 0 0 0 0 00 00 00 00 00 -infinity dB
: : : : : : : : : : : :
127 0 0 0 0 127 00 00 00 00 7F -59.20 dB
128 0 0 0 1 0 00 00 00 01 00 -59.00 dB
: : : : : : : : : : : :
255 0 0 0 1 127 00 00 00 01 7F -36.80 dB
256 0 0 0 2 0 00 00 00 02 00 -36.70 dB
: : : : : : : : : : : :
383 0 0 0 2 127 00 00 00 02 7F -24.00 dB
...
896 0 0 0 7 0 00 00 00 07 00 3.65 dB
: : : : : : : : : : : :
1023 0 0 0 7 127 00 00 00 07 7F 10.00 dB
Some value types allow negative values. I don't see any specific documentation how negative numbers are encoded, but I guess the CL5 will use two's complement encoding, with 32 data bits split into five system exclusive bytes. For example, for the Pan value (PRM TABLE #02):
value bytes decimal bytes hex meaning
-63 15 127 127 127 65 0F 7F 7F 7F 41 L63
: : : : : : : : : : : :
-1 15 127 127 127 127 0F 7F 7F 7F 7F L1
0 0 0 0 0 0 00 00 00 00 00 Center
+1 0 0 0 0 1 00 00 00 00 01 R1
: : : : : : : : : : :
+63 0 0 0 0 63 00 00 00 00 3F R63
[quotePost id=13067]4) Will I receive a confirmation that the message was received by the board? (Kind of like 200 message in web programming?)[/quotePost]
I hypothesize that either:
A. If the Tx setting is on, the CL5 will send the same Parameter Change message back to indicate the parameter has changed.
or
B. If the CL5 doesn't specifically send a confirmation message, you can send a Request message for the setting you just changed to force it to send back a Parameter Change message and confirm the setting is now at the new value.
[quotePost id=13067]5) When I send the request message, what format should I expect the response to be?[/quotePost]
When you send a Request message, the CL5 will send a Parameter Change message. In other words, the CL5 will send a message back to you in the same format you would send to the CL5 to change the value.
From the Reference Manual, PDF page 326 (Data List page 39), left column:
PARAMETER CHANGE [...]
Transmission
If [PARAMETER CHANGE Tx] is ON, and you edit a parameter for which CONTROL CHANGE transmission has not been enabled, a PARAMETER CHANGE will be transmitted with the [Tx CH] as its device number.
In response to a PARAMETER REQUEST, a PARAMETER CHANGE will be transmitted with [Rx CH] as its device number.
Thank you guys a ton!
I'm sorry for the delay as I came down sick and just now looking back at this. I will report back with my findings.
[quotePost id=13254]I'm sorry for the delay as I came down sick and just now looking back at this. I will report back with my findings.[/quotePost]
No worries, your health is more important. 🙂