CuePlayer Tutorial:
Filter:
CuePlayer/Tutorials (extension) | Tutorials

CuePlayer Tutorial
ExtensionExtension

Composing & Performing with the CuePlayer
      

This document introduces the CuePlayer and presents a workflow for composing and performing real-time and mixed electronic works. Full details of the class can be found in the CuePlayer helpfile.

The CuePlayer is a tool which helps a composer to organise processes and musical material in bundles (cues) and execute them when needed during the course of a piece. It is particularly applicable to musical works incorporating real-time electronics and acoustic instruments; it may also be handy in any scenario where the composer wishes to organise, schedule and trigger bundles of processes.

This tutorial has been written having in mind composers who may not be highly proficient in SuperCollider programming, but who have an adequate understanding of the language and are competent in electronic and/or instrumental composition. If you are a composer who is looking for a tool to write music for instruments and electronics with SuperCollider, this is especially for you.

Basics

The first thing to do is to create a CuePlayer instance and assign it to a variable. Then we may define a tempo for the piece (in bpm) at which the processes can be evaluated, (default is 120 bpm).

We may now start building the cues. A cue is a bundle of code placed within a function which is linked to a cue-number. All cues are organised into an Array and later on they may be triggered via code, a GUI window or any device/software which outputs midi/osc data, such as a footpedal or a Digital Audio Workstation (DAW). Think of the cue-number as the index of the cue-list which holds all processes.

An easy way to build a cue is with the put method which allows explicitly to create a cue at a specific cue-number.

We could also add a cue at the end of the cue-list in a similar fashion.

When we want to execute a cue we call trigger, specifying also a cue-number.

The setCurrent method sets the current cue and the next method is a quick way to trigger the next one.

Most often you will be working along with the CuePlayer window which allows the CuePlayer to be controlled via a Graphic User Interface. Through it you can monitor input/output buses, trigger cues, use a timer and a metronome and control the server's level amongst others. It is brought up with the gui method which has a handful of options to adjust it to your needs. See the CuePlayer helpfile for more.

Spend a little time to get familiar with this window. You can monitor up to 8 input buses and up to 48 output buses which should be enough for most pieces, but you could easily hack the source code to change this if you like. The big green-button triggers the next cue and the white number-box right next to it displays and sets (when needed) the current cue. The timer displays the time elapsed (usually since the beginning of the piece) and the metro-button starts/stops the metronome; its volume, output-bus and tempo can be adjusted. At the bottom of the window there is a mute button to silence everything and a volume-slider to control the level of the server.

For each cue we can attach text which may be subsequently displayed on screen. This may prove useful for the laptopist in order to see what each cue does while the piece unfolds and to communicate instructions and information to the performer. Have a look at the CueInfo's helpfile for information on this feature.

MIDI & OSC

Cues can be triggered via MIDI and OSC events.

To use midi you need to connect to your midi-devices first; then you may set up a midi-trigger on a given note and channel to trigger the next cue by calling the midiTriggerNoteOn method, this allows to evaluate sequential cues upon receiving a midi-note through a specified midi-channel. Bear in mind that the CuePlayer starts counting midi-channels from 1, (as opposed to 0).

It may also be useful to trigger cues via an external midi-controller. This applies particularly to performance scenarios where the instrumentalist uses a foot-pedal on stage to trigger sequential cues. For this you will need to use the midiTriggerControl method.

There is also the midiTriggerVelocity method which sets up a midi-trigger on a given note and channel based on the note's velocity value. It allows to evaluate specific cues upon receiving a midi-note with velocity (1-127) controlling the cue-number. This method is useful while composing; when the cues need to be triggered externally via a Digital Audio Workstation (DAW).

When you want to trigger cues via the Open Sound Control protocol you can set up an OSC trigger with the oscTrigger method, which accepts a path as an argument (such as '/cueTrigger') and a message. When the message is -1 the next cue will be triggered; any other positive integer will trigger the respective cue.

With sendOSC you may send OSC messages which may be handy while composing if you want to control a DAW that accepts OSC. See the CuePlayer helpfile.

Composing

This section outlines an example workflow for composing musical works for instruments and electronics using SuperCollider. The idea, while composing, is to try to simulate the conditions that emerge during the presentation of a piece, to try to reconstruct adequately the performance scenario in-studio, in order to test the work and solve problems both in musical and technical terms prior to the concert.

This scenario allows to lay out the piece in a familiar environment and audition the instrumental part along with the electronics in SuperCollider which should be triggered exactly where the score depicts. With this workflow a composer can audition the piece while it is being built, test, debug, adjust and predict with consistency how the work will sound in "real-life".

Performing

This section outlines how the CuePlayer can be used when presenting works for instruments and electronics. It's quite straight forward:

Organising

A rather convenient method to organise a piece is to place the individual cues into separate scd documents and then load them in the cue-list.

Both put and add methods of the CuePlayer class accept a timeline as an argument which provides an easy way to schedule processes in the future; for this we need to use an Array with time - function pairs; (time is in beats or optionally in seconds). Here's an example on how to do this.

It is also possible to use scd files in a timeline.

NOTE: When live-reloading is enabled any changes in the scd files are (when saved) active the next time a cue is called, thus allowing for a smooth workflow while composing; this may be disabled to improve performance. See the CuePlayer helpfile.