Keep volume or mute of certain plugins independent of variations?

I’m new and I’m learning… wondering if there is a way to control the state of certain plugins “outside of” or independent of variations. I know the whole point of variations is to save the state of plugins, but there are times when this does not work for me. For example, I have a guitar and a synth sound (Tripleplay guitar to midi), all mixed together, coming from the same guitar. I have setup racks with variations where both the synth and the guitar sounds are mixed together. However, there are times when I just want to hear the guitar sound WITHOUT synth and switch through the variations without the synth sound coming back, even if the synth sound was on in the next variation.

I know each variation could be saved where the synth volume is either there or not, but I want to be able to manually control when the synth is present or not, independent of the synth volume levels or settings in the variations. Some sort of global way of controlling that particular parameter that overrides the parameter in the variation. Is that possible???

Actually - the point of variations is to save state of widgets that you have connected to your plugins, not the entire plugin states.

Having said that - there is an option called “Ignore Variations” for each widget that you have. When you enable it - that widget will not be recalled or changed when you change variations so if you mute the “synth” sound for example using a widget that ignores variations - it will stay muted even if you switch between variations.

Hope this helps.

3 Likes

Brillian! That’s exactly what I was looking for! :slight_smile: Can’t believe I missed it! LOL

1 Like

So while that works wonderfully within a single rack space switching between variations, is there something similar that would cause it to ignore the last saved State switching between racks themselves? The only option I can see for that is under the value tab, at the bottom for initial value on load (in all variations).
Options are last saved or a specific value that I can give it. And only the specific value choice has the option to follow the rule on rackspace activation as well. Obviously that doesn’t work either…

You could define a separate rackspace with widgets.
With scripting when a rackspace is switched it could read the value of this special widgets and set the local widget to the same value.

Global.gig (14.9 KB)

This is the script:

Var
   MASTER  : Widget
   EMASTER : ExternalWidget
   MUTE    : Widget
   EMUTE   : ExternalWidget

on Activate
 if BindExternalWidget(EMASTER, "MASTER", "Special") then
   MASTER.SetWidgetValue(GetExternalWidgetValue(EMASTER))
 end
 
 if BindExternalWidget(EMUTE, "MUTE", "Special") then
   MUTE.SetWidgetValue(GetExternalWidgetValue(EMUTE))
 end  
end

The trick is that:
A rackspace is activated and reads the value if the corresponding Widgets in the rackspace called “Special”. Then the values are applied to the local Widgets.
This way you can implement a global Master Fader or global mutes or or or …

1 Like

Very interesting! I will play around with this later, but for now, what pops in my mind is where is this “global widget” placed? Since widgets are placed on the rack space belonging to the selected rack, where can I place widgets that doesn’t disappear when a new rack is selected? Or, is it placed on every rack???

There is no global widget, the widgets that control the other widgets are placed in a normal rackspace.
Just load the gig and you will see :wink:

Any changes made only apply when in the rackspace called ‘Special’ though, so it doesn’t really work as a Global Fader, since any changes made to those widgets while the other rackspaces are active don’t get applied once you switch to another rackspace.

Yes you are right, my use case was this:

With the widgets in the special rackspace is Mute or UnMute outputs of Audio Player.
This was for rehearsals when I never was sure who of the musicians is present.
So I made backing tracks for each musician,
At the beginning I mute channels for musicians which are present.

I know this is not ideal, but better than nothing.

Thank you so much for uploading that very helpful small gig file with the script editor! I got a chance to look at yours, looking forward to testing it in my setup! :slight_smile:

So I got a chance to play with the script loaded in my setup and while it does what its supposed to, as edm11 pointed out, now I can only make changes if I go back to that “special” rack, or more precisely, if I override it and turn on the level of the widget on rack 3 for example, but the SPECIAL rack widget is OFF, when I go to rack 2 the volume is OFF, even though I turned it on in rack 3. So I can override it at one specific rack after I chose that rack, but I lose it the second I leave that rack. In order to have that setting applied to all my racks, I have to jump back up to the “special” rack and make that change there. Unfortunately, in the end this ends up being more work and confusing live than just not having it. I appreciated the thought put into it though!!! This has really brought to light a new feature begging to be added to GP. Wouldn’t it great if indeed a truly global widget could be set up that would always be directly and immediately accessible and always apply to all targeted widgets in their own racks?!!!

