Logic Pro (X) Creating SysEx Faders to control Roland RD-700nx Features

AlexDingley

Logician
Hey there! I'm savvy on Logic, overall... but have never really gotten suuuuuuuuper deep into the environment's specialized features (using faders / transformers / etc) but I've had some small successes with these lately. One new challenge is that I'm trying to create some objects to control the features of my Roland RD700nx piano that aren't accessible from the standard CC's and aren't even super-accessible in the UI of the keyboard itself.

For instance... there's a handful of real-time knobs on the front (sadly, they don't send ANY midi data) but they control a decent on-board Reverb / 4-band EQ / Multi-Band Compressor. It'd be great to be able to sweep the Hi-EQ Band's frequency via a Logic Fader object. it'd also be nice to be able to turn off these features via 'button' objects in logic, etc.

  1. So I've opened up the MIDI Implementation Manual (linked here)
  2. And I've got a Multi-Instrument in Logic, that successfully communicates (notes, bank & program changes) to my Roland RD-700 (I had to use custom bank change messaging, but that wasn't too hard)
  3. I created a Fader Object
  4. I set the fader object to 'output' SysEx (I'm not sure if I have to specify a midi channel)
  5. I'm uncertain of the "-1" (first byte) choice I should be making
  6. I'm confused about how to ensure the range I'm defining corresponds to the right specific SysEx messages
Here's the segment of the MIDI Implementation Manual that I'm focused on. It seems to indicate the Hex Bytes to control the Roland RD700nx onboard Reverb in more detail than you can from the front panel. The way I'm reading this... they "tell you" the string across the top of the snippet that I've provided... then, below, they fully explain the string, line-by-line... and it seems the ppH and vvH bytes are how I specifically attack the "reverb parameter" and "Parameter Value"... but I have two questions about this. A) do I just plug them in as the very next byte pairs after the set of 5 "01"s in a row? B) If I want the dial to scroll through the 0-127 values... how can I set this with a single SySex String? (or wait... do I have to create 128 entries in this little editor page? One for each of the control values in the desired range?)

Screen Shot 2020-07-29 at 10.02.53 PM.png

I'm also attaching a screen-shot from Logic, hopefully someone more savvy than I can help get my sorted with this — or at least clue me in to something fundamental that I'm missing:
Screen Shot 2020-07-29 at 9.29.24 PM.png
 
You are almost there.
No, the SyEx string does not require all 16 byte positions. It requires F0 (Start of File) and F7 (End of File) and in between exactly what your piano needs. There is no rule for the length. The MIDI channel does not matter.

This should work:
Set the fader output to SysEx and the fader’s number range according to the parameter range (0-8 for Reverb Type, 0-127 for Reverb Time). Open the SysEx editor, put in your string between F0 and F7 and delete everything else – except the last position, which reads "VAL". This is where the fader sets its own value, your variable, your vvH. The second last position is your ppH which indicates that you mean Reverb Type (00) or Reverb Time (01). You need two faders, one for Reverb Type and one for Reverb Time.
You must activate the line before you close the editor, otherwise the fader does not work!
Untitled_3_logicx_and_Untitled_3_-_Standard_0_-_Environment_and_Logic_Pro_X_-_Creating_SysEx_F...png

If you haven’t yet, install Snoize MIDI Monitor. This handy utility shows you almost all MIDI from and to your computer, including SysEx. Freeware. Here is the output from the two faders, I've sent them to an IAC bus.
Untitled.png
 
Upvote 0
You are almost there....
This should work:
...Open the SysEx editor, put in your string between F0 and F7 and delete everything else –
You must activate the line before you close the editor, otherwise the fader does not work!

