Converting system exclusive to control change

Main credits are @SteveC-Bome and also @dhj, I only proposed a Gig script for this. Gig scripts are so clever for this kind of needs.

1 Like

Having looked this over I have an idea for applying something like this technique that might be really widely applicable to a lot of MIDI
Controllers.

My basic idea is to create a way of pushing a controller button(s) state to a GPscript variable (however its state is represented in the SYSEX table), then I suppose code those as some kind of array of constants in the script, and use some type of indexing to ā€œpushā€ the button state you want back to the controller as SYSEX. This may likely take a little customization for a particular device, and itā€™ll no doubt have some hard coded delay requirements.

Plus I suppose you could theoretically brick the controller with a strategic cable disconnection during a live performanceā€¦ but hey I once saw Sergio Mendez and Brazil ā€˜77 have to dump out of a standing-O encore at the Congressgebouw in Amsterdam because something in his synth fried during the bows. Not kidding.

He started pounding the chords to count it in and the sound that came out was so epistemologically awful I actually heard
the crowd gasp. His eyes opened wide and he put his hands up in the air and looked at somebody offstage REALLY hard. Then smiled and shrugged and everybody applauded again. Green room open bar. So I would be in good company at least.

But Sergioā€™s war stories aside, seriously this technique could have a really wide usage case for anybody who wants to be able to ā€œpushā€ controller buttons or indicator states etc., that arenā€™t accessible any way except via SYSEX (with all the usual ā€œdonā€™t blame me if you brick itā€ warnings of course).

It could also provide a way to use the LED backlights etc behind finger drum pads on a controller, in a status indicator use case, and let me set the ā€œfullā€ value button, turn on and otherwise instruct the controllerā€™s arpeggiator, MIDI sync mode, etc.

Or has somebody already crushed this long ago here and Iā€™m just not aware.

It would be very cool if for instance I could use the sustain CC64 to say cycle through the four controller mapping layers of my 8 physical pads (and layer-associated 8 rotary controllers), each with an A/B bank, CC enable, and PC enable. With some sort of LED status change to indicate that status. The controller does that to a certain extent but I can see this could allow things like toggling the color of the A/B bank button between red and green multiple times. Or blinking all of the LEDs under the drum pads together n times to indicate a control state change etc. then resetting them to the state they were in before that signal. The imagination becomes fertile.

Not a rush, but anyone care to comment?

Yes, a comment. Most of the people here use their fertile imagination for playing music rather than for tackling generic technical problems they donā€™t really have. The basic idea with GP is to try to use it like it is as far as it is possible. And you are supposed to be able to go very far with it like this. Then if you have a specific issue, which prevents you to play the music you want the way you want, there will always be time to expose the precise a specific use case and the associated technical issue. When there is a clear problem, clearly exposed, the GP community is always ready to help other users. In particular communication with a MIDI device based on SysEx communication has already be done to solve specific issues. :wink:

2 Likes

Iā€™m building a visual editor for the XK-5ā€™s deeper menu functions using GP scripting, eventually for the wider XK-5 user group over on Facebook. I was soliciting what features of the XK-5 they wish were accessable without deep menu diving for both performance and for more intensive sound design controls like custom tonewheel editing.

side note: This might actually drive some sales of GP if it proves useful enough to them.

One sort of odd request I got from that group was to see if there was a way to push a system dump of a hammond .setup file back into midi data so that a external midi controller would know the state of the parameter currently used in an XK patch. The XK can send (and recieve) a full or partial sysex dump so in theory this could be doneā€¦ and that data could be put into a tableā€¦ but the use case for this is pretty obsucre. The user who requested this feature is pushign a whole new .setup file for every song he plays. :confused: Itā€™s imaginative but kind of like using the XK system in an inside-out kind of way vs. how it was designed.

Regardless, it would be easier in this example to map the sysex scriptlet parameters to a widget and bind that widget to an external midi controller and then use the catch/latch feature to control if the value was immediately sent when the external controller changes or if the value only changes if the controller moves through the current widget value and then organize all these change ablities by rackspaces/variations/songs, etc.

From there all other bells and whistles like if the midi controllers buttons where back-lit or not, etcā€¦ could be controlle by GPā€™s sync ablility.

This sounds like something that would better be implemented using a GP Extension

An extension vs. just using GP script? Why?

