A Creative Touch

Previous chapters of the QLab Cookbook have discussed remote controls with touchscreens, but these have all involved a device such as a tablet or phone running a separate piece of software such as QLab Remote or TouchOSC. These arrangements can be cumbersome. In a museum or exhibition setting it is generally much nicer to use a single computer with a touchscreen directly attached, avoiding the complications of syncing multiple devices.

macOS does not have built-in touchscreen capabilities, so we will have to use other tools to create a touchscreen environment for QLab to work in.

This tutorial includes a demo of a kiosk-style quiz machine. QLab handles all the graphic elements and quiz logic, while touchscreen elements are enabled using a commercial utility that gives macOS touchscreen capabilities and a custom-built app that translates touchscreen activity into OSC messages to control QLab.

The QLab workspace and custom app are included in the downloads for this chapter. If you don’t have a touchscreen, the workspace is fully functional using a mouse.

Here it is in action

QLab outputs video to a Syphon output.

The Syphon output is sent to a custom app, which displays the video on the touchscreen and overlays a grid of up to 30 transparent buttons.

A touchscreen driver utility acts at the macOS level to convert screen touches to mouse clicks to press the transparent buttons.

When a button is pressed, the custom app sends an OSC message to QLab with the number of that button.

How it Works

The touchscreen

Well-built touchscreens have become much cheaper in the last few years. The screen used in this demo is a Prechen 1920 × 720 (8:3) display, which is available for less than $100 (USD). It has a solid black bezel, no front panel controls, and a VESA mount. It could easily be mounted in an aperture in a panel in an exhibition or museum setting, with no controls or connectors accessible.

The touchscreen driver

A good touchscreen driver compatible with macOS can cost almost as much as a touchscreen monitor. The driver used in the demo is made by Touch-Base, Ltd., a company in the UK.

This software is used on many large-scale shows in the UK to run utilities that manage wireless microphones. It can enable a cast member’s microphone to be selected for monitoring by touching an on-screen button that displays their name and photograph. Touch-Base Ltd also makes OEM drivers for some significant display manufacturers. These drivers are bundled with touchscreen displays to enable them to be used with Macs. This is often much less expensive than buying a large branded touchscreen monitor and driver separately.

If you do plan to buy the driver separately from Touch-Base, Ltd., be advised that the ordering process is a bit involved. That said, it is a great driver precisely tailored to macOS and the touchscreen monitor you intend to use.

The driver settings allow very fine tuning of the touch control. It must be remembered that macOS was not designed to be used with touchscreens but, with care, the settings can be refined to allow very detailed control of on-screen elements. For our purpose, we can be far less careful than some as all we need is the ability to determine which of 30 buttons (or fewer) a finger has prodded.

One brilliant feature of the Touch-Base driver is that it returns the mouse cursor to its original position after the user clicks a button in the app. As long as we arrange for the mouse focus to return to QLab after every press of a touchscreen button (which inevitably switches mouse focus to our custom app,) touchscreen activity does not interfere with QLab’s regular operation.

The Touch-Base driver installs a menu bar icon called UPDD Commander, from which its settings pane can be accessed.

In the General tab, check the box labeled Reset mouse cursor after a gesture action ends.

UPDD General tab

The Touch Behaviour tab has a slider to set the sensitivity of the gesture (touch) detection.

UPDD Touch Behaviour tab

In the Touch Gestures tab, under the Clicking heading, set Search for clickable UI elements to 10 pixels. This will allow two buttons to cover one graphic element and still send a button-pressed message even if the press is precisely at the border between two buttons.

UPDD Gestures tab

You can experiment with other settings for more advanced control.

ScreenZones

The custom app used in this tutorial, included in the downloads as a compiled app and also as a source composition, is programmed in Vuo. The app is named ScreenZones.

Vuo is a visual programming environment similar to the now deprecated Quartz Composer but with far more features. You program it by adding and connecting nodes in a composition. Then, you can export the composition as a stand-alone app.

Vuo can receive, analyze, process, generate, and transmit audio and video through core Apple technologies and other software and hardware devices, including Syphon, NDI, and Blackmagic. It can also send and receive MIDI, OSC, Art-Net, and serial messages.

Vuo was developed by Kosada in Athens, Ohio, US. A free version with a slightly limited feature set is available for personal use and some qualifying small businesses and professionals. The paid version has all the features enabled and a license for commercial use.

