I was thinking about a related idea - folks had asked how to get a dca fader to respond inversely to another dca fader and while I have misgivings about whether one would want this behavior all the time... or throughout the full travel of both faders... I can imagine times when I would like turning up the horns to turn down the keys, a little.
Because of the limitations of (subscribing and receiving) osc data from an x32 , I came up with a folder of midi cues whose triggers are the inverse midi position of their outputs. And I wrote a script that creates that folder of commands:
tell application id "com.figure53.QLab.4" to tell front workspace
-- start cue "CloseForSpeed"
-- delay 10
--Set names for group & in & out things
display dialog "Name of this Group" default answer "New Name" buttons {"OK", "Cancel"} default button "OK"
set groupname to text returned of result
display dialog "Name input controller" default answer "New Name" buttons {"OK", "Cancel"} default button "OK"
set incontroller to text returned of result
display dialog "Name output contoller" default answer "New Name" buttons {"OK", "Cancel"} default button "OK"
set outcontroller to text returned of result
set increasingvar to "0" as number
set decreasingvar to "127" as number
set triggerchannel to 1
set triggerCCnumber to 1
set outputpatchnumber to 1
set outputchannel to 2
set outputCCnumber to 2
make type "group"
set newgroup to last item of the (selected as list)
set q name of newgroup to groupname
repeat 128 times
make type "MIDI"
--cue level items
set selectedCues to selected as list
set newCue to last item of the (selected as list)
set q number of newCue to ""
set q name of newCue to incontroller & " " & increasingvar & " sends " & outcontroller & " " & decreasingvar
set command of newCue to control_change
--message output settings
set channel of newCue to outputchannel
set byte one of newCue to outputCCnumber
set byte two of newCue to increasingvar
--trigger settings
set patch of newCue to outputpatchnumber
set midi trigger of newCue to enabled
set midi command of newCue to control_change
set midi byte one of newCue to triggerCCnumber
set midi byte two of newCue to decreasingvar
set increasingvar to (increasingvar + 1) as number
set decreasingvar to (decreasingvar - 1) as number
--move cue to group
repeat with each in selectedCues
set eachCueID to uniqueID of each
move cue id eachCueID of parent of each to end of newgroup
end repeat
end repeat
end tell
----- the CloseForSpeed cue is a script that will offer to close inspector/lists to make the process happen faster:
tell application id "com.figure53.QLab.4" to tell front workspace
set closeoptions to {"Neither", "Both", "Inspector Only", "Lists Only"}
set whattoclose to {choose from list closeoptions with title "Windows to Close for Increased Speed"} as text
if whattoclose is "Both" then
tell application "System Events"
key code 34 using command down
delay 0.05
key code 37 using command down
end tell
end if
if whattoclose is "Inspector only" then
tell application "System Events"
key code 34 using command down
end tell
end if
if whattoclose is "Lists Only" then
tell application "System Events"
key code 37 using command down
end tell
end if
end tell