OK, understand.

But what would be the Master.
Whey you had such a global Widget to control the local widget and you set the local widget to a different value and switch away from that anbd back to taht rackspace - which value should the local widget have?
Again the global value or the value you last set?

The more you think about the more complicated it will be.

I think I have a solution: use Multi instances of Gig Performer and OSC
https://gigperformer.com/docs/Userguide36/osc_tutorial.html
Master.gig (4.8 KB)
Slave.gig (4.8 KB)

You can create a rackspace with the widgets you need.
Give them OSC Names and set in the preferences the OSC options.

Then in your normal rackspaces give the widgets in all rackspaces the corresponding OSC Names
and set the preferences.

Now when you open up this 2 instances and you move a widget in your “Master” instance (that with just 1 rackspace) the corresponding widgets in your “Slave” instance (that with the normal rackspaces") will be moves also.

Master instance

Bildschirmfoto 2020-10-23 um 08.31.58

Slave Instance

3 Likes

I’m blown away with your professionalism and dedication to help in such a detailed manner!! Thank you! I am not at my rig right now, but my first question is, do I need to switch to the “master instance” in order to make the changes in the “slave instance” or can I say in the slave instance the whole time?

My “work flow” is I’m playing analog guitar and guitar synth at the time. As I switch through the racks or songs, sometimes I want the synth to be ON, sometimes I don’t. When I want it off, I want it OFF and stay OFF in all racks. When I want it on, I want it ON and stay ON as I switch racks. I can’t be switching to another rack or instance in the middle of playing. I am hoping this is possible with your latest solution. Thanks again for the time and effort for thinking about this and writing the script!!!

The concept is this:
When you move a widget in the “Master” instance rackspace the corresponding widget in the actual rackspace of the “Slave” instance is moved.
Now you can move a widget in your “Slave” instance independently of the “Master”.

Hope I could explain

By the way: The Slave has no influence on the Master - it is a 1-way ticket :wink:

1 Like

@pianopaul I’m still seeing an issue with changing rackspaces in the Slave instance and having the widget values in the Master instance not propagating to the other rackspaces.

For instance, in the gig files you used above, duplicate a rackspace in the Slave instance. Then change the value of one of the widgets in the Master instance–you see the value change in the Slave instance, as it should. Then change to the other rackspace in the Slave instance–The value of the widget does not match that of the Master widget.

Am I missing something?

You are right, let me think …

Next try
SyncWidget.gig (12.0 KB)

Script:

 var A : Widget
     EA : ExternalWidget
     
 on Activate
  if BindExternalWidget(EA, "A", "Special") then
   A.SetWidgetValue(GetExternalWidgetValue(EA))
  end
 end
 
 // Called when a widget value has changed
 On WidgetValueChanged(newValue : double) from A
  SetExternalWidgetValue(EA, newValue)
End

The idea:
When a rackspace is switched it reads the value of the External Widget in the special rackspace.
When the widget is changed in the local rackspace it stores the value in the external widget in the special rackspace.

2 Likes

It seems to me that the only way at current to make Global changes in GP is to have a separate instance of GP and have the actual plugins and controls that you wish to control globally in that instance. Changes in one rackspace aren’t designed to change anything in other rackspaces. Variations allow for that, but not rackspaces.

Not sure if I implemented it correctly, but I still see the same behavior as before, where changes aren’t propagating to each rackspace in the Slave instance.
I copied the script and put it into your previous Slave gigfile.

With this gig file the master/slave is not needed at all.
Just load the gig, set the widget in the special rackspace.
Then switch to the next rackspace, the widget has the same value.
Move the widget and switch down to the next rackspace
The widget now has the same value as the widget in the previous rackspace.