Here’s a screenshot of an overview of the Vuo composition from which the ScreenZones app was compiled.

The ScreenZones Vuo project

The Vuo composition comprises many interconnected nodes, each performing a single task or function.

We’ll zoom into each section later in this chapter, but before we do this, here’s a description of the main parts of the composition and their functions.

The area with the yellow background at the top left of the screenshot shows the nodes that receive the Syphon video feed from QLab, superimpose the transparent buttons on top of it, and output the video to the touchscreen display.

The app is entirely controlled by OSC messages from QLab. Since the app is not programmed to store data, the entire set-up is sent from QLab each time it is run. This is best achieved by including all the set-up OSC messages in a cue that runs automatically at start-up.

OSC data is received and filtered by address in the orange OSC control area on the left of the screenshot.

The pink area in the bottom left has nodes that define the settings for the buttons’ appearance. In use, the buttons are invisible, but for programming purposes it’s helpful to see them so that graphic elements generated by QLab can be precisely aligned.

The three green columns in the middle of the composition contain the nodes for the 30 buttons, together with the switches that activate and deactivate them and the nodes that define the message each button will send when it is pressed.

The orange OSC area to the right of the buttons contains nodes that format the button messages as OSC to send to QLab.

The Grid node in the green area to the right of the composition arranges the specified number of rows and columns of buttons into a regular grid that entirely covers the video content sent from QLab.

ScreenZones supports up to ten columns and up to five rows, as long as columns × rows is less than 30. Generally, the layout will be chosen to produce the correct-sized buttons for any given use. Here’s a video of all the screen layouts from 1 × 1 to 6 × 5.

Video nodes

Video nodes

Syphon video is received from a Syphon output in QLab named QLabTouchScreen.

It can be replaced by a grid generated by the Make Checkerboard Image node. Other nodes set which screen will be used and the dimensions for the display area of the Syphon feed on that screen. (Alternately, these could be set using the dimensions of the actual Syphon feed, but because QLab doesn’t activate Syphon until a Video, Camera, or Text cue is running, it’s safer to explicitly set the dimensions ahead of time.)

The Render Layers to Window node outputs video to the touchscreen display on Layer 1. Layer 2 receives the button positions from the Grid node (not shown). These buttons are usually transparent (alpha 0) but can be made visible as an overlay using the /buttonsVisible message discussed below.