This reply seems like it’s ultimately going to be the secret sauce that helps me get there. Thanks Peter! That said, there are two parts that still have me stumped;
  1. “Put in your string between F0 and F7 AND DELETE EVERYTHING ELSE” — I was successfully able to delete the unnecessary byte pairs ONCE, but I can no longer get the string of byte pairs to respond to my mouse clicks... I don’t know how I accidentally got it to work that one time, but I can’t repeat it. Is there a magic trick to this / a bug in 10.5.1?... Is it a matter of exactly-how-widely you open the different columns of the SysEx editor pane? (Video of me trying/failing to edit SysEx data)

  2. “You must activate the line.” — do you simply mean that I have to have the Sysex Command highlighted in Blue when I close the SysEx editor pane? If so... man that’s an easy thing to miss, but okay.

  3. Also... I’m curious if I have the ‘Checksum’ right (setting it to “Roland”) and the ‘Position’ and ‘Value’ settings at the bottom of the editor window. I gather that some of that can be derived from the MIDI implementation manual for the Roland keyboard, but it’s not all so clear-cut in the sections I’ve read (rather, the few that I’ve understood).

  4. I did manage to the MIDI Monitor app running and I have it spying on the MIDI out to the Roland, and it's now successfully showing that MIDI SySex messages are leaving the Mac on that MIDI port. (Video of data being sent)

 
Upvote 0
AHHHHHh! scratch #1 off of the above list — after finally putting the 11wk old baby down to bed for the night, I've had more than 30 seconds to put towards this trouble-shoot again. I realized that it was a matter of patience after the single click. I kept double clicking (but I swore I tried single-clicks earlier, to no avail). Anyway— I'm NOW fully able to manually type in the SysEx byte pairs. But I'm still not getting any noticeable response from the Roland with any of these fader movements. (edited a typo *NOW instead of "not").
 
Last edited:
Upvote 0
ad 1) Editing SysEx data:
For me a single click on the code works.
You may try alt-click.

ad 2) Activation before editor close:
Yes, make it blue.

ad 3) The fields Checksum, Position and Value:
Those fields are not necessary in this case. Leave them at their default values.
Btw, "Position" is the position where you want the variable to be. "Auto" is the same as "last", you may need another position for other tasks.

ad 4) sending SysEx:
Your sent lines are not correct. Each string should have 13 bytes, not 14. And only the column before F7 should have moving values. I think the "Value" field has some wrong setting, therefore you have 2 changing values in your string and one byte more. Set the fields to default (Checksum off, Position auto, Value auto) or make a new fader.
 
Upvote 0
ad 1) Editing SysEx data:
For me a single click on the code works.
ad 2) Activation before editor close:
Yes, make it blue.
ad 3) The fields Checksum, Position and Value:
Those fields are not necessary in this case. Leave them at their default values.
ad 4) sending SysEx:
Your sent lines are not correct.

Again, thank you so much for helping to clarify! Setting "checksum" back to 'none' removed the SUM from the string, and I was able to then correct my strings to the proper amount of bytes.

Here are the screen-shots of my SysEx Sending:

Reverb Type:
Reverb Type.png

Reverb Time:
Reverb Time.png

The trouble is... The Roland isn't responding to these messages, and now I'm trying to figure out if it's something that's configured strangely on the actual keyboard. I'm able to send notes with no issue (it plays back) and I'm able to use basic CC# controls to change things like "reverb amount" / "Chorus amount" on a given sound... but even though I can use MIDI monitor to verify that the MOTU interface is sending SysEx out to the Roland, I'm getting no reaction.

I've been looking through both the implementation manual and the regular users manual for things that could be wrongly-configured on the keyboard, but the only thing that seems out of sorts here is the following:

In the Owner's manual, Roland states that, If your problem is" "you can't receive SysEx, it's because of a wrong ID#"
Screen Shot 2020-07-31 at 8.36.57 AM.png


So I'm wondering where? Where am I supposed to plug-in this "17" to make sure the SysEx message is going to the device and being heard?