I have no knowledge of how to build an extension as I assume it involves C++ coding. Iā€™m very happy to use GP script that others have helped me build on here and expand that into a widget driven editor.

You mentioned you were building a visual interface ā€” thatā€™s much easier with an extension, using JUCE (say) to design the visual layout of your pieces) but yes, you have to be able to use C++ or another programming language that can bind to the underlying raw C interface exposed by the SDK

Thereā€™s a GPscript here that allows you to implement radio button behaviour on controller pads to play files that got me thinking. Iā€™m not that much of a stage musician I donā€™t think but I did ask for comment so thanks.

Which was also developed for specific musician needsā€¦ no need to play music on stageā€¦ :wink:

Hi @dhj, this looks like what I might need to convert sysex messages from my SK Pro to control the IK B3X, but I have no experience of programming and struggling to get the keyboard to control things like Leslie speed, Percussion On/Off by using the MIDI learn function.

Should I just be able to paste this entire block into a scriptlet page, or do I need to edit this according to the specific CC messages I want to convert?

Thank you so much
CarlP

Hi @CarlP, welcome to the GP community forum.

If the SK Pro is close to the XK-5, I guess @brandon should be able to help you out a bit.

Thank you @David-san.

@brandon not sure how to assess whether xk5 and skpro messages are the same or if a totally different approach is needed. Is this something you might be able to help with?

@CarlP see if you can locate your PDF manual for the SKPro. In the appendix there should be a pretty complete sysex schedule.

I found through trial and error how to decipher the values in the XK-5ā€™s manual into something that would actually speak to the parameter I wanted to control.

However, I am using sysex to send values from widgets to control values in the XK-5, not the other way around.

Iā€™m pretty certain that all the values you would want to send from the SK Pro to control B3-X vst would be CC messages or NRPM messages, not sysex, right?

1 Like

Hello everyone,

So, I carefully read the whole topic, and in the beginning just so say that I know zero about scripting but it seems that I will at last have to use it.
Iā€™m building rather complicated setup (Genesis & Pink Floyd Tribute, so you know what I meanā€¦ :wink: ). I came across some limitations in the way Kawai MP7se is handling the MIDI. To not go in much details I would need to send SysEx to turn zones on and off on Kawai MP7se. Is it possible to do it through widget (like bypass MIDI out plugin), or I will have to use similar script but other way around?
As I see now, SysEx could be sent only when the Rackspace is activated, but I need to send it in within the Rackspace (in the same Rackspace while it already activated). If this is not possible, can I solve it with sending CC then converting on the way out to SysEx. Basically the opposite way what the script mentioned here is doing.

Thanks in advance!

Whatever you do regarding zones (I understand s keyboard splits, right ?), you should probably rather do it using GP which would make your setup independent of the keyboard controller you use. Imagine you MP7 fails just before a gig, you could simply replace it with any other keyboard controller and the show would go on.

Iā€™m using the sounds from Kawai too. Of course, I wanted to control zones from the GP itself, as I do for all other situations, but due to some limitations of Kawai, itā€™s not possible. So the last resort for me was to leave handling zones to Kawai (as well as the Kawai midi path for using sounds within Kawai), but then as I said is essential to be able to at least be able to turn the zones on and off from GP (thatā€™s why I need to send sysex to Kawai). Redundancy will be handled in some other way, anyhow itā€™s more plausible that my laptop is going to give up before Kawai. :wink:

What limitation makes it not possible?

For my setup a lot of them. I was avoiding problems on the way and the last one was not being able to turn on and off the Leslie speed if the zone was not active, if itā€™s active then Iā€™m doubling the note on messages. So now the solution is not to send midi for Kawai internal sounds to GP but just turn on and off zones from GP.

1 Like

Does the keyboard not have the ability to turn off local control?

Bravo! Finallyā€¦

The problem with Kawai is that the midi setup is not what I got used to (coming from Kurzweil where everything is clear as the day), and got messed up in trying to make it work like I want, and at the beginning I wrote off the local off mode because it made some other things not possible. I solved it differently and totally forgot that I have that option again now since Iā€™m sending midi out of Kawai.

Thank you so much again! This solves a lot of things for me. Like always Gig Performer and the support for the win!

But still curious if there is a way to convert CC to SysEx by scripting? Just to conclude the topic. :wink: