One hardware controller, many racks, dynamically linked (template gig)

So, after quite a lot of suffering and debugging, I made this script (two scripts actually, and a panel), to fill the functionality gap in GP that’s been bugging me forever.

Context and purpose
I have multiple racks with guitar plugins, which have various sets of controls, and different sets of “pedals”, i.e. individual effects. They are named differently, of course, and some effects are present in some rackspaces and missing in others.

However, most of these controls are in essence the same or similar - i.e. Gain, Mid, Treble, Presence, Mid Boost, Gain Boost etc. Also, the “pedals” also have logically similar controls - Mix, Level, Time (which could be Feedback for delay, Decay for reverb), Time could be synced to host tempo, etc.

I also have some effects on the Global rack, mostly used for vocal effects - these are always the same.

So I wanted to be able to control all this with just one hardware MIDI controller, with a limited number of knobs and buttons, so that the same knobs will control relevant parameters on many rackspaces, either Global or “Local”, depending on context (switchable mode) and what’s available in a given rack. But the knobs themselves would always be the same, so I can change parameters from the hardware, without much looking.

Description

The attached gig file is a template for this. I tried to make it as reusable as possible, but it’s not too easy with GPScript, unfortunately, to make it truly universal, so adapting it to your scenario (number of knobs on your hardware controller, for example, or mapping to actual effects on racks) will require some tinkering and editing the scripts. I tried to add as many comments as possible and provided some templates to make it easier, but it will still require attention, setting widget handles, and some understanding of how GPScript works.

There are three songs in the gig file with their racks. Two of them are similar (with an “amp”, some “pedals” and an “eq”), one has nothing and doesn’t even support this script. One of the racks switches the script to control the “amp”, another one switches to “eq” control, just for the sake of illustration.

When you switch rackspaces or variations, or load the gig file initially, there’s some “handshake” between the global and local racks to determine whether the rack supports the script and which mode the local rack wants to start in.

If the rack doesn’t support the script, the thing defaults to “Vox” mode, which is controlling the effects on the Global rack.

Using the thing

On the Global rack, there are:

  • 4 “mode” buttons - Amp, EQ, FX, and Vox, these determine what exactly is controlled.
  • 4 “FX” buttons. In Amp and EQ modes, they turn individual effects on or off. In FX mode, they select individual effects on the Local rack to adjust with knobs. In Vox mode, they select individual effects on the Global rack. These can be mapped, for example, to a footswitch, to control effects during playing.
  • 4 control knobs and 4 control buttons - these are the controls that change things depending on context. These can be mapped to a hardware controller such as X-Touch Mini, for example.
  • If a rackspace doesn’t have some effect (or an “Amp” doesn’t have some control), the relevant knobs/buttons on the Global panel will become hidden (and their value set to 0).

How to adapt it to your actual racks/gig file

To see how it works, you can of course just open the attached gig file, it should work, but make sure you have OSC enabled. There aren’t any actual plugins in this file, this is just a demonstration.

If you like this and want to use it in your actual gig file, here are the things you should do:

  1. Enable OSC
  2. Save the panel from the attached gig file, add it to your Global rack. Change the number of widgets and their handles to have as many knobs as you need (or your hardware controller supports).
  3. Add the Global script to your Global script, and modify it to reflect the number of knobs you have on your Global panel, map actual Global rackspace effects (and probably delete the ones from this gig file if you don’t need them). You’ll need to modify the declarations, OnWidgetValueChanged, OnOSCMessageReceived callbacks, the rest should work, hopefully.
  4. Add the Rackspace script to your Rackspaces, modify accordingly to declare and map actual widgets, modify OnWidgetValueChanged and OnOSCMessageReceived callbacks.
  5. Map your hardware controller to the global rackspace controls on the new panel, and control everything using the same set of knobs regardless of plugins being used.

Known issues and limitations

  1. Mapping this to your actual racks is a manual process, there’s only so much I can do to universalize this, due to GPScript limitations (or my understanding of them). For example, the OnWidgetValueChanged (…) From doesn’t accept arrays, you have to manually type names of widgets separated by commas. So you’ll have to adjust that carefully.
  2. 90% of the time I spent doing this was trying to avoid feedback loops trying to sync widgets (you change widget A, it changes widget B, which in turn changes widget A etc.). After trying multiple techniques the one I’m using works well for buttons but skips every other step with knobs, so sometimes syncing isn’t awfully smooth, sometimes a global control may fail to update when you switch variations/song parts. If somebody can come up with a better way to sync widgets, it would be great.

Screenshot

Gig file
GlobalLinkPoC(4).gig (1.7 MB)

Thanks for sharing!