In the MIDI Implementation manual, the portion of the SysEx string that corresponds to "Device ID" is being provided as 7F(hex) (127)... but the Roland user's manual says the device ID needs to be 11(hex) (17). Anyway, I tried substituting the existing "127" in that position of the string for a "17", and highlighted-blue / closed the window... but that didn't change anything on the Roland, either.

At this point, I'm curious if there's a very simple / bullet-proof / common SysEx command that I should be able to send to the Roland to prove to myself that the Roland is actually listening to SysEx data, at all.

I suppose another test would be to whip up some sort of SysEx message for either of my other two hardware synths: (Dave Smith Prophet 12 / Minimoog Voyager) and then see if those respond to a SysEx fader.

Sorry for all of the back and forth, and thanks again for your detailed help.
 
Upvote 0
also... in your screen-shot above— it seems that your SysEx faders are cabled to a non-Multi-instrument object. Is THAT a factor in my trouble? IN my screenshots, you can see I've cabled the faders directly to the Multi-Instrument. That seemed to be the appropriate thing, but if there's a trick to it that "you can't ALSO cable your faders to the same object that you use for bank/program changes", then I just missed that.
 
Upvote 0
Fader, Instrument and Multi-instrument are not part of the problem. SysEx data are just numbers in text strings. Once the code is correctly created and on the way, it does not matter where it comes from.

I am afraid there is no universal generic SysEx string to test all devices on this planet.



I downloaded the RD700nx user manual and the MIDI implementation manual.

As you said, the user manual states that the device ID has to be 17 (11H).
I have not seen a possibility to set this ID or to turn SysEx on/off. I assume it is always on.

The MIDI manual describes on page 8:
F0H – Exclusive status (start of SysEx string)
41H – ID number (Roland) so not universal 7F but rather the Roland ID?
dev – Device ID (dev: 00H-1FH, initial value is 10H) what? 10H looks wrong.
...
...
sum – Checksum ahh!
F7H – EOX (End of exclusive)
I don’t believe 10H as the default device ID. At another place they state that 10H means 17dec, which is wrong.
The user manual says device ID 17 (11H), so the beginning of the string should be F0 41 11 ...

And they seem to use a checksum, this is also stated on page 13:
"Roland Exclusive messages (RQ1, DT1) are transmitted with a checksum
at the end (before F7) to make sure that the message was correctly received."

———

SysEx for basic testing?

The MIDI manual mentions an "Identity Request Message" on page 3:
F0 7F dev 06 01 F7 (I would try 11H as "dev")​
You can try this, change "dev" numbers if it does not work. Maybe a good idea
to make the "dev" byte as VAL in Logic’s SysEx fader for quicker testing:

Untitled_3_logicx_and_Untitled_3_-_Standard_0_-_Environment.png

If the device ID fits, the piano responses with the "Identity Reply Message" described on page 7.
Well, it responds and you see this in Midi Monitor. And then you know the device ID.

———

Finally I suggest to build the following string in the SysEx fader, in exactly this pattern:

Untitled_3_logicx.png

Of course, if you found a different device ID in the meantime, use it.
The checksum gets generated by Logic when the string is sent.
Attention: After adding the SUM byte in the editor, check your code. In my fader it erased another byte.

The new string appears now as "Roland" with 14 bytes in Midi Monitor:
20:19:51.565 From IAC IAC 1 SysEx Roland 14 bytes F0 41 11 04 05 01 01 01 01 01 00 01 7A F7
20:19:51.738 From IAC IAC 1 SysEx Roland 14 bytes F0 41 11 04 05 01 01 01 01 01 00 02 79 F7
20:19:51.911 From IAC IAC 1 SysEx Roland 14 bytes F0 41 11 04 05 01 01 01 01 01 00 03 78 F7
20:19:52.151 From IAC IAC 1 SysEx Roland 14 bytes F0 41 11 04 05 01 01 01 01 01 00 04 77 F7

Be aware that the piano may generally NOT answer such commands!
Actually the additional MIDI traffic just for "Ok, got it!" makes no sense within a stream of notes, ModWheel, PitchWheel and other data. Rather listen if the sound changes with your SysEx and look for some indicator lights on the device.
 
Upvote 0
Okay — soooo much learned in the last 24 hours. First-off, I was looking at (what is apparently) the WRONG section of the MIDI Imp. Manual for the Roland RD-700nx. That example that I provided (and based this initial troubleshoot upon) was some other Reverb parameter control... and those SysEx strings didn't really do anything to the Roland keyboard. I reached out to Roland support for help, and they got back to me within a few hours. They didn't fully solve the problem, but they pointed me in the right direction.

They suggested that the strings I was looking for were in a different part of the manual / that I needed to reference things via their more-complex address map portion of the MIDI Imp. Guide, and they also suggested that further learning could be one on a few other web-pages. The 3rd of which was this one — 2writers.com | MIDI SysEx Tutorial. Though the site looks like it's not been modified since the last 1990's, the info was pretty much EXACTLY what I needed to better-help my brain decipher the addresses. Peter, you've been super-helpful... but I fear that I gave you bad info upon which you were trying to help me.... so the above suggestions didn't really work...and now I see why— it wasn't your fault at all... just me providing wrong info (which certainly isn't helped by the fact that Roland manuals tend to be very convoluted.)


Also, the support guide insisted (and so does the web-site guide that they linked me to) that ALL Roland device messages are gonna start with:

F0 41 10​
And for anything I'm sending to a RD-700nx, I need to add the Model ID:

00 00 50​
So, when you combine those, I'm gonna do any sending to that device (which means I'll aslo slap a "12" in there to indicate 'sending' with a starting phrase of:

F0 41 10 00 00 50 12 ...​

So, beyond me having the initial command string wrong, a lot of the answer for this seems to boil down to "where in the synth's architecture" is the parameter living (what's it's sysex address?) and that's really wacky, in Roland's world... For example:

