Matching Sysex Controls
Short answer: once the control is configured, it is always watching for a matching message, and updates when it sees one. With the RD-2000, you have to request the data, so my tabs have a “Load” button.
Long answer: here is how many of my tabs work:
I have a master “zone” selector to choose zone being edited — using the “channel” selector as a “zone” selector.
There are a number of sub zone selectors that provide pointers for parameters (since a zone goes from x0 xx to x6 xx, plus other offsets for effects, etc.)
For example, zone x tone character sysex is 41 10 00 00 75 12 10 00 L 3E V
where 41 10 00 00 75 is the Roland Identifier
12 is Data Transmission
10 00 L 3E is the address of tone character in zone x
V is the single byte value
Other control settings
Tone character display is -5 to +5 for Midi of 59d to 69d
Assign the sub zone selector that has the +6 offset as super control
Midi Receive On
This control now monitors continuously for a matching sysex (zone has to match the super control selection) and updates the control with v.
With the RD2000, you can request precise Sysex packets, i.e, a single desired parameter.
To read data and match controls, the tab has a “Load” super control. This has a number of hidden sub controls that each send a sysex request. The request matching above is: 41 10 00 00 75 11 10 00 L 3E 00 00 00 01
11 is Data Request
10 00 L 3E is the address of tone character in zone x
00 00 00 01 says I want a single byte
The ability to request precise data has let me avoid parsing a long sysex with streambyter.
But, nothing is easy. The RD2000 will only accept eight sysex at once. I can get up to 16 parameters with a single control by using both on and off values of a sub control. Example, in above request, replace the 3E with V, and set the midi on/off values to 3E & 3F, ensure send ON ONLY is not selected either for the control or super control.
I have an idea, not yet tested, to use the Roland portion of the Sysex to tell streambyter how long to delay an outgoing request, and replace that data with the std Roland header, allowing time to process the first 8+8 requests.
And I also need to post a hint on how to keep pushbutton selectors synchronized.