I made a rackspace according to your description, but i used an additional row of knobs to work as “initial values”. So you always are able to not only get back to how it was, but also to see the initial values vizualized.
Turning an intitial-knob will set the (blue) knob accordingly, while turning a blue knob won’t affect the initial value. The blue knob will then “jump” back to the initial-controlled value when the boss-knob is moved again, so better not touch the blue ones! (Maybe it would be better to shrink those).
Turning the red “Boss-Knob” will then adjust the nine other knobs by half of their initial value up or down (if possible). Doubleclicking the knob will bring it back to 50%
The Boss-knob should be MIDI-learned to your pedeal, while the blue knobs should be parameter-learned to the plugin(s).
Here is the gig file:
BossOfNine.gig (242.7 KB)
This is the script:
var
sKnb : widget
tKnb1, tKnb2, tKnb3, tKnb4, tKnb5, tKnb6, tKnb7, tKnb8 ,tKnb9 : widget
iKnb1, iKnb2, iKnb3, iKnb4, iKnb5, iKnb6, iKnb7, iKnb8 ,iKnb9 : widget
kVal1, kVal2, kVal3, kVal4, kVal5, kVal6, kVal7, kVal8 ,kVal9 : double
kGroup : widget array = [tKnb1, tKnb2, tKnb3, tKnb4, tKnb5, tKnb6, tKnb7, tKnb8 ,tKnb9]
iGroup : widget array = [iKnb1, iKnb2, iKnb3, iKnb4, iKnb5, iKnb6, iKnb7, iKnb8 ,iKnb9]
kValues : double array = [kVal1, kVal2, kVal3, kVal4, kVal5, kVal6, kVal7, kVal8 ,kVal9]
//user function to (re)set all knobs to the initial-knob's values
function InitKnobs()
var
index : integer
For index = 0; index < Size(kGroup); index = index+1 Do
SetWidgetValue (kGroup[index],GetWidgetValue(iGroup[index]))
end
End
//user function to set the knobs according to the "boss-knob's" position
function BossOrder(factor : double)
var
index : integer
For index = 0; index < Size(kGroup); index = index+1 Do
SetWidgetValue (kGroup[index],kValues[index]+(kValues[index]*factor))
end
End
//user function to read the knobs values and store them in a variable array
function GetKvals ()
var
index : integer
For index = 0; index < Size(kGroup); index = index+1 Do
kValues[index] = GetWidgetValue(kGroup[index])
end
End
Initialization
SetWidgetValue(sKnb, 0.5) //set boss-knob to 0.5
InitKnobs() //copy the inital-knobs values to the knobs
GetKvals() //read & store the knobs values
End
//when itial knobs are moved, set knob values accordingly
On WidgetValueChanged (w : Widget, index: integer, iVal: double) from iKnb1, iKnb2, iKnb3, iKnb4, iKnb5, iKnb6, iKnb7, iKnb8 ,iKnb9
SetWidgetValue (kGroup[index], iVal)
GetKvals() //re-read the new knob values
End
//when boss-knob is moved, change the knobs values relatively
On WidgetValueChanged (kVal : double) from sKnb
BossOrder(kVal-0.5)
End