The reverb I'm trying to control / the EQ I'm trying to control... they live in the "Live Set" architecture of this keyboard. So, I had to look at the address map to find the "starting address" (almost like a "country code" in the when dialing a phone#) for that part of the keyboard. And then I need the "offset" address... which basically just tells me "what more specific part of this architecture am I talking to?" — this is more like the "Area Code" part of a phone#. So I have to start my phone call with "country code + area code" ...
Screen Shot 2020-08-01 at 2.42.30 PM.png


... So in the above, I found that "reverb" is actually a parameter that's part of the 'Live Set' system in this keyboard... so I had to start the next part of my string with: 10 00 ... and I had to make sure to overlap the "offset" that specifies Reverb parameters. Which means the next phrase needed to be: 10 00 60 ?? ... and those question marks would be replaced once I found the specific byte for the exact "reverb parameter" that I wanted to control. ... Looking elsewhere in the Address Map, I found:
Screen Shot 2020-08-01 at 2.47.34 PM.png


So... this part of the address needs to be: 10 00 60 00.

This means, my SysEx string for controlling "Reverb Type" needs to be:
F0 41 10 00 00 50 12 10 00 60 00 VAL SUM F7
HOORAY! That much I've now figured out... and I'm successfully able to change Reverb Type on the Roland RD-700nx

I started dabbling with a few other controls, to make sure I was really understanding this SysEx code and the address map. So, I've even gotten the onboard Roland EQ to do the following, using the strings I've compiled from the info in the MIDI Implementation Address Map:

EQ ON/OFF — Working fine
EQ Low-Freq Type (shelf/peak) — Working Fine
EQ Low-Gain — Working fine.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

But now I have a few more details that I'm struggling with — and the linked page (2writers.com) seems to be trying to demystify this for the readers... but I'm still not quite getting it.

I can get the Reverb Type to change... but when I pick any reverb type... the Roland sets all parameters of that reverb to zeros. So... I can manually go touch the actual keyboard / pick a piano... / dial up a really web Cathedral Reverb / Turn the amount knob all the way up till the piano is drowning in reverb ... But when I go to Logic's Environment Fader and change the reverb type to "room" or "Plate" or even choose "cathedral" again... It sets the 'Reverb Time' / 'Pre-Delay' / 'Reverb Level' / all other reverb parameters to "0", and the reverb dries up instantly. So... I Found this section of the Address map for other Reverb parameters... but because they're marked with a #, I've learned that you cannot send SysEx Values directly to those addresses... and from the 2Writers.com instructions, it seems to confirm that you must stack up more values to offset the command from an eligible address... and if you offset them properly, it will control these additional parameters. So now I'm lost again.


From the 2writers site:
Screen Shot 2020-08-01 at 3.27.56 PM.png

If you look at the Implementation Manual — I see the following:
Screen Shot 2020-08-01 at 3.00.03 PM.png


So, since "reverb parameter 1" lives at an offset address of # _ _ _ _ 00 03, It would appear that this address is "two positions" later than the last viable address that I'm permitted to send data to: (The reverb level lives at "_ _ _ _ 00 01") so Does that mean that I can never send ONLY a message to "reverb param 1", without ALSO sending something to "Reverb Level"? That seems really challenging... and I'm again stumped.

Also — despite the string that I noted as working above: F0 41 10 00 00 50 12 10 00 60 00 SUM F7 working from Logic's text-fader to control the "reverb type", the seemingly perfect accompanying string that's identical except for the last two parts of the address: F0 41 10 00 00 50 12 10 00 60 01 SUM F7 does not successfully change the Reverb Level, no matter which reverb type I choose. It locks to 0 in the Roland keyboard and changing the fader has no impact on the "level" value. I can watch the reverb type change on the Roland screen as I toggle the Logic Text fader, but the level is un-changed by the other fader that I've designated for level.


So here's a huge screen-shot with probably waaaay too many annotations:
Screen Shot 2020-08-01 at 2.23.49 PM.png


To the above "works great / Doesn't work" notations —

Here's what I'm using to successfully change the Reverb Type:​
Screen Shot 2020-08-01 at 3.23.12 PM.png
And this Different String (with only 1 byte changed) seems to completely fail to control the "reverb level":​
Screen Shot 2020-08-01 at 3.24.25 PM.png



So here's where I'm at:
1. I've learned a lot in the last 24 hours​
2. I have proven that my Roland is listening to the SysEx (Per, what I think was, Peter's previous suggestion... the keyboard is always listening and probably cannot be set to ignore sysEx)​
3. I am successfully able to Control many of the parameters of the Roland RD-700nx with accuracy.​
EQ settings all seem to work perfectly (it's just tedious so I haven't finished setting them all up​
Reverb Type is definitely selectable​
Here's what I still have yet to fully solve/understand:
A) When a parameter in the Roland MIDI Implementation Guide is listed with a # in its 'Offset Address' in the Address Map, Can I control that with a single string of SysEx, or do I have to do something more complex?​
B) If I'm successfully able to control a parameter like "reverb type", and I've entered my string exactly as I found it in the Address Map, why does the very next listed parameter NOT respond to the respective command, using the next command string.​
 
Upvote 0
Good to hear that you got it working. But I cannot help you with your current questions. I am not a SysEx guru, I know just basics and if it comes to complex structures I rather tend to give up and don’t control these parts of a device. And I hate SysEx manuals and even more the guys who write them ;-)

Well, at least I could give you a starting point.
But I am afraid I have to leave you alone in the dark world of complex Roland SysEx ...
 
Upvote 0
No problem! Thank you for your help up to this point: I really only put the heavy detail up here in case future forum users have similar questions. I hope that my eventual success (fingers-crossed that I do actually get all the way to the total solution) can make it easier for others to get there in subsequent years.

mill post updates to this thread if I’m more successful.
 
Upvote 0
Back
Top