A SuperCollider Implementation of Luigi Nono s Post-Prae-Ludium Per Donau

Similar documents
Implementation of an 8-Channel Real-Time Spontaneous-Input Time Expander/Compressor

AURAFX: A SIMPLE AND FLEXIBLE APPROACH TO INTERACTIVE AUDIO EFFECT-BASED COMPOSITION AND PERFORMANCE

Simple motion control implementation

Fraction by Sinevibes audio slicing workstation

for accordion and electronics Bryan Eubanks, 2011/2012

S I N E V I B E S FRACTION AUDIO SLICING WORKSTATION

Edit Menu. To Change a Parameter Place the cursor below the parameter field. Rotate the Data Entry Control to change the parameter value.

cryo user manual & license agreement

2. AN INTROSPECTION OF THE MORPHING PROCESS

Voxengo Soniformer User Guide

Tiptop audio z-dsp.

Music for Alto Saxophone & Computer

INTRODUCTION AND FEATURES

Eventide Inc. One Alsan Way Little Ferry, NJ

Original Marketing Material circa 1976

XYNTHESIZR User Guide 1.5

Sequential Logic. Introduction to Computer Yung-Yu Chuang

PSYCHOACOUSTICS & THE GRAMMAR OF AUDIO (By Steve Donofrio NATF)

IMS B007 A transputer based graphics board

CSE 352 Laboratory Assignment 3

CFX 12 (12X4X1) 8 mic/line channels, 2 stereo line channels. CFX 16 (16X4X1) 12 mic/line channels, 2 stereo line channels

Eventide Inc. One Alsan Way Little Ferry, NJ

Journal Papers. The Primary Archive for Your Work

Design and Implementation of Timer, GPIO, and 7-segment Peripherals

Manual written by Dan Powell and James Thompson Document Version: 1.0 (09/2009) Product Version: 1.0 (09/2009)

The Cocktail Party Effect. Binaural Masking. The Precedence Effect. Music 175: Time and Space

Reference Manual. Using this Reference Manual...2. Edit Mode...2. Changing detailed operator settings...3

3.8.2 Patterns and the Pattern Chainer Cycle Presets Loop Designer Credits... 42

Presents. Crystal Glasses V3. for NI KONTAKT 4+ Go to Index: 2

Debugging Memory Interfaces using Visual Trigger on Tektronix Oscilloscopes

TABLE OF CONTENTS TABLE OF CONTENTS TABLE OF CONTENTS. 1 INTRODUCTION 1.1 Foreword 1.2 Credits 1.3 What Is Perfect Drums Player?

Short Set. The following musical variables are indicated in individual staves in the score:

reverberation plugin

FX Basics. Time Effects STOMPBOX DESIGN WORKSHOP. Esteban Maestre. CCRMA Stanford University July 2011

YAYUMA AWARENESS LINE PROCESSOR

Musical Virtuosity and Live Notation

Eventide Inc. One Alsan Way Little Ferry, NJ

Simple Harmonic Motion: What is a Sound Spectrum?

Jam Tomorrow: Collaborative Music Generation in Croquet Using OpenAL

Computational Parsing of Melody (CPM): Interface Enhancing the Creative Process during the Production of Music

Real-time Granular Sampling Using the IRCAM Signal Processing Workstation. Cort Lippe IRCAM, 31 rue St-Merri, Paris, 75004, France

Recommended Operations

1 Welcome to NP02: RHYTHMIC TEXTURES!

MP212 Principles of Audio Technology II

NEWS239 SILVER C M Y BK 12/17 12/20 00/00 op :tobi

Bionic Supa Delay Disciples Edition

MUSICAL APPLICATIONS OF NESTED COMB FILTERS FOR INHARMONIC RESONATOR EFFECTS

SYNTHESIS FROM MUSICAL INSTRUMENT CHARACTER MAPS

VR5 HD Spatial Channel Emulator

Credits:! Product Idea: Tilman Hahn Product Design: Tilman Hahn & Dietrich Pank Product built by: Dietrich Pank Gui Design: Benjamin Diez

AE16 DIGITAL AUDIO WORKSTATIONS

Tempo Estimation and Manipulation

DVS-9000/9000SF System

fxbox User Manual P. 1 Fxbox User Manual

At-speed testing made easy

Agilent Understanding the Agilent 34405A DMM Operation Application Note

hit), and assume that longer incidental sounds (forest noise, water, wind noise) resemble a Gaussian noise distribution.

SCM820 Digital IntelliMix Automatic Mixer SEAMLESS MIXING. ADVANCED CONTROL.

Synthesis Technology E102 Quad Temporal Shifter User Guide Version 1.0. Dec

EAN-Performance and Latency

Radar Signal Processing Final Report Spring Semester 2017

S I N E V I B E S ETERNAL BARBER-POLE FLANGER

Multirate Digital Signal Processing

RetroMod 106 USER GUIDE. TRACKTION COMPANY

Patchmaster. Elektronik. The Pulse generator. February 2013

MTL Software. Overview

Kenaxis & Kenaxis VBAP the manual

A Composition for Clarinet and Real-Time Signal Processing: Using Max on the IRCAM Signal Processing Workstation

2

Studio One Pro Mix Engine FX and Plugins Explained

RELEASE NOTES. Introduction. Supported Devices. Mackie Master Fader App V4.5.1 October 2016

Analysis, Synthesis, and Perception of Musical Sounds

OUTER SPACE USER GUIDE

DAT335 Music Perception and Cognition Cogswell Polytechnical College Spring Week 6 Class Notes

Low Power VLSI Circuits and Systems Prof. Ajit Pal Department of Computer Science and Engineering Indian Institute of Technology, Kharagpur

DIGITAL TECHNICS. Dr. Bálint Pődör. Óbuda University, Microelectronics and Technology Institute

OverView D. Barco DLP projection series

ADSR AMP. ENVELOPE. Moog Music s Guide To Analog Synthesized Percussion. The First Step COMMON VOLUME ENVELOPES

Experiment # 4 Counters and Logic Analyzer

Applying lmprovisationbuilder to Interactive Composition with MIDI Piano

Appendix D. UW DigiScope User s Manual. Willis J. Tompkins and Annie Foong

Computer Architecture Basic Computer Organization and Design

Status of Pulse Tube Cryocooler Development at Sunpower, Inc.

Objectives. Combinational logics Sequential logics Finite state machine Arithmetic circuits Datapath

UWE has obtained warranties from all depositors as to their title in the material deposited and as to their right to deposit such material.

Reverb 8. English Manual Applies to System 6000 firmware version TC Icon version Last manual update:

Audiocation Compressor AC1. Version 1.0

This guide gives details of the effects available on the FX selection DMX channels 15 and 17 in the MAC Aura.

1ms Column Parallel Vision System and It's Application of High Speed Target Tracking

Cathedral user guide & reference manual

KAMIENIEC. analog resonant phase rotator. Model of operator s manual rev. 1977/1.0

For sforzando. User Manual

Dancer control slims down while gaining functionality

Vocal Processor. Operating instructions. English

Written Progress Report. Automated High Beam System

Field Programmable Gate Array (FPGA) Based Trigger System for the Klystron Department. Darius Gray

M89 FAMILY In-System Programmable (ISP) Multiple-Memory and Logic FLASH+PSD Systems for MCUs

A Comparison of Methods to Construct an Optimal Membership Function in a Fuzzy Database System

You will be first asked to demonstrate regular operation with default values. You will be asked to reprogram your time values and continue operation

42Percent Noir - Animation by Pianist

Transcription:

Kermit-Canfield 1 A SuperCollider Implementation of Luigi Nono s Post-Prae-Ludium Per Donau 1. Introduction The idea of processing audio during a live performance predates commercial computers. Starting with Thaddeus Cahill s Telharmonium in 1897, electronics have been used to create music in front of audiences [1]. Beyond live performances of purely electronic instruments, composers began writing music for conventional acoustic instruments accompanied by live signal processing in the 1960s. Unfortunately, these works are seldom performed due to the difficulty of acquiring the signal processing equipment necessary for performing the works. In one notable composition, the Post-Prae-Ludium Per Donau 1987) by Luigi Nono, the signal processing component of the work requires two sound engineers and hardware effects capable of producing quadraphonic panning in two directions at once as well as filter, delay, phasing, and reverb effects. Nono gives no directions for how to create or obtain these audio effects a challenge for most who wish to perform the piece. This paper will investigate the benefit of programming the audio effects for a work like Nono s Post-Prae-Ludium Per Donau to facilitate its performances. 2. Choice of Software In order to realize Nono s signal processing directions, an audio programming environment had to be selected. Although Cycling 74 s Max/MSP would have been a viable option, SuperCollider was prefered for several reasons. First, SuperCollider is free and distributed under a General Public License GPL). It works on a variety of operating systems and has few system requirements. SuperCollider is a high level language that is effective for live

Kermit-Canfield 2 signal processing because it runs a virtual machine at interpret level, allows dynamic typing, and has implemented real time garbage collection and an object oriented paradigm [2] and [3]. Running at the interpret level means that SuperCollider can allow audio processing to run at a higher priority than less important system tasks within the limits of processor speed and memory). Dynamic typing means that data objects can change in size throughout a program s execution. This flexibility is crucial for live signal processing. Garbage collection refers to how a computer allocates and de-allocates memory. While a program runs, the computer assigns memory to objects. When no longer needed, they are considered garbage and the memory can be reclaimed; running out of memory would be a serious issue. Unlike languages such as C or Pascal, which require memory to be reclaimed with an explicit command, garbage collection takes place automatically in SuperCollider. Additionally, SuperCollider was chosen because it is easy to learn and has a strong and active community of developers. 3. Analysis of the Post-Prae-Ludium Per Donau and Programming of the Piece The Post-Prae-Ludium was written in the final decade of Nono s life during his tenure working at the Experimental studio of the Heinrich-Strobel Foundation. Nono s first piece calling for live electronics was written nearly thirty years earlier. He collaborated with tubist Giancarlo Schiaffini to compose a piece that takes advantage of the full range of the tuba s sound, in terms of dynamics, pitch, and timbre [4]. He expands and redefines the sound of the tuba though the use of live electronics. In this piece, Nono implements a quadraphonic sound system and a variety of audio effects. The composition is textural and divided into five sections. Instead of switching between hardware effects, a performance of the Post-Prae-Ludium using this SuperCollider score included in Appendix A) requires a sound operator to simply

Kermit-Canfield 3 follow the musical score and tubist and evaluate individual lines of code that automatically start and stop tasks to control the audio effects. 3.1 Section 1 In the first section 0 00 5 20) the tubist is given four types of non-traditional performance techniques 1) half valve playing, 2) singing though the instrument, 3) notes played with vibrato, and 4) multiphonics. Nono draws colored lines though the staff system and asks the tubist to vary which musical material is performed. Throughout this section, the directions for the sound engineer are to randomly vary the input and output volume to four delays 5, 7, 10, and 15 seconds), one for each speaker of the quadraphonic sound system. For the original performance, one sound operator Rudolf Strauss) controlled the input to each delay and a second operator Hans Peter Haller) controlled the outputs. In order to simplify the operator s job controlling this section, a function is used to automatically generate input and output envelopes. An example of a generated input/output curve is displayed beneath Nono s graphic in the score see Figure 1). At the end of the section, the feedback into the delays is slowly turned up until 100 percent of the signal flows back into the delay. At this point, the feedback parameter returnes to zero and the signal that remains in the delay s buffer is allowed to blend with the musical material of the second section. 3.2 Section 2 The second section 5 20 7 00) directs the tubist to play high-pitched, impulse-like sounds. The signal processing effect of this segment is phasing and dual direction,

Kermit-Canfield 4 Figure. 1: A, Nono s suggestion for delay input/output levels. B, Sample SuperCollider generated input/output levels. speed independent, quadraphonic panning. Just like in the first section, this effect would be challenging to perform without either two engineers or the use of a computer. To manually create this effect using hardware equipment, one would have to send the signal from the tuba through a phaser effect and into two 3D panners, each rotating at a different speed and in a different direction. In the SuperCollider programming of this section, a linear panning algorithm is employed to rotate the sound around the audience. The signal is duplicated so that there can be two simultaneous rotations. 3.3 Sections 3 and 4 In the third section 7 00 7 53), the tubist simply plays an extremely low register note for about 53 seconds. The audio effect through this passage is reverb with an RT60 of 30 seconds sounded through the front two speakers. Overall, the sound quality is low, rumbling, and cavernous. The audio processing of section 3 cross fades into the effect for section four 7 53 11 12), which is a low-pass filtered 566 Hz) version of the tuba part with ten seconds of reverb

Kermit-Canfield 5 played through the rear speakers. The tuba plays a microtonal passages with varied note lengths to excite the reverb. 3.4 Section 5 Section five 10 00 15 10) marks a recapitulation to the sonic world of the previous sections. The tuba continues to play the sonic material of section four until 11 12, but the feedback delay effects of section one start slightly earlier at 10 00. The instructions, very long, increasingly suspended suggest that the performer is supposed to blend the tuba s sound with the delays, which continue until the end of the piece [5]. 4. Conclusions and Further Study The most complicated issue with performing a piece such as Nono's Post-Prae-Ludium is to determine how to interpret the composer's idea of how the piece should sound. Nono specifies few details about how the audio effects are supposed to sound. For example, when he asks for phasing and quadraphonic panning in the second section, what effect does he actually want? There is a wide variety of sounds that could be considered phasing and the speeds for the sound rotations is not specified. This problem permeates the entire piece; what does Nono want the reverb to sound like beyond the decay time, how random are the input/output changes to the delays in section one supposed to be, and how is the tubist supposed to interpret some of the nontraditional notation? These issues are not unique to a computer version of the signal processing directions in the preface to the work the editor writes, The task of preparing and putting the finishing touches to a composition by Luigi Nono never finished with its first performance. Instead the compositions always ended up as veritable works in progress

Kermit-Canfield 6 undergoing continuous revision [5]. Doing the sound manipulation in software rather than hardware greatly increases the practicality of performances of the work. It means that the program can be tailored to each individual performance space, tubist, and sound system. One is not limited to the sounds produced by a single piece of equipment and adjustments to the sound effects can always be implemented. Additionally, the way the sound effects for each section of the piece were programmed allows smooth transitions from section to section. One criticism of this realization of the Post-Prae-Ludium is the emotionally detached characteristic of the generated input/output envelopes of the first section. While this is true, it could be argued that without more information from Nono himself, we can never really know what his intentions were for this section. There are two ways to expand on the work presented here. First, writing a user interface and creating a stand-alone application for performing Nono's Post-Prae-Ludium Per Donau would make the program more accessible to non-technical performers. Second, other compositions written for live electronics need to be realized with computer programming. This piece is just one example among a very large catalogue of works many of which merit modern performances. A computer programming of the audio processing component of Nono's work successfully facilitates the work's performance. It reduces the resources necessary to put the work together as it decreases the number of sound engineers needed from two to one and it reduces the processes of gathering the hardware effects required for the piece.

Kermit-Canfield 7 References [1] N. Collins, Live Electronic Music in The Cambridge Companion to Electronic Music, 38 54. New York: Cambridge University Press, 2007. [2] J. McCartney, SuperCollider: a New Real Time Synthesis Language in Proceedings of the International Computer Music Conference. Hong Kong,1996: accessed at: http://www.audiosynth.com/icmc96paper.html [3] J. McCartney, Rethinking the Computer Music Language: Super Collider, Computer Music Journal, Vol. 26, No. 4 pp. 61 68 Winter 2002). [4] S. Tigner, A Performance Guide to Luigi Nono s Post-Prae-Ludium no. 1 Per Donau Diss. University of North Texas, 2009. [5] L. Nono, Post-Prae-Ludium Per Donau: Per Tuba [in F] en Live Electronics Italy: Ricordi, 1987.

Kermit-Canfield 8 Appendix A: SuperCollider Code A.1 Nono Sound Operator program Server.local.options.memSize = 1048576; s = Server.local; s.boot; s.latency = 0; // input stage ~inbus = 0; "~inbus = "++~inbus.postln ~numchans = 4; "~numchans = "++~numchans.postln ~time = 0.1; // load data, tasks, and synths computer lab) thisprocess.interpreter.executefile"insertpath/nono/nono_synths.rtf" thisprocess.interpreter.executefile"insertpath/nono/nono_data.rtf" thisprocess.interpreter.executefile"insertpath/nono/nono_tasks.rtf" //to perform the Nono, run each of the lines of code below at the approximate time listed //program the piece ~t1.reset; ~t1part2.reset; ~t2.reset; ~t3.reset; /*start from a clean slate*/ /*00:00)*/ ~t1.play; /*start t1 pgm1 &part2)*/ /*04:30)*/ ~t1part2.stop; ~t1.stop; ~t2.play; /*start t2 end t1 &part2)*/ /*05:20)*/ ~pg2 = Synth\pgm2 /*start pgm2 end pgm1 t2)*/ /*07:00)*/ ~pg2.set\gate, 0 ~pg3 = Synth\pgm3, [\invol, 0.35] /*start pgm3 end pgm2*/ //prevention from reverb blowing up ~pg3.set\invol, 0.2 ~pg3.set\invol, 0 /*07:53)*/ ~pg3.set\gate, 0 ~pg4 = Synth\pgm4, [\invol, 0.4] /*start pgm4 end pgm3*/ //prevention from reverb blowing up ~pg4.set\invol, 0.3 ~pg4.set\invol, 0 /*10:00)*/ ~t3.play; /*start t3 pgm0 pgm1) end pgm4*/

Kermit-Canfield 9 A.2 SynthDefs audio effects) //each SynthDef defines a set of audio effects SynthDef\pgm0, { arg bus = 0, gate = 1, invol = 1; var env; env = EnvGen.arEnv.new[1, 1, 0], [3, 3], 'linear', 1), gate, doneaction:2 Out.arbus, SoundIn.ar~inBus, mul:[1, 1, 1, 1, 1, 1, 1, 1]) * env * invol) }).loads SynthDef\pgm1, { arg bus = 0, invol1 = 1, invol2 = 1, invol3 = 1, invol4 = 0, outvol1 = 1, outvol2 = 1, outvol3 = 1, outvol4 = 1, feedback1 = 0, feedback2 = 0, feedback3 = 0, feedback4 = 0, gate = 1; var in, out, env; env = EnvGen.arEnv.new[1, 1, 0], [3, 3], 'linear', 1), gate, doneaction:2 in = SoundIn.ar~inBus in = FreeVerb.arin, 0.5, 0.5, 0.5 out = [CombN.arin * invol1), 5, 5, feedback1, outvol1), CombN.arin * invol2), 7, 7, feedback2, outvol2), CombN.arin * invol3), 10, 10, feedback3, outvol3), CombN.arin * invol4), 15, 15, feedback4, outvol4)] * env; Out.arbus, out Out.arbus + 4), out }).loads SynthDef\pgm2, { arg bus = 0, gate = 1; var in, out, env; env = EnvGen.arEnv.new[1, 1, 0], [3, 6], 'linear', 1), gate, doneaction:2 in = SoundIn.ar~inBus in = in + CombN.arin, 10, SinOsc.ar3, add:1.1), 3 out = PanAz.ar4, in, LFSaw.kr5), 0.5, 2.0, 0.5) + PanAz.ar4, in, LFSaw.kr7) * -1), 0.5, 2.0, 0.5 Out.arbus, out * env) Out.arbus + 4), out * env) }).loads SynthDef\pgm3, { arg bus = 0, gate = 1, invol = 1; var in, out, env; env = EnvGen.arEnv.new[1, 1, 0], [3, 20], 'linear', 1), gate, doneaction:2 in = SoundIn.ar~inBus out = GVerb.arin * invol), 20, [30, 30], 0.5 Out.arbus, out * env) Out.arbus + 4), out * env) }).loads SynthDef\pgm4, { arg bus = 0, gate = 1, invol = 1; var in, out, env; env = EnvGen.arEnv.new[1, 1, 0], [3, 10], 'linear', 1), gate, doneaction:2 in = SoundIn.ar~inBus in = LPF.arin, 566 out = GVerb.arin * invol), 20, [10, 10], 0.5 Out.arbus + 2), out * env) Out.arbus + 6), out * env) }).loads

Kermit-Canfield 10 A.3 Task Data //~t1 data: arrays are filled with data points correspond to input, output, and feedback volume //input begining j=array.fill20, 0 a=array.series75, 0, 0.1).normalize0, 1 b=array.fill60, 1 c=array.series50, 0, 0.1).normalize0, 1).reverse; d=array.fill80, 0 e=array.fill30, 1 f=array.fill80, 0 g=array.series25, 0, 0.1).normalize0, 1 h=array.fill50, 1 i=array.fill20, 0 k=j++a++b++c++d++e++f++g++h++i; ~t1begin=k; //output begining l=array.fill80, 1 m=array.fill70, 0 n=array.fill40, 1 o=array.series75, 0, 0.1).normalize0, 1).reverse; p=array.fill25, 0 q=array.series75, 0, 0.1).normalize0, 1 u=array.fill10, 1 r=array.fill40, 0 t=array.fill75, 1 z=l++m++n++o++p++q++u++r++t; ~t1begout=z; //envelope bits ~a1 = Array.fill50, 1) ++ Array.series50, 0, 0.1).normalize0, 1).reverse; ~a2 = Array.fill50, 0) ++ Array.series50, 0, 0.1).normalize0, 1 ~a3 = Array.fill50, 0) ++ Array.fill50, 1 ~a4 = Array.fill50, 1) ++ Array.fill50, 0 ~a5 = Array.fill20, 1) ++ Array.series80, 0, 0.1).normalize0, 1).reverse; ~a6 = Array.fill10, 1) ++ Array.series90, 0, 0.1).normalize0, 1).reverse; ~a7 = Array.fill70, 1) ++ Array.series30, 0, 0.1).normalize0, 1).reverse; ~a8 = Array.fill80, 1) ++ Array.series20, 0, 0.1).normalize0, 1).reverse; ~a9 = Array.fill35, 1) ++ Array.series65, 0, 0.1).normalize0, 1).reverse; ~a10 = Array.fill20, 0) ++ Array.series80, 0, 0.1).normalize0, 1 ~a11 = Array.fill10, 0) ++ Array.series90, 0, 0.1).normalize0, 1 ~a12 = Array.fill70, 0) ++ Array.series30, 0, 0.1).normalize0, 1 ~a13 = Array.fill80, 0) ++ Array.series20, 0, 0.1).normalize0, 1 ~a14 = Array.fill35, 0) ++ Array.series65, 0, 0.1).normalize0, 1 ~a15 = Array.fill10, 0) ++ Array.fill90, 1 ~a16 = Array.fill30, 0) ++ Array.fill80, 1 ~a17 = Array.fill70, 0) ++ Array.fill30, 1 ~a18 = Array.fill90, 0) ++ Array.fill10, 1 ~a19 = Array.fill10, 1) ++ Array.fill90, 0 ~a20 = Array.fill30, 1) ++ Array.fill80, 0 ~a21 = Array.fill70, 1) ++ Array.fill30, 0 ~a22 = Array.fill90, 1) ++ Array.fill10, 0 ~a23 = Array.fill100, 0 ~a24 = Array.fill100, 1 ~a25 = Array.series100, 0, 0.1).normalize0, 1 ~a26 = Array.series100, 0, 0.1).normalize0, 1).reverse;

Kermit-Canfield 11 //~t2 data //input a=array.series110, 0, 0.1).normalize0, 1 b=array.fill340, 1 c=array.fill1050, 0 ~int2=a++b++c; //output a=array.series110, 0, 0.1).normalize0, 1 b=array.fill390, 1 c=array.series1000, 1, 0.1).normalize0, 1).reverse; ~outt2=a++b++c; //feedback a=array.series450, 0, 0.1).normalize0, 1000 b=array.fill50, 1000 c=array.series1000, 0, 0.1).normalize0, 1000).reverse; ~feedbackt2=a++b++c; //~t3 data //input pgm0 a=array.series500, 0, 0.1).normalize0, 1 b=array.fill90, 1 c=array.series850, 0, 0.1).normalize0, 1).reverse; ~int3p0=a++b++c; //input a=array.series250, 0, 0.1).normalize0, 0.9 b=array.series250, 0, 0.1).normalize0.9, 1 c=array.fill90, 1 d=array.fill850, 0 ~int3=a++b++c++d; //output a=array.series260, 0, 0.1).normalize0, 0.9 b=array.series280, 0, 0.1).normalize0.9, 1 c=array.series700, 1, 0.1).normalize0, 1).reverse; d=array.fill200, 0 ~outt3=a++b++c++d; //feedback a=array.series200, 0, 0.1).normalize0, 900 b=array.series340, 0, 0.1).normalize900, 1000 c=array.series700, 0, 0.1).normalize0, 1000).reverse; ~feedbackt3=a++b++c++d;

