I have an Allen & Heath Qu-32. I recently started working on a personal project for next years’ sound person because I won't have enough time to teach everything I know before I leave for college, I'm basically making a Midi show control template for our board so the needed Midi cues can be copied and pasted into the show files in the future. The attached Qlab file has what I've done so far, what I’ve done so far has taken hours, I’ve gotten through 10 velocity changes and I would like to get through 127 so that each possible level is available for use, this isn’t going to work because for each velocity change I have to copy and paste the group, and then change the velocity of the 3rd Midi cue up by one. Is there a way to automate the process with an applescript or something? I’m not quite sure if this makes sense outside my head but it would be really awesome and a massive time saver if I could get some help with this.
-Ethan Livers
P.s. it seems like it would be a simple thing to figure out, but I cant figure out how to mute and un-mute mute groups
(* ### This is almost completely untested ### *)set userMIDIChannel to 1 -- What channel is the desk listening to?set userMinimumTimeBetweenCues to 0.01 -- How long to allow between MIDI Cues when sending NRPN clusters?-- Declarationsglobal dialogTitleset dialogTitle to "Go ahead Allen, make MIDI"set availableFunctions to {"Scene recall", "Mute", "Unmute", "Set to 0dB", "Set to -INF", "Set level"}-- Prepare some listsset monoChannels to {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32"}set stereoChannels to {"ST1", "ST2", "ST3"}set muteGroups to {"Mute Group 1", "Mute Group 2", "Mute Group 3", "Mute Group 4"}-- Ugly dB lookup table… ###FIXME### Feel free to adjust this (Allen & Heath's table appears essentially linear down to -45.0dB)property dbLookup : ¬"Velocity Level Source127 +10.0 Allen & Heath126 +9.5125 +9.0124 +8.5123 +8.0122 +7.5121 +7.0120 +6.5119 +6.0118 +5.5117 +5.0116 +4.5115 +4.0114 +3.5113 +3.0112 +2.5111 +2.0110 +1.5109 +1.0108 +0.5107 0dB Allen & Heath106 -0.5105 -1.0104 -1.5103 -2.0102 -2.5101 -3.0100 -3.599 -4.098 -4.597 -5.0 Allen & Heath96 -5.595 -6.094 -6.593 -7.092 -7.591 -8.090 -8.589 -9.088 -9.587 -10.0 Allen & Heath86 -10.585 -11.084 -11.583 -12.082 -12.581 -13.080 -13.579 -14.078 -14.577 -15.0 Allen & Heath76 -15.575 -16.074 -16.573 -17.072 -17.571 -18.070 -18.569 -19.068 -19.567 -20.0 Allen & Heath66 -20.565 -21.064 -21.563 -22.062 -22.561 -23.060 -23.559 -24.058 -24.557 -25.0 Allen & Heath56 -25.555 -26.054 -26.553 -27.052 -27.551 -28.050 -28.549 -29.048 -29.547 -30.0 Allen & Heath46 -30.545 -31.044 -31.543 -32.042 -32.541 -33.040 -33.539 -34.038 -34.537 -35.0 Allen & Heath36 -35.535 -36.034 -36.533 -37.032 -37.531 -38.030 -38.529 -39.028 -39.527 -40.0 Allen & Heath26 -40.525 -41.024 -41.523 -42.022 -42.521 -43.020 -43.519 -44.018 -44.517 -45.0 Allen & Heath16 -45.515 -46.014 -46.513 -47.012 -47.511 -47.410 -47.3 Ethan Livers9 -48.7 Ethan Livers8 -50.0 Ethan Livers7 -54.8 Ethan Livers6 -59.5 Ethan Livers5 -64.2 Ethan Livers4 -69.0 Ethan Livers3 -77.1 Ethan Livers2 -85.3 Ethan Livers1 -93.4 Ethan Livers0 -INF Allen & Heath"property faderLaw : nullif faderLaw is null thenset currentTIDs to AppleScript's text item delimitersset AppleScript's text item delimiters to tabset faderLaw to {}repeat with eachPara in paragraphs 2 thru end of dbLookupset end of faderLaw to text item 2 of eachParaend repeatset AppleScript's text item delimiters to currentTIDsend if-- Choose a functionset theFunction to my pickFromList(availableFunctions, "What kind of command would you like to make?")-- Make the cuesif theFunction is "Scene recall" then
set theScene to my enterANumberWithRangeWithCustomButton("Recall which scene (1-100)?", "", 1, true, 100, true, true, {}, "OK")
my makeMIDI(userMIDIChannel, "Program Change", theScene - 1, null, " | Recall scene: " & theScene)
else if theFunction is "Mute" then
set muteWhat to my pickFromList(monoChannels & stereoChannels & muteGroups, "What would you like to mute?")
if muteWhat is in monoChannels thenset noteNumber to 31 + muteWhatset theSuffix to " | Mute: channel " & muteWhatelse if muteWhat is in stereoChannels thenset noteNumber to 63 + (last character of muteWhat)set theSuffix to " | Mute: channel " & muteWhatelse if muteWhat is in muteGroups thenset noteNumber to 79 + (last character of muteWhat)set theSuffix to " | Mute: " & muteWhatend if
my makeMIDI(userMIDIChannel, "Note On", noteNumber, 127, theSuffix)
else if theFunction is "Unmute" then
set unmuteWhat to my pickFromList(monoChannels & stereoChannels & muteGroups, "What would you like to unmute?")
if unmuteWhat is in monoChannels thenset noteNumber to 31 + unmuteWhatset theSuffix to " | Unmute channel: " & unmuteWhatelse if unmuteWhat is in stereoChannels thenset noteNumber to 63 + (last character of unmuteWhat)set theSuffix to " | Unmute channel: " & unmuteWhatelse if unmuteWhat is in muteGroups thenset noteNumber to 79 + (last character of unmuteWhat)set theSuffix to " | Unmute: " & unmuteWhatend if
my makeMIDI(userMIDIChannel, "Note On", noteNumber, 1, theSuffix)
else if theFunction is "Set to 0dB" then
set setWhat to my pickFromList(monoChannels & stereoChannels, "What would you like to set to 0dB?")
if setWhat is in monoChannels thenset theMSB to 31 + setWhatelse if setWhat is in stereoChannels thenset theMSB to 63 + (last character of setWhat)end if
tell application id "com.figure53.QLab.4"tell front workspacemake type "Group"set groupCue to last item of (selected as list)set q name of groupCue to "Set to 0dB: channel " & setWhatset mode of groupCue to fire_all
my makeMIDI(userMIDIChannel, "Control Change", 99, theMSB, " | Channel: " & setWhat) -- CC99 to choose the "channel" (not the MIDI channel)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCue
my makeMIDI(userMIDIChannel, "Control Change", 98, 23, " | Set level ") -- CC98 to specify the action (set level)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues
my makeMIDI(userMIDIChannel, "Control Change", 6, 107, " | 0dB ") -- CC06 to specify the level ($6B = 107 = 0dB)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues * 2
end tellend tell
else if theFunction is "Set to -INF" then
set setWhat to my pickFromList(monoChannels & stereoChannels, "What would you like to set to -INF?")
if setWhat is in monoChannels thenset theMSB to 31 + setWhatelse if setWhat is in stereoChannels thenset theMSB to 63 + (last character of setWhat)end if
tell application id "com.figure53.QLab.4"tell front workspacemake type "Group"set groupCue to last item of (selected as list)set q name of groupCue to "Set to -INF: channel " & setWhatset mode of groupCue to fire_all
my makeMIDI(userMIDIChannel, "Control Change", 99, theMSB, " | Channel: " & setWhat) -- CC99 to choose the "channel" (not the MIDI channel)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCue
my makeMIDI(userMIDIChannel, "Control Change", 98, 23, " | Set level ") -- CC98 to specify the action (set level)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues
my makeMIDI(userMIDIChannel, "Control Change", 6, 0, " | -INF ") -- CC06 to specify the level ($00 = 0 = -INF)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues * 2
end tellend tell
else if theFunction is "Set level" then
set setWhat to my pickFromList(monoChannels & stereoChannels, "What would you like to set the level for?")
if setWhat is in monoChannels thenset theMSB to 31 + setWhatelse if setWhat is in stereoChannels thenset theMSB to 63 + (last character of setWhat)end if
set whatLevel to my pickFromList(faderLaw, "To what level?")
repeat with i from 1 to count faderLawif whatLevel is item i of faderLaw thenset dataValue to 128 - iexit repeatend ifend repeat
tell application id "com.figure53.QLab.4"tell front workspacemake type "Group"set groupCue to last item of (selected as list)set q name of groupCue to "Set to " & whatLevel & ": channel " & setWhatset mode of groupCue to fire_all
my makeMIDI(userMIDIChannel, "Control Change", 99, theMSB, " | Channel: " & setWhat) -- CC99 to choose the "channel" (not the MIDI channel)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCue
my makeMIDI(userMIDIChannel, "Control Change", 98, 23, " | Set level ") -- CC98 to specify the action (set level)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues
my makeMIDI(userMIDIChannel, "Control Change", 6, dataValue, " | " & whatLevel) -- CC06 to specify the level ($00 = 0 = -INF)
set newCue to last item of (selected as list)set newCueID to uniqueID of newCuemove cue id newCueID of parent of newCue to end of groupCueset pre wait of newCue to userMinimumTimeBetweenCues * 2
end tellend tell
end if-- Subroutines(* === INPUT === *)on pickFromList(theChoice, thePrompt) -- [Shared subroutine]tell application id "com.figure53.QLab.4"choose from list theChoice with prompt thePrompt with title dialogTitle default items item 1 of theChoiceif result is not false thenreturn item 1 of resultelseerror number -128end ifend tellend pickFromListon enterANumberWithRangeWithCustomButton(thePrompt, defaultAnswer, ¬lowRange, acceptEqualsLowRange, highRange, acceptEqualsHighRange, integerOnly, customButton, defaultButton) -- [Shared subroutine]tell application id "com.figure53.QLab.4"set theQuestion to ""repeat until theQuestion is not ""set {theQuestion, theButton} to {text returned, button returned} of (display dialog thePrompt with title dialogTitle ¬default answer defaultAnswer buttons (customButton as list) & {"Cancel", "OK"} default button defaultButton cancel button "Cancel")if theButton is customButton thenset theAnswer to theButtonexit repeatend iftryif integerOnly is true thenset theAnswer to theQuestion as integer -- Detects non-numeric stringsif theAnswer as text is not theQuestion then -- Detects non-integer inputset theQuestion to ""end ifelseset theAnswer to theQuestion as number -- Detects non-numeric stringsend ifif lowRange is not false thenif acceptEqualsLowRange is true thenif theAnswer < lowRange thenset theQuestion to ""end ifelseif theAnswer ≤ lowRange thenset theQuestion to ""end ifend ifend ifif highRange is not false thenif acceptEqualsHighRange is true thenif theAnswer > highRange thenset theQuestion to ""end ifelseif theAnswer ≥ highRange thenset theQuestion to ""end ifend ifend ifon errorset theQuestion to ""end tryend repeatreturn theAnswerend tellend enterANumberWithRangeWithCustomButton(* === MAKING === *)on makeMIDI(theChannel, theCommand, byteOne, byteTwo, customSuffix) -- Not thoroughly tested!tell application id "com.figure53.QLab.4"tell front workspacemake type "MIDI"set newCue to last item of (selected as list)set channel of newCue to theChannelset byte one of newCue to byteOneset nameString to "MIDI Channel " & theChannel & " | " & theCommand & " | " & byteOneif theCommand is "Note On" thenset command of newCue to note_onset byte two of newCue to byteTwoset nameString to nameString & " @ " & byteTwoelse if theCommand is "Control Change" thenset command of newCue to control_changeset byte two of newCue to byteTwoset nameString to nameString & " @ " & byteTwoelse if theCommand is "Program Change" thenset command of newCue to program_changeend ifset q name of newCue to nameString & customSuffixend tellend tellend makeMIDI
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/qlab/435E6540-7E62-4CE0-B8E1-CCEC8572E04A%40mac.com.
For more options, visit https://groups.google.com/d/optout.
<Go ahead Allen, make MIDI.qlab4>
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/qlab/435E6540-7E62-4CE0-B8E1-CCEC8572E04A%40mac.com.
For more options, visit https://groups.google.com/d/optout.
To view this discussion on the web visit https://groups.google.com/d/msgid/qlab/a1c44862-a724-4925-a9fb-19738ae131d8%40googlegroups.com.
--
--
Change your preferences or unsubscribe here:
http://groups.google.com/group/qlab
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/qlab/83604882-1BDE-4388-B8EE-A3B08A4F17E3%40mac.com.
I have yet to look at your new script because I’ve been working on this file but thank you for doing that! You da bomb.com!!
I quickly figured out that A&H has provided very wrong midi number information and its not even linier so I went through every velocity number and recorded what the dB level is for each and changed that on the table in the apple script. The other thing I found completely ridiculous is that there isn’t a way to do +10, the closest it gets is +9.8. In the Attached file I have each velocity change for channel one because the file was too large to upload if I had each channel. I only had changed channel one anyways once I got past velocity 11 because it was simply too tedious to change the velocity for all 35 channels
In the AppleScript I also tried to change the way it names the cues so it only puts the action name and the channel number. Not sure if I did it correctly.
And, yes, the manual would leave me to believe that you would need two notes to complete a mute\unmute action but alas the way I have it works perfectly.
Getting back into midi control for the board because we finally bought the license. Can anyone figure out what the midi control would be for the mix busses and the levels for it and what channels are on in it.
--
Contact support anytime: sup...@figure53.com
Follow Figure 53 on Twitter: http://twitter.com/Figure53
---
You received this message because you are subscribed to the Google Groups "QLab" group.
To unsubscribe from this group and stop receiving emails from it, send an email to qlab+uns...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/qlab/0f04193a-54b7-43ef-a54d-89b612eaa230%40googlegroups.com.