It also sends the updated window data (which comprises the Syphon video and the overlaid buttons to the window port of all 30 buttons.

OSC nodes

OSC nodes

Control messages are received from QLab on port 8040 and sorted by address using the Filter by Address nodes; the values attached to these addresses as arguments are extracted using the Get Message nodes (renamed in the demo composition according to their function).

The OSC addresses used are, from top to bottom:

  • /height {number} - the height of the Syphon feed to be received from QLab in pixels.
  • /width {number} - the width of the Syphon feed to be received from QLab in pixels.
  • /cursor {1 or 0} - whether the mouse cursor is visible or not. With Touch-Base drivers, this can be set to 1 all the time.
  • /screen {number} - the index of the display to use, according to the order set by macOS in System Settings. 1 is the primary, 2 is the second monitor, 3 is the third, etc.
  • /column {integer} - a number between 1 and 10 which defines the number of columns used.
  • /row {integer} - a number between 1 and 5 which defines the number of rows used.

The following messages enable or disable buttons on the grid and set their visibility:

  • /allButtons {1 or 0} - enable or disable all buttons.
  • /buttons {string} - string is a list of button numbers that should be enabled, separated by commas

e.g. /buttons "1,3,5,7,9,11,13,15,17,19,21,23,25,27,29"

  • /buttonsVisible {1 or 0} - 0 = transparent, 1 = pale red, semi-transparent (alpha 0.5).

Button visibility nodes

Button visibility nodes

The Make Color nodes (renamed with the colors produced) define the four colors with alpha values used when the buttons are visible.

The Select Input nodes (renamed with their function) switch the colors of the Background, border, and text labels of the buttons in accordance with the last /buttonVisible OSC message received

The Make Action Button Theme node defines all aspects of the buttons, including the label font, positioning, and height and width. In the next section, we will examine how these are calculated. Its output is connected to the Theme input port of all 30 button nodes.

Math and processing nodes

Most of the nodes in this section have fairly rudimentary functions. e.g. adding 1 to a 1 or 0 OSC value to select an input 1 or input 2 option on a Select Input node. Other nodes limit the range of values allowed and clamp (saturate) them to the minimum or maximum values if out of range.

Dimensions in Vuo

All dimensions in Vuo are set using the Vuo coordinates system. This means that the video output is consistent regardless of output scaling.

The horizontal dimension always has a range of 2 (-1 to +1).

The vertical dimension’s range is variable depending on the aspect ratio. Our 8:3 display has a height-to-width ratio of 0.375. Because the horizontal range is 2, we multiply the height ratio by 2 as well, so the range of the Vuo dimension is 3/8 x 2 =0.75 (-0.375 to + 0.375).

To determine the height and width of the buttons in Vuo, we divide the number of rows by 2 and multiply by the ratio. So, for six columns of five buttons, each button has a width of 2 / number of columns and a height of 2 / number of rows * the height ratio. That means width is 2 / 6 = 0.3333 and height is 2 / 5 * 0.375 = 0.15.

Six buttons at 0.3333 units wide will exactly fit the width of the output, and five buttons at 0.15 units high will exactly fit the height of the output, assuming an 8:3 ratio screen.

The OSC message to set which of the 30 buttons are active is something like:

/buttons 1,3,5,8,10 i.e. a comma-separated list button numbers with no spaces.

To use this list, we first need to switch all buttons off and then process the list received from QLab to enable the correct buttons. The 30 buttons are processed in blocks of eight.

Here are the first eight switches which will activate the required buttons:

When a buttons list is received, an event is sent from the Filter Address node to a node that sends False to all 30 switches (of which eight are shown in this screen recording.)

When the list is processed, if a number is between 1 and 8, it is sent to the Select Output Node for switches 1-8, which sends True to the switch with that number.

The Select Output and Select Latest Nodes are repeated for buttons 9-30.

Button nodes

Here are the nodes for the first eight buttons:

Button nodes

The Select Output nodes in the Buttons On/Off column receive the false/true boolean values from the Select Latest nodes from the previous section.

The In ports of these nodes receive the updated window data from the Render Image to Window node in the Video section.

If the Which port of a button’s Select Output node is true, the Window data is output; if it is false, the data is dumped.

The Window ports of the Make Action Button nodes in the button column are connected to the true outputs of a Select Output node. If that node outputs window data, the button is activated, but if it has dumped its data, it is deactivated.

The Make Action Button nodes also have a Theme Input port, which is connected to the Make Action Button Theme node we looked at earlier in the Button Visibility section, which sets the colors to make the buttons visible or transparent.

Each button has an Updated Layer output port, which connects to the Grid Node, which we will examine shortly, and a Pressed output, which outputs an event when the button is pressed.

The Pressed event triggers a Make Message node, which outputs an OSC address message for each button. For example, Button 1 will trigger a /cue/TS1/start message.

OSC out to QLab Nodes (ButtonPress Messages)

OSC out nodes

The output of the Make Message nodes is passed through a Select Latest node for each group of eight buttons and then another Select Latest node, which connects all these to the Send Output Messages node.

This means a message from any of the buttons will arrive at the Send OSC Message node and will be sent to the address and port set by the Specify OSC IP Output node. In this case, we’re using 127.0.0.1 for the local computer on QLab’s default OSC receive port, 53000.

When any message is about to be sent, an event is sent from the Select Latest node, which receives from all the Select Latest nodes for each group of 8 buttons to another Make OSC Message node named Re Activate QLab. This sends the OSC message /cue/TSF/start to QLab.

Cue TSF is a Script cue in the QLab workspace that tells QLab to activate. When the touchscreen button is pressed, the ScreenZones app comes to the foreground and therefore has the mouse and keyboard focus. By running this Script cue, focus returns to QLab.

Grid Nodes

Grid nodes

The Arrange Layers In Grid node receives the updated layer output of all 30 button nodes and arranges them in a grid.

The grid is defined by the data received by its Width and Height ports and the columns and rows. Width and height are in Vuo dimensions, so the width is permanently set to 2. The height is received from one of the nodes in the Math section, which calculates the height in Vuo units by taking the screen height in pixels (720 in the demo), dividing it by the screen width in pixels (1920) and multiplying it by 2 (to match the -1 to +1 range of the width). This height in Vuo units for our 1920 × 720 screen area is 0.75 Vuo units.

The Grid node also received the column and row values when QLab initially set them with the /row and /column messages.

The Grid node outputs complete window data, including the Syphon feed from QLab and all the button images arranged in a grid if they are set to be visible. It then sends them to the Layer 2 port of the Render Layers to Window node in the Video Nodes section.

The QLab workspace

In Workspace Settings → General, QLab is set to start cue “START” when the workspace opens automatically.

Workspace settings

Cue START is a Timeline Group cue.

Cue START

The cues in this Group do the following things.

  1. Open the app ScreenZones using this script:
tell application "ScreenZones" to activate
delay 0.5
tell application id "com.figure53.QLab.5" to activate
  1. Stop the main cue list.

  2. Load the first quiz question (Cue Q1).

  3. Set all the targets of the Start cues that receive the button presses from ScreenZones to a dummy Memo cue numbered “OFF”.

These Start cues form the heart of the quiz engine:

Quiz Start cues

They are numbered to match the OSC messages that ScreenZones sends in response to touchscreen button presses.

Each quiz question will set the cue targets of these Start cues to the possible button presses for that question.

The Timeline Group cue, nested in the main Timeline Group and named CONFIGURE, contains a set of Network cues that send OSC messages to ScreenZones on port 8040. These messages configure the screen that will be used for the quiz.

This needs a patch to be set up in Workspace Settings → Network.

Network settings

In the demo setup, these cues set the touchscreen to screen 3, (/screen 3) and set the pixel dimensions for the touchscreen to /width 1920 and /height 720.

We hide the buttons and the grid with /buttonsVisible 0 and /grid 0.

Button visibility cart

The cues in this cart allow the touchscreen buttons to be made visible, revealing their alignment with the graphic elements of the quiz questions. If you pop the cart out by pressing the Open in New Window button, you can show and hide the buttons as we examine the programming of each quiz question example.

Button visibility

Question 1 (Start First Group cue “Q1”)

Question 1

The Network cues in the Timeline Group cue configure the button layout to match the screen graphic. Q1 uses a single graphic to display the question and the images for each possible answer.

Question 1

If we run Q1 and use the button visibility cart to make the buttons visible, we will see how the button layout relates to the graphic.

Question 1 with buttons

Buttons 4, 5, and 6 match the position of the images. Buttons 1 - 3 are not required and can be disabled.

The setup OSC messages for the buttons are:

/row 2
/column 3
/buttons 4,5,6

The Start cue starts cue “WIPE”. This is a short animation used between questions throughout the quiz. There is also an Audio cue for the background sound of the question.

The Group cue “TSQ”, which contains the Start cues triggered by the touchscreen, is armed.

The three Target cues set the cue targets for buttons 4-6.

Question 1 target 4

The Target for cue TS4 (button 4) is set to cue “A1.1 ANSWER A”.

TS5 is set to cue “A1.2 ANSWER B”.

TS6 is set to cue “A1.3 ANSWER C”.

Cues “A1.1” through “A1.3” are Timeline Group cues, which contain all the cues required for the corresponding button.

If the spaceship image is tapped on the touchscreen (which is a wrong answer,) /cue/TS4/start is sent from ScreenZones to QLab.

Cue “TS4” is a Start cue which has its cue target set to cue “A1.1”.

The cues in Timeline Group cue “A1.1”:

  • Stop the Text cue named TRY AGAIN.
  • Display the text “WRONG. THATS A SPACESHIP.”
  • Play the spaceship sound effect.
  • Disarm the touchscreen cues.
  • Start cue “AW1”.

Cue “AW1”:

  • Stops all the Text cues.
  • Displays the text “TRY AGAIN.”
  • Arms the touchscreen cues.

If the submarine image is pressed (which is the correct answer,) /cue/TS5/start is sent from ScreenZones to QLab.

Cue “TS5” is a Start cue, which has its cue target set to cue “A1.2”.

The cues in Timeline Group cue “A1.2”:

  • Stop the Text cue named TRY AGAIN.
  • Display the text CORRECT. A SUBMARINE IS A BOAT.
  • Play the submarine sound effect.
  • Disarm the touchscreen cues.
  • Start the main cue list to play the cue named Cue to delay autoload, which fades Q1 and advances to the next question.

In addition to performing these functions, these cues also act as a break in the cue list to prevent all the cues in the list from auto-loading at once, which would be the case if each question just had an auto-follow to the next question.

If we wanted to make another question similar to cue Q1, we would:

  • Copy and paste Cue Q1 to duplicate it.
  • Add different cue numbers to the Question and the Answers Groups.
  • Change the Target cues to match these cue numbers.
  • Change the contents of the “Answer” and “Wrong” Timeline Groups to contain cues relevant to the new question.

If we wanted to change the number of answers, e.g. to 4, We could use the button visibility cart to make the grid and buttons visible, then change the columns to 4.

We could then screenshot the display to create a template to make a new question graphic with four answers beneath buttons 5 - 8:

Four-answer template

The button set up OSC messages for that question would be:

/row 2
/column 4
/buttons 5,6,7,8

Questions 2 - 4*

A typical quiz format has a fixed number of answers, indicators for the chosen answer and the correct answer, music beds, stings, etc.,

We can simplify the programming of a quiz in this format by reusing one Group cue for the quiz engine and using a separate Timeline Group cue for each question to modify the quiz engine cues.

Here’s what a question in this format looks like:

All the questions use the same quiz engine, which is a Timeline Group in the cue list numbered QUIZ.

QUIZ Group

A Question with the buttons overlaid looks like this:

Quiz buttons overlay

Cue “QUIZ” starts cue “TIM” which:

  • Plays one of three music beds at random to underscore any question.
  • Sets up the buttons in a 5 × 4 arrangement with buttons 7 - 10 active.
  • Displays the quiz background graphic.
  • Builds the questions and answers by sequentially adding the question text (cue “QUIZTQ”) and the four possible answers (cues “QUIZTA” - “QUIZTD”) to the background graphic.
  • Sets the targets of the Start cues “TS7” - “TS10” to Cues “QUIZA” - “QUIZD”

Cues “QUIZA” to “QUIZD” are Timeline Groups each containing the following cues:

  • A Text cue with an orange square bullet, which will light up the appropriate area on screen in response to the contestants’ answer A, B, C, or D.
  • A Disarm cue to disarm the Text cues, preventing further contestant input.
  • A Start cue which targets cue “QUIZAC” (correct answer.)
  • A Start cue which targets the music sting that accompanies the answer.

Cue “QUIZAC” has a pre-wait of eight seconds to build tension!

After the pre-wait elapses, it:

  • Starts the music sting for the correct answer.
  • Starts cue “QUIZY”, which is itself a Start cue that targets one of the Cues “GNA” — “GND” to reveal the correct answer.
  • Starts the main cue list after a five second delay to move on to the next question.

Each question has a Timeline Group cue containing cues to configure and then start the quiz engine (cue “QUIZ.“)

The text for the questions and answers is stored in the notes of five Script cues.

The script in each of these cues is almost identical:

Script cues named “QUESTION” and “ANSWER 1” - “ANSWER 4” set Text cues “QUIZQ” and “QUIZA” - “QUIZD” to display the question and four possible answers.

set theTextCue to "QUIZTQ" --Text Cue in Quiz Engine to change
tell application id "com.figure53.QLab.5" to tell front workspace
	set myCue to last item of (cues whose running is true and q type is "script")
	set text of cue theTextCue to notes of myCue
end tell

The Script cue self-identifies using

	set myCue to last item of (cues whose running is true and q type is "script")

so that its notes can be copied to the cue set in the first line of the script.

The Script cue “CORRECT ANSWER A OR B OR C OR D” sets the target of cue “QUIZY” in the quiz engine to whichever cue “GNA” - “GND” should be run to reveal the correct answer. These cues are Text cues with a scaled square bullet that lights up the matching square in green.

set theTextCue to "QUIZY"
tell application id "com.figure53.QLab.5" to tell front workspace
	set myCue to last item of (cues whose running is true and q type is "script")
	set cue target of (cue theTextCue) to (first cue whose q number is ("GN" & (notes of myCue as text)))
end tell

Text in notes

In between each question is a Timeline Group named “Cue to delay autoload” that fades out the previous question, resets the cue targets of cues “TS1” - “TS30” to a dummy Memo cue numbered “OFF”, and then starts the main cue list to start the next question.

Question 5

Question 5, “Instruments,” is a complex quiz that requires the contestant to identify 22 musical instruments based on short audio recordings.

This section uses all 30 buttons. All the graphic and text elements are individual Video cues (stills) or Text cues with custom geometry to position them beneath the 30 buttons.

Here are all the graphic elements with the button visibility switched on:

Instruments buttons

Cue “Q5” is a Timeline Group that:

  • Uses an Arm cue to arm all cues in cue “Q5”.
  • Stops the Group cue “CUE ANSWERS”.
  • Runs a Script cue named “Correct Answer Counter” with this script:
tell application id "com.figure53.QLab.5" to tell front workspace
	set myCue to last item of (cues whose running is true and q type is "script")
	repeat until ((count of (cues whose running is true and q type is "text")) > 22)
		delay 0.5
	end repeat
	delay 2
	start cue "CHEER"
	delay 5
	set playhead of front cue list to cue "Q1"
	delay 1
	stop cue "Q5"
	set playhead to cue "Q1"
end tell

This counts how many Text cues are running. If the number exceeds 22, then all 22 questions have been answered (one Text cue is the question); a loud cheer is played (cue “CHEER”), and the playhead resets to cue “Q1”.

The instrument pictures, the text of the question, and a white background are then displayed.

Group cue “TSQ”, which contains the Start cues triggered by the touchscreen, is armed.

The Group cue “INST” is started to play the first musical phrase.

Cue “INST” is a Start First Group cue that:

  • Resets all the cues run by touchscreen responses in the ScreenZones app to target Cue “WRONG”.
  • Arms those cues and then starts a Random Group cue containing a Timeline Group cue for each instrument.

Each of these groups is numbered with a two-letter code for the instrument (e.g. “AG” for acoustic guitar) and contains:

  1. An Audio cue for the musical phrase played on that instrument.
  2. A cue to set the notes of cue “INST” to the teo-letter cue number.
  3. Target cue(s) to change the cue target of the touchscreen button(s)that the instrument picture is placed behind. Pictures of large instruments may have multiple buttons set. The cue target of these buttons is changed to the cue name for that instrument in the Group cue “ANSWERS,” e.g. GTRA for Acoustic Guitar.

Q5 answers

The targets of all the cues in the Group cue “TSQ” (which contains the start cues triggered by OSC messages from the touchscreen buttons,) are initially all set to start cue “WRONG”, and when an instrument is played from the random group, the button cue that covers that picture has its target set to the answer for that instrument.

If the button that the contestant presses is not over the picture of the instrument that is playing, cue “WRONG” is started.

Cue “WRONG” is a Timeline Group which:

  • Uses a Text cue to place a giant red “X” over the entire screen;
  • Fades the red X out three seconds later;
  • Plays an Audio cue with a “wrong answer” musical sting;
  • After a few seconds, replays the instrument Audio cue again for another try;
  • When the correct button is pressed for the instrument, the answer cue matching that cue is started.

All the instrument answer cues contain:

  • A Text cue which places the instrument’s name next to its picture to show it has been correctly identified;
  • A Disarm cue to disarm the instrument Group to prevent it from playing again until all instruments have been identified;
  • A Start cue which starts cue “CORRECT”.

Cue “CORRECT” is a Timeline Group which contains:

  • An Audio cue with an applause sound effect;
  • A Disarm cue that disarms the touchscreen cues until the next sound is played;
  • A Start cue that starts cue “QINST”. This resets all the targets for the touchscreen buttons to cue “WRONG”, plays another instrumental phrase, and sets the cue target for the button(s) that cover the picture of that instrument to the relevant answer cue.

Adapting other workspaces to use touchscreen buttons

Many QLab projects are obvious candidates for adaptation to use a touchscreen. This video demonstrates using a touchscreen with a wireless microphone monitoring station based on the chapter entitled Crew To Listening Stations

In the demo, the wireless microphone inputs are being fed with a multitrack recording with a looping identification announcement for each channel.

All the cast images and names are AI-generated in Photoshop and ChatGPT. Any resemblance to real people is entirely coincidental.

Monitor screen display

How it Works

First, you should read the Crew to Listening Stations chapter to understand the essential operation of the original workspace.

Most of the touchscreen adaptation details will be familiar from the quiz example earlier in this chapter. The demo uses the same 1920 × 720 touchscreen and has the same “Button Visibility” cart for graphics and text alignment purposes. Here’s the demo workspace with the button visibility on.

Monitor button overlay

A Timeline Group cue numbered “START” is set to open automatically. This cue:

  • Opens the ScreenZones app;
  • Sends OSC messages to the ScreenZones app to configure the touchscreen buttons as a 10 × 2 grid;
  • Starts Video and Text cues to display a photo, character name, and cast member name for the wearer of each of the wireless microphones.

Each of the Video cues for the cast photos has a video effect applied. When enabled, the video effect desaturates the photograph to black and white and halves its brightness to indicate that the microphone channel is muted for monitoring.

Monitor cue start

The Group cue numbered “TSQ”, which contains the Start cues triggered by the touchscreen buttons, is almost identical to the one in the Quiz example.

Monitor cue TSQ

Because this is a single-function workspace, the cue targets for the Start cues are fixed. They start cues in a cart, one button for each character. The cart can be used if a touchscreen is not available.

Listening cart

Each cue in the cart is a Start cue which starts a corresponding cue in the cue list named “The Mechanics”.

This cue list contains the Mic cues for monitoring the wireless microphones together with the button logic to provide feedback to the workspace user.

The original workspace operated in solo mode all the time, so that when a new microphone was selected, all the others were muted. The touchscreen version offers a choice of solo mode or toggle mode, where each microphone can be toggled on and off. The mode itself can be toggled by double-clicking the “ALL OFF” button on the touchscreen or listening cart.

Here are the Mic cue and the “Toggle” Group cues that are triggered by the first two buttons:

The Mechanics

Cue “MON” is a Mic cue set up for 24 input channels with all wireless microphones matrixed to the first two outputs for monitoring, but with the input gains set silent (no value):

Mic cue matrix

Cue “M1” is the Timeline Group cue started by the listening cart button “C1” (which was started by touchscreen button 1.)

The first cue in this and every other button group has a Start cue to ensure the Mic cue is running.

A Start cue targeting a cue numbered “OFF” will be deactivated or activated depending on the state of the solo mode (set by double-clicking button 20.) If solo mode is ON, then the cue will be enabled and will silence all currently selected wireless microphones before performing the main button toggle actions.

All the button cues contain Arm and Disarm cues, which toggle the button on or off each time the cue is started.

If the mode is changed to ON (i.e. the ON cue is armed and the OFF cue is disarmed), when the cue is started:

  • Button “C1” in the listening cart changes color to red.
  • The black and white video effect applied to the image is turned off, and the photo changes to color to indicate that the microphone is selected for monitoring.
  • A Fade cue with a duration of zero snaps input 1 to 0 dB to enable that input to be heard.

Input 1 on

If the mode is changed to OFF (i.e. the OFF cue is armed and the ON cue is disarmed), when the cue is started:

  • The color of button “C1” in the listening cart is changed to blue.
  • The black and white video effect applied to the image is turned on, and the photograph changes to black and white to indicate the microphone is not selected for monitoring.
  • A Fade cue with a duration of zero snaps input 1 to -INF to mute it.

Input 1 off

Cues “M2” through “M19” are similar; they are configured to adjust the corresponding Video cues and input levels, and to respond to the corresponding touchscreen buttons.

The Mechanics, part two

Cue M20 has cues to mute all microphone channels and set the displays accordingly (all cart buttons to blue, all cast photos to dimmed black and white.)

There are also two cues, a Start cue numbered “a” and a Stop cue numbered “b” targeting cue “a”. These cues are used in a handy and useful technique to get a cart cue to perform a different action if it is double-clicked.

Both cues are started together in the Timeline Group, but cue “a” has a pre-wait that is 0.1 seconds longer than cue “b”.

The Stop cue has its second trigger action set to hard stop in the Triggers tab.

Hard stop

If a second click starts to cue “M20” within 0.5 seconds, then cue “a” is not stopped because cue “b” has hard stopped before the end of its pre-wait.

Cue “a” starts and toggles the “SOLO” state.

If the mode is changed to ON (i.e. the ON cue is armed and the OFF cue is disarmed), when the cue is started:

  • All cues with a number beginning with “SOLO” are armed;
  • The name of button “C20” in the listening cart is changed to “ALL OFF • SOLO ON”;
  • A Text cue with the word “SOLO” is placed on touchscreen button 20.

If the mode is changed to OFF (i.e. the OFF cue is armed and the ON cue is disarmed), when the cue is started:

  • All cues with a number beginning with “SOLO” are disarmed;
  • The name of button “C20” in the listening cart is changed to “ALL OFF • double click for SOLO MODE”;
  • The Text cue with the word “SOLO” is stopped.

When the “SOLO” mode is toggled ON, pressing a button cancels the previous channel selection.

Touch Base Drivers are a product of Touch Base Ltd.

Vuo by Kosada in Athens, Ohio.

All quiz images and sound effects public domain.

All cast headshots AI-generated in Photoshop

All quiz instrument phrases performed and recorded by Mic Pool ©2024, all rights reserved.