Kermit-Canfield 12 A.4 Tasks and Functions //~up function creates input and output volume envelopes ~up = { z = [~a1, ~a2, ~a3, ~a4, ~a5, ~a6, ~a7, ~a8, ~a9, ~a10, ~a11, ~a12, ~a13, ~a14, ~a15, ~a16, ~a17, ~a18, ~a19, ~a20, ~a21, ~a22, ~a23, ~a24, ~a25, ~a26]; y = z.choose; y; }; //each task facilitates starting and stopping the audio effects //~t1 ~t1 = Task{ ~pg1 = Synth\pgm1, [\invol1, 0, \invol2, 0, \invol3, 0, \invol4, 0] "t1 started".postln; ~t1begin.size.do{ arg i; ~pg1.set\invol1, ~t1begin.ati), \invol2, ~t1begin.ati), \invol3, ~t1begin.ati), \invol4, ~t1begin.ati), \outvol1, ~t1begout.ati), \outvol2, ~t1begout.ati), \outvol3, ~t1begout.ati), \outvol4, ~t1begout.ati) ~time.wait; } ~t1part2.play; } //~t1part2 ~t1part2 = Task{ var ampin1, ampin2, ampin3, ampin4, ampout1, ampout2, ampout3, ampout4; "t1part2 started".postln; inf.do{ ampin1 = ~up.value ampin2 = ~up.value ampin3 = ~up.value ampin4 = ~up.value ampout1 = ~up.value ampout2 = ~up.value ampout3 = ~up.value ampout4 = ~up.value } } 100.do{ arg i; ~pg1.set\invol1, ampin1.wrapati), \invol2, ampin2.wrapati+20), \invol3, ampin3.wrapati+50), \invol4, ampin1.wrapati+80), \outvol1, ampout1.wrapati), \outvol2, ampout2.wrapati+30), \outvol3, ampout3.wrapati+50), \outvol4, ampout4.wrapati+70) ~time.wait; }

Kermit-Canfield 13 //~t2 ~t2 = Task{ "t2 started".postln; 1500.do{ arg i; ~pg1.set\invol1, ~int2.ati), \invol2, ~int2.ati), \invol3, ~int2.ati), \invol4, ~int2.ati), \outvol1, ~outt2.ati), \outvol2, ~outt2.ati), \outvol3, ~outt2.ati), \outvol4, ~outt2.ati), \feedback1, ~feedbackt2.ati), \feedback2, ~feedbackt2.ati), \feedback3, ~feedbackt2.ati), \feedback4, ~feedbackt2.ati) ~time.wait; } ~pg1.set\gate, 0 ~t2.stop; } //~t3 ~t3 = Task{ ~pg4.set\gate, 0 ~pg0 = Synth\pgm0, [\invol, 0] ~pg1 = Synth\pgm1, [\invol1, 0, \invol2, 0, \invol3, 0, \invol4, 0, \outvol1, 0, \outvol2, 0, \outvol3, 0, \outvol4, 0] "t3 started".postln; 1440.do{ arg i; ~pg1.set\invol1, ~int3.ati), \invol2, ~int3.ati), \invol3, ~int3.ati), \invol4, ~int3.ati), \outvol1, ~outt3.ati), \outvol2, ~outt3.ati), \outvol3, ~outt3.ati), \outvol4, ~outt3.ati), \feedback1, ~feedbackt3.ati), \feedback2, ~feedbackt3.ati), \feedback3, ~feedbackt3.ati), \feedback4, ~feedbackt3.ati) ~pg0.set\invol, ~int3p0.ati) ~time.wait; } ~pg1.set\gate, 0 ~pg0.set\gate, 0 ~t3.stop; }