In shows with voice-over recordings, click tracks, or videos featuring characters, it is often necessary to have a quick and reliable way of selecting which cues will be used in a performance based on who will be performing. There have been lots of solutions to this problem using AppleScript. With the introduction of OSC cues in QLab 3, which can use wildcards in custom OSC strings, this process has been made much easier.

The method illustrated here is based on an approach using OSC created by Chris Ashworth. The version described below works in all versions of QLab 3, QLab 4, and QLab 5. If you’re using QLab 4 or QLab 5, there is another, much better approach devised by Andy Leviss which uses cue carts. This approach is described at the end of this article.

The video and screen shots in this chapter show QLab 5, but there are downloadable examples for all three versions of QLab.

In QLab 3, the type of cue which sends OSC messages is called the “OSC cue”. In QLab 4 and QLab 5, that cue type is called the “Network cue”. The demo in this chapter was programmed in QLab 5, so it will refer to Network cues.

The selection of cues is made from two dialogs at the top of the main list, one for the male actor and one for the female actor. The current selection is clearly visible in Memo cues at the top of the cue list. The method can be easily adapted to suit more complex requirements.

How It Works

A Script cue numbered “SELECTM”, with the hotkey ⇧⌥? displays a list of male actors to choose from. Depending on which actor is selected, a different cue is run.

Here’s the script:

set actorlist to {"DANIEL", "OLIVER"}
set actor to (choose from list actorlist with title "VO Selector" with prompt "At this performance Mr McKinley will be played by?") as string
tell application id "com.figure53.QLab.5" to tell front workspace
    if actor = "DANIEL" then
      start cue "9993"
    else if actor = "OLIVER" then
      start cue "9994"
    end if
  end try
end tell

The 9000-range cues are in a separate cue list and contain groups of Network cues, which arm or disarm the relevant voiceover cues.

Groups of Network cues

They use wildcards to select the cues. So, for instance, the OSC:

/cues/*OLIVER/armed 1

would select any cue whose number was (anything) OLIVER. So if all voiceover cues have the name of the actor after their number, then they will all be selected for the arm or disarm.

IMPORTANT: all OSC is case-sensitive!

The final cue in each Group is a Script cue, which sets the cue name of the Memo cue, numbered CASTM, in the main cue list, to the name of the cast member selected.

tell application id "com.figure53.QLab.4" to tell front workspace
  set q name of cue "CASTM" to "Mr McKinley will be played by OLIVER"
end tell

A Script cue numbered “SELECTF”, with the hotkey ⇧? displays a list of female actors to choose from. It works in a similar way to the previous script.

Using Carts as the Selector Interface

This example only works in QLab 5 and QLab 4.1 or later.

This method is a simplified version of a workspace programmed by Andy Leviss. His original controls photographs and name captions for a video title sequence for a large number of roles with many alternates or understudies. It also has sophisticated features like mirroring changes to a backup QLab system. This simplified example is for voiceover audio cues in a play with two characters with a single understudy for each part. Here it is in action; best viewed full screen:

On the right is the cue cart which contains six Start cues. Each column represents a character and contains buttons for selecting which cast member will be playing each character, or in the case of the third column whether an announcement appropriate for a matinée or evening performance is played. As each cue is clicked, the selection is indicated by a change in color and by the disarming and arming of cues in the main cue list, on the left, to correspond to choices for that performance. Because each selection requires a number of cues to be executed, the cart cues are Start cues which trigger a Group cue in a separate cue list which contains Network cues appropriate for each selection.

At the top is a pre-show announcement which has two versions, one of which is armed to play depending on the cart selection, and the other of which is disarmed.

Then, there is a short recorded dialogue sequence between two characters, Thomas and Florence. For each voiceover, there is an Audio cue for each cast member who may be playing the part in a Group cue set to “start all children simultaneously.” Only one cue is armed. The example only uses two roles, each one covered by two actors, but it is easy to expand the number of roles and alternates for each role.

If the “Thomas Played by Daniel Fogerty” cue is clicked, a cue numbered “select.thomas.daniel” is started. This is in a cue list called “Understudy Handlers” which contains one Group cue for each Start cue in the cart:

Character cue list

When the cue “select.thomas.daniel” is triggered, it first disarms all cues in the main cue list whose numbers start with thomas by means of a Network cue, which sends an OSC message composed from the information in the settings tab: thomas.* for the cue number, armed as the command, and 0 as the parameter. This will result in this OSC message being sent:

/cue/thomas.*/armed 0

In QLab 5, this can either be sent to localhost via a patch of type OSC Message, or the message can be constructed in a Network cue with a patch of type QLab 5 like this:

Disarm Thomas

The asterisk denotes a wildcard which means any other text, so cues including thomas.oliver.3 and thomas.daniel.1 would also be disarmed.

The next cue in the Group arms the selected cast members voiceovers for that character using a network cue which results in this OSC message:

/cue/thomas.daniel*/armed 1

Again, either using a Network cue with an OSC message or QLab 5 type patch.

This will arm all cues that start with thomas.daniel so all voiceovers including thomas.daniel.1 and thomas.daniel.4 will be armed. The next two cues set the colors of the Start cues in the cart to indicate the selection in a similar way. The color is cleared in all carts whose cue numbers begin cart.thomas, and then switched to purple for cart.thomas.daniel

The clever thing with this approach is the dot numbering style.

  • Cues are numbered characterName.castMember.number
  • Carts are numbered cart.characterName.castMember
  • Group cues triggered by the Start cues in the cart are select.characterName.castmember

This makes it easy to use wildcards to apply the arms and disarms to each set of cues that you want to activate or deactivate. A useful addition, if you are thinking of using a similar workspace frequently, might be some helper scripts to automatically create, name, and number your cues using this complex dot structure. For instance, a script could ask for a character name and cast member in a dialog box, and then create a Start cue in the cart and a Group cue in the handler list with all the wildcard Network cues automatically created. Another script might go through a cue list and find all the cues with the name of a character and “VO” in the cue name, and generate a cue number for it.