Built for and performed by Sophia Burgos.
In one episode, namely “Il Campo” (The Field), from my azione musicale “Cronaca del Luogo,” there is a virtual love duet. Two voices and several instruments “fall in love” and follow one another in a constantly renewing relationship.
As we all know, in true polyphony each voice contributes to the whole yet retains its own identity, if not complete autonomy. In Altra voce I have liberated one voice (mezzo-soprano) and one instrument (alto flute) from the whole and developed their respective autonomies and harmonic premises by, among other means, using live electronics.
Altra Voce is a piece for voice, flute, and electronics. It uses an array of six speakers and harmonizers for both performers. Throughout the piece, their signals are panned and pitch shifted depending on the instruction set given by a list of cues in the score. For example, a simple cue might be: “Pan to speaker 1 over 2 seconds. Hold for 3 seconds. Pan to speaker 2 over 2 seconds. Hold for 3 seconds. Repeat.”
To accomplish this I filled out the information of each cue into its own text file, with one for the harmonizer and one for the spatializer. I then built a patch that would interpret the text files as instructions, and carry them out whenever their cue was toggled. For the harmonizer, this was quite simple, and I made use of [qlist] for it. In the image below, you can see that I’m using the [qlist] message format to sequence the intervals used. The first symbol in the message is the time (in milliseconds) to wait before sending the message, the second symbol is which [send] to send the message to, and the third symbol is the value (in semitones) to transpose to.
The spatializer was a different story, however. I needed to be able to control the six speakers independently. At times, multiple speakers had to be panned to simultaneously. For that, I used a different format for the text file and built my own solution using [coll]. This again can be seen below.
The text file is read as follows: Any numbers after the comma are used to determine which speakers are to be panned to, save for “0” which means to pause the sequence as it is. The number before the comma is how much time in milliseconds it will take to perform the action. Using the instructions in the image, the sequencer would activate speakers 1 and 3 over 200ms, hold for 500ms, activate speaker 5 over 200ms, hold for 500ms, etc.
Looking at the spatializer patch itself now, the first step is to make a count of how many speakers are going to be activated. If it’s more than one, those speakers are activated over the time specified in the text file, and any other speakers are turned off similarly. If it’s less than one speaker in the list, a check is made to see if the number is “0”. If it is, the sequencer pauses for the time specified, before moving on to the next command. If not, the correct speaker is activated, and all others are muted.
For one cue, the panning is randomized. For that, I used the patch below. The idea is the same, where a speaker is activated and the rest are muted over 200ms. It then is meant to pause for a randomly selected interval, shown in the message box below. The score also notes that speaker 1 should be chosen at a higher probability than the others. To do this, I selected a random number from 0 to 6 and clipped the result between 1 and 6. This gave speaker 1 a 28% chance of activated versus a 14% chance for any other.
Finally, the score also calls for a few samples to be recorded and played back through the spatializer at times. I used gen for this, and gave the option to be able to pre-record the samples if need be. Below is the arrangement used for that. The two are connected such that the sample length is taken from the record patch and sent right in to the playback patch.
I’d like to thank Matt Sargent for helping out on-site for the performance, making some handy on-the-fly patch edits, and generally helping things run smoothly.