pnw - university of washington
TRANSCRIPT
PNW
A musical composition for Narrator, Tenor Saxophone, and Live Computer Electronics
Douglas M. Niemela
A dissertation
submitted in partial fulfillment of the
requirements for the degree of
Doctor of Musical Arts
University of Washington
2015
Reading Committee:
Richard S. Karpen, Chair
Joel-Francois Durand
Juan C. Pampin
Program Authorized to Offer Degree:
School of Music
© Copyright 2015
Douglas M. Niemela
University of Washington
Abstract
PNW
A musical composition for Narrator, Tenor Saxophone, and Live Computer Electronics
Douglas M. Niemela
Chair of the Supervisory Committee:Director Richard S. Karpen
School of Music
Concatenative Sound Synthesis (CSS) has undergone software tool development for
composition in non-realtime use in the MATLAB (Sturm, 2006) and Max/MSP (Schwarz, 2003)
programming environments. Live Concatenative Sound Synthesis remains rare as of 2015 and has one
initial tool within Max/MSP (Schwarz, 2006). This dissertation is centered around the original creation
of an extensive Live CSS plug-in for the SuperCollider audio environment, its exploration and use in a
significant musical composition. “PNW”, contained herein, is this work, a composition of live poetry
reading, tenor saxophone accompaniment, and use of “Concatenate”, a new Live CSS plug-in for the
SuperCollider environment.
ACKNOWLEDGEMENTS
For his continued patience and words of wisdom, I would like to thank my advisor, Dr.
Richard S. Karpen. I was permitted room to develop an idea from concept, to software tools, to
resultant work. I would also like to thank both Dr. Juan Pampin, who guided my initial
experiments in manipulating sound with computers, and Dr. Joel-Francois Durand for his
encouragement and connection to the tradition of composition. As time moves on, and we are
gone, this was an especially intense and dynamic period in the growth of the music and digital
arts departments at the University of Washington.
Thank you to Raymond Carver for producing poetry like no other, and to Tess Gallagher
for viewing my test video and warmly approving of this use.
I would also like to thank my father, (Professor) Roy W. Niemela, for his academic
guidance through my undergraduate years, and my mother, Corinne S. Niemela, for her
unquestioning support.
i
TABLE OF CONTENTS Page
Acknowledgements........................................................................................................................ i
SCORE PNW............................................................................................................................... iii
Score Notes...................................................................................................................................iv
Set Up.......................................................................................................................................... iv
Narrator..............................................................................................................................v
Tenor Saxophone............................................................................................................... v
Mix Engineer....................................................................................................................vi
Electronics.......................................................................................................................vii
Prelude...........................................................................................................................................1
The Possible...................................................................................................................................2
The Old Days.................................................................................................................................4
Interlude.........................................................................................................................................7
Where the Groceries Went.............................................................................................................8
The Phone Booth......................................................................................................................... 10
My Boat....................................................................................................................................... 12
The Car........................................................................................................................................ 15
The Cobweb.................................................................................................................................16
Its Course.....................................................................................................................................17
BIBLIOGRAPHY....................................................................................................................... 20
APPENDICES
A. Help File for Concatenate Plug-In..........................................................................................21
B. Block Diagram of Concatenate Plug-In..................................................................................24
ii
T H E W Y L I E A G E N C Y ———————————————————————————————— L L C ————————————————————————————————
2 5 0 W E S T 5 7 T H S T R E E T , S U I T E 2 1 1 4 , N E W Y O R K , N E W Y O R K 1 0 1 0 7
T E L E P H O N E : 2 1 2 - 2 4 6 - 0 0 6 9 T E L E F A X : 2 1 2 - 5 8 6 - 8 9 5 3 E M A I L : m a i l @ w y l i e a g e n c y . c o m
Date: June 22, 2015 To: Doug Niemela Email: [email protected] From: Lauren Rogoff Re: Performance of 11 poems for PhD Thesis Presentation On behalf of: Tess Gallagher
Dear Doug Niemela, This letter grants one-time, non-exclusive, English-language musical performance rights to perform a live reading accompanied by music (the “Production”) of 11 poems: The Old Days, My Boat, Powder Monkey, The Phone Booth, Where the Groceries Went, The Cobweb, The Car, The Jungle, It's Course, Possible, and Eagles (collectively, the "Work") by Raymond Carver (the “Author”) on the terms indicated below only:
Performers: Doug Niemela, reader TBD, musical interludes by a member of Bill Frisell band Territory: Washington, US Admission price: free
Performance date/duration: Oct 22, 2015 Performance location: "The Chapel Performance Space", Good Shepard Center, 4649 Sunnyside Ave N. Seattle, WA. Audience size: 100
This letter further grants one-time, non-exclusive rights to record the Production for non-commercial, archival purposes only. Any further use or distribution of the Work will be subject to Tess Gallagher’s prior written approval, and a further agreement to be negotiated.
The Author shall receive credit of authorship of the Work in the customary manner during any performances, and the following
acknowledgements should appear on all printed material for the Production: The Old Days, My Boat from Where Water Comes Together with Other Water by Raymond Carver, copyright © 1985 by Raymond Carver, 1996 by Tess Gallagher, used by her permission. Powder Monkey, The Phone Booth, Where the Groceries Went, The Cobweb, The Car, The Jungle, It's Course, Possible, and Eagles from All Of Us, by Raymond Carver. Copyright © 1996 by Tess Gallagher, used by her permission. No further use of this material in extended distribution, other media, or future editions shall be made without the express written consent of The Wylie Agency. All rights not expressly granted herein are hereby reserved and retained by Tess Gallagher.
Yours sincerely,
Lauren Rogoff [email protected]
The following is the archival record for the “Production”of the “Performance of 11 poems for PhD thesis Presentation” of Raymond Carver.
See bibliography for credits per Wylie Agency.
Thanks to all, especially Tess Gallagher.
Douglas M Niemela
PNWFor Narrator, Tenor Saxophone, and Live Computer Electronics
(2015)
iii
SCORE NOTES
Performing Time: Approx. 18'
“PNW” is centered around a live reading of 8 poems of Raymond Carver (Carver, 1985,
1986). Told as personal stories of Pacific Northwest life, raw audio material for the
accompanying computer concatenation corpus was collected from Washington's Puget Sound
region, home for Raymond Carver in later life. Score was created for surround sound live
reproduction. The narrator, tenor saxophonist, and live mix engineer actively perform together
throughout the 10 movements. The concatenation software serves to create an interactive
environment for all performers.
SET UP
Concatenative sound synthesis components have been developed for 4 channels of
surround sound reproduction. Performers should be situated inside this quadraphonic field so as
to hear and react to the entirety of the sound experienced by the audience. It is suggested the
iv
performers be aligned facing the audience, from the front inside portion of the quadraphonic
image. This includes the mix engineer position. Plain sound reinforcement for both sax and
voice can be restricted to speakers on either side of this position, so as to give directionality to
these sources. Slight reverb can be used to augment these sources if desired.
NARRATOR
Narration should be read as a “first person” telling of life experiences. Narration should
be performed into a suitable voice microphone with wind filter, providing input to both computer
processes, and hall sound reinforcement.
Score order designates movements 1 and 4 as solo tenor saxophone (prelude and
interlude). The narrator should wait for sounds to dissipate before entering after these.
Likewise, between movements, the narrator should wait for sounds to dissipate and the mix
engineer to progress the concatenation program to the next synthesis construct.
TENOR SAXOPHONE
Tenor Saxophone performs as both solo prelude and interlude, as well as accompaniment
to live voice narration on 3 poems. The tenor saxophone part should take caution as to not
overwhelm the voice narration when acting as accompanist. A clip-on type microphone is used
on the sax bell, providing input to computer processes and hall sound reinforcement.
v
Score for tenor saxophone provides suggested “key phrases” for improvised elaboration.
These phrases are coordinated with relatively predictable reaction from the concatenation
software. Provided the performer is keenly aware of the nature of the narration at any moment,
the performer may deviate from the suggested key phrase if another idea is in mind. This should
always provide smooth and supportive counterpoint to the narration.
Key phrases are, at times, provided in coordination with word reference points to the
poetic narration. These serve as timing coordination points between narrator and tenor
saxophone.
MIX ENGINEER
During performance of any movement, the mix engineer should actively balance the
sound hall volume of source acoustics, and resultant concatenative sound environment. The
environment should not overpower the presence of source acoustics.
vi
At times within the score, a parameter change (See Appendix A for codes) is specified.
This should be transmitted to the running concatenation synth without stoppage.
ELECTRONICS
Concatenation processes involve the use of 13 audio files and associated “Conanalysis”
metadata files to be loaded as the concatenation corpus. These may be obtained from the
composer's world wide web audio repository. During progression among movements of the
piece, select corpora will be combined and supplied to the designated synthesis construct for that
movement. See the Concatenation help pages for details (Appendix A). Output will be 2 to 4
channels, depending on the movement. An appropriate GUI interface should be constructed to
provide switching among these synthesis constructs. Within each movement, there are smaller
parameter shifts indicated. These should be controllable from the same GUI performance
interface.
The following are audio corpora, associated concatenation analysis files, and synthesis
constructs for the SuperCollider audio environment (McCartney, 2002) required for each
movement:
vii
I. Prelude (tenor saxophone solo)
seaSyn101c.aif seaSyn101c.aif.analysisdelMarExt2B.aif delMarExt2B.aif.analysis
(SynthDef(\concatenator1, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;var t, inp1, livesig3;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.43;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.0027;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.17), 2.5);inp1 = livesig * t;
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.28, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 1.275, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 1.00, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.88, 1, parameterVal, 0, anaArray, freq, hasFreq);sig7 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 1.1, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig1 = DelayC.ar(sig3, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig2 = DelayC.ar(sig5, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
Out.ar(0, [sig4 + sig6 + sig3, sig5 + sig1 + sig7] * cssig);
}).send(s);)
II. The Possible
seaSyn101c.aif seaSyn101c.aif.analysiscrossCC.aif crossCC.aif.analysisjulieVoice.aif juieVoice.aif.analysis
(SynthDef(\concatenator2, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10, livesig, livesig2, anaArray2, mainsig, csvol, freq, hasFreq, livvol, tempo;
env=EnvGen.ar(Env.asr(0.1,1,0.2), gate: gate, doneAction:2);livesig = AudioIn.ar(1) * audioin;livesig2 = AudioIn.ar(1) * audioin;
csvol = 0.24;livvol = 0.0;
tempo= 1.45;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
sig = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.20), 1, parameterVal, 1,
viii
anaArray, freq, hasFreq);sig1 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.37), 1, parameterVal, 0,
anaArray, freq, hasFreq);sig2 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.35), 1, parameterVal, 1,
anaArray, freq, hasFreq);sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.22), 1, parameterVal, 0,
anaArray, freq, hasFreq);sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.30), 1, parameterVal, 1,
anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.91), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.41), 1, parameterVal, 1, anaArray, freq, hasFreq);
sig7 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.36), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.38), 1, parameterVal, 1, anaArray, freq, hasFreq);
sig9 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.26), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig10 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (tempo * 0.48), 1, parameterVal, 1, anaArray, freq, hasFreq);
Out.ar(0, [sig + sig3 + sig4, sig5 + sig7 + sig9, ((sig1 + sig2 + sig4) * 0.45), ((sig6 + sig8 + sig10) * 0.45)] * csvol);
}).send(s);)
III. The Old Days
bikingSea.aif bikingSea.aif.analysisdelMarExt2B.aif delMarExt2.aif.analysisparty.aif party.aif.analysiswesSyn102b.aif wesSyn102b.aif.analysis
(SynthDef(\concatenator3, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3, sig8, sig9, sig10, sig11;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.6;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.0027;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.18), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (0.17 * 2), 1, parameterVal, 0, anaArray, freq, hasFreq);
ix
sig3 = Concatenate.ar(corpusBuf, sig2, lowThresh, audFileCnt, (0.17 * 2), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.8975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig9 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.17, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig10 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.9975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.2975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = DelayC.ar(sig1, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));sig7 = DelayC.ar(sig4, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));sig11 = DelayC.ar(sig10, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
Out.ar(0, [sig2 + sig1 + sig10, sig3 + sig4 + sig9, sig5 + sig6 + sig11, sig7 + sig8] * cssig);
}).send(s);)
IV. Interlude (solo tenor saxophone)
hoSyn102bb.aif hoSyn102bb.aif.analysisseattle441.aif seattle.aif.analysis
(SynthDef(\concatenator4, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3, sig8, sig9, sig10, sig11;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.4;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.0025;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.14), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (0.17 * 2), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig3 = Concatenate.ar(corpusBuf, sig2, lowThresh, audFileCnt, (0.17 * 2), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.8975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig9 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.17, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig10 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.9975, 1, parameterVal, 0, anaArray, freq, hasFreq);
x
sig5 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.2975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = DelayC.ar(sig1, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));sig7 = DelayC.ar(sig4, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));sig11 = DelayC.ar(sig10, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
Out.ar(0, [sig2 + sig1 + sig10, sig3 + sig4 + sig9, sig5 + sig6 + sig11, sig7 + sig8] * cssig);
}).send(s);)
V. Where the Groceries Went
seattle441.aif seattle441.aif.analysisropesL.aif ropesL.aif.analysisknotsL441.aif knotsL441.aif.analysisho441.aif ho441.aif.analysis
(SynthDef(\concatenator5, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.5;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.22), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.3967, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.2550, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.22, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, sig3, lowThresh, audFileCnt, 0.22, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, sig4, lowThresh, audFileCnt, 0.22, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.4533, 1, parameterVal, 0, anaArray, freq, hasFreq);
Out.ar(0, [sig5 + sig4, sig5 + sig3, sig1 + sig2, sig6 + sig2] * cssig);
}).send(s);)
xi
VI. The Phone Booth
seaSyn101c.aif seaSyn101c.aif.analysisdelMarExt2B.aif delMarExt2.aif.analysis
(SynthDef(\concatenator6, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.3;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
sig2 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.55, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.95, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.75, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.88, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig1 = DelayC.ar(sig4, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig8 = DelayC.ar(sig5, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig6 = DelayC.ar(sig3, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig7 = DelayC.ar(sig2, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
Out.ar(0, [sig4+sig8, sig5+sig6, sig3+sig7, sig2+sig1] * cssig);
}).send(s);)
VII. My Boat
party.aif party.aif.analysishoSyn102bb.aif hoSyn102bb.aif.analysisbikingSea.aif bikingSea.aif.analysis
(SynthDef(\concatenator7, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3, sig8;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
xii
cssig = 0.6;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.18), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (0.17 * 2), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig3 = Concatenate.ar(corpusBuf, sig2, lowThresh, audFileCnt, 0.17, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.2975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.255, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.2975, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = DelayC.ar(sig1, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));sig7 = DelayC.ar(sig4, 0.3, LFNoise1.kr(0.1, 0.03, 0.07));
Out.ar(0, [sig2 + sig1, sig3 + sig4, sig5 + sig6, sig7 + sig8] * cssig);
}).send(s);)
VIII. The Car
bikingSea.aif bikingSea.aif.analysisseaSyn101c.aif seaSyn101c.aif.analysisseattle441.aif seattle441.aif.analysis
(SynthDef(\concatenator8, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.5;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.18), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.31167, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.2833, 1, parameterVal, 0, anaArray, freq, hasFreq);
xiii
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.2, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.2, 1, parameterVal, 1, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, sig4, lowThresh, audFileCnt, 0.2, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.2, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig7 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.34383, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.53407, 1, parameterVal, 0, anaArray, freq, hasFreq);
Out.ar(0, [sig4 + sig3, sig5 + sig6, sig7 + sig2, sig8 + sig1] * cssig);
}).send(s);)
IX. The Cobweb
ho441.aif ho441.aif.analysishoRocks.aif hoRocks.aif.analysisseattle441.aif seattle441.aif.analysis
(SynthDef(\concatenator9, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3, time;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.43;livsig = 0.0;
time = 1.5;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.20), 2.5);inp1 = livesig * t;
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (time * 0.28), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (time * 1.275), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, (time * 1.00), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, (time * 0.88), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig7 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, (time * 1.1), 1, parameterVal, 0, anaArray, freq, hasFreq);
sig1 = DelayC.ar(sig3, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig2 = DelayC.ar(sig5, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
xiv
Out.ar(0, [sig4 + sig6 + sig3, sig5 + sig1 + sig7] * cssig);
}).send(s);)
X. Its Course
hoSyn102bb.aif hoSyn102bb.aif.analysiscrossC.aif crossC.aif.analysisbikingSea.aif bikingSea.aif.analysis
(SynthDef(\concatenator10, {arg corpusBuf, liveinput=0, lowThresh, audFileCnt, pitchwt, crossFade, parameterVal, hold, gate, audioin=1, anaArray;
var env, sig8, sig1, sig2, sig3, sig4, sig5, sig6, sig7, livesig, livesig2, anaArray2, mainsig, cssig, freq, hasFreq, livsig;
var t, inp1, livesig3, sig9, sig10, sig11, sig12;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);
livesig = AudioIn.ar(1);livesig2 = AudioIn.ar(1);livesig3 = AudioIn.ar(1);
cssig = 0.45;livsig = 0.0;
# freq, hasFreq = Pitch.kr(livesig2, ampThreshold: 0.002, median: 1, peakThreshold: 0.4);
hasFreq = hasFreq * 0.002;
t = Trig1.kr(Amplitude.kr(livesig3, add: -0.18), 2.5);inp1 = livesig * t;
sig1 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.8525, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig2 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.55, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig3 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.3875, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig4 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.17, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig5 = Concatenate.ar(corpusBuf, sig4, lowThresh, audFileCnt, 0.53407, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig6 = Concatenate.ar(corpusBuf, livesig, lowThresh, audFileCnt, 0.465, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig7 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.5425, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig8 = Concatenate.ar(corpusBuf, inp1, lowThresh, audFileCnt, 0.775, 1, parameterVal, 0, anaArray, freq, hasFreq);
sig9 = DelayC.ar(sig2, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig10 = DelayC.ar(sig1, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig11 = DelayC.ar(sig5, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));sig12 = DelayC.ar(sig7, 0.3, LFNoise1.kr(0.1, 0.1, 0.11));
Out.ar(0, [sig1 + sig3 + sig9, sig2 + sig4 + sig12, sig5 + sig6 + sig10, sig7 + sig8 + sig11] * cssig);
}).send(s);
xv
&
œ
A
∏
œb œb
3
Œ
U
2"
œb
expand outward
œnœ
3
Œ
U
1"
etc.
3
Œ
&
7
œ
B
f
‰
fast, arpeggiate
&
9
ƒ
œn
œ#
&
long, still12w
C
π
œ œ œ œ œ œœ œ œ œ œ œœ
p
alternate fingerings
œ œ œ œ œœ œ œ œ œ
‘
&
16w
repeat C at given pitch
‘
w
π
&
20 wb
π
R
wb
π
&
parameter change - 125 Return to A
f niente
PreludeniemelaTenor Sax.
(I)
© 2015 Douglas M Niemela
1
II. The Possible
I spent years, on and off, in academe.
Taught at places I couldn't get near
as a student. But never wrote a line
about that time. Never. Nothing stayed
with me in those days. I was a stranger,
and an imposter, even to myself. Except
at that one school. That distinguished
institution in the midwest. Where
my only friend, and my colleague,
the Chaucerian, was arrested for beating his wife.
And threatening her life over the phone,
a misdemeanor. He wanted to put her eyes out.
Set her on fire for cheating.
The guy she was seeing, he was going to hammer him
into the ground like a fence post.
He lost his mind for a time, while she moved away
to a new life. Thereafter, he taught
his classes weeping drunk. More than once
wore his lunch on his shirt front.
I was no help. I was fading fast myself.
But seeing the way he was living, so to speak,
I understood I hadn't strayed so far from home
after all. My scholar-friend. My old pal.
At long last I'm out of all that.
And you, I pray your hands are steady,
and that you're happy tonight. I hope some woman
has just put her hand under your clean collar
a minute ago, and told you she loves you.
Believe her, if you can, for it's possible she means it.
2
Is someone who will be true, and kind to you.
All your remaining days.
3
&
w#
Solo Opening
π
tranquillo
˙ œ-
œ-
œ-
œ-
˙ w ‘
&
4
w#
p
˙ ˙n w w
Voice Start
&
7
wn
\
F
"Phone Ring"
˙
fade out
œ
œ
œb
∑
j
œwb
ß
"someone pulled a knife"˙
&
12wb œ œ ˙
Wb
"But you talked him down"
P
˙ w
&
16
w#
p
wn ˙
w
"Anyway your in Pittsburg and..."
p
˙ œ w
&
Voice CS Feed OFF
"It was then I remembered"20w#
∏
˙ œ ww#
\
"Rang"
Sp
w# ˙ ˙#w#
&
23 w#
"I love you Bro"
π
˙ œ œ w ˙
&
"Hung up"25
˙
w ˙ w
niente
The Old DaysniemelaTenor Sax. (III)
4
III. The Old Days
[tenor saxophone starts - wait for cue
from tenor sax performer]
You'd dozed in front of the TV
but you hadn't been to bed yet
when you called. I was asleep,
or nearly, when the phone rang.
You wanted to tell me you'd thrown
a party. And I was missed.
It was like the old days, you
said, and laughed.
Dinner was a disaster.
Everybody dead drunk by the time
food hit the table. People
were having a good time, a great
time, a hell of a time, until
somebody took somebody
else's fiancee upstairs. Then
somebody pulled a knife.
But you got in front of the guy
as he was going upstairs
and talked him down.
Disaster narrowly averted,
you said, and laughed again.
You didn't remember much else
of what happened after that.
People got into their coats
and began to leave. You
must have dropped off for a few
minutes in front of the TV
because it was screaming at you
to get it a drink when you woke up.
Anyway, you're in Pittsburgh,
and I'm in here in this
little town on the other side
of the country. Most everyone
has cleared out of our lives now.
You wanted to call me up and say hello.
To say you were thinking
about me, and of the old days.
To say you were missing me.
It was then I remembered
back to those days and how
telephones used to jump when they rang.
And the people who would come
in those early-morning hours
to pound on the door in alarm.
Never mind the alarm felt inside.
I remember that, and gravy dinners.
Knives lying around, waiting
for trouble. Going to bed
and hoping I wouldn't wake up.
I love you, Bro, you said.
And then a sob passed
between us. I took hold
of the receiver as if
it were my buddy's arm.
5
And I wished for us both
I could put my arms
around you, old friend.
I love you too, Bro.
I said that, and then we both hung up.
6
&
energetico
F
œ#
A
œ# œ#œ
U
œ# œ# œ#œ
U
œ# œ# œ#œ
œ œ œ
U
&
6
w-
p
B
˙-
œ-
œ-
œ-
œ-
w-
Œ
U
&
10
˙
p
˙ wb ‘
˙
˙n ˙b
wb
&
14
˙
˙n ˙b
˙b w
‘
repeat A once
&
various approaches18
F
˙b
slow, wander
p
&
parameter Change - 7
21
slow, wander
p
&
24œ#
F
œ# œ#œ
wander - G whole tone
niente
InterludeniemelaTenor Sax. (IV)
7
V. Where the Groceries Went
When his mother called for the second time
that day, she said:
“I don't have any strength left. I want
to lay down all the time.”
“Did you take your iron?” he wanted to know.
He sincerely wanted to know. Praying daily,
hopelessly, that iron might make a difference.
“Yes, but it just makes me hungry. And I don't
have anything to eat.”
He pointed out to her they'd shopped
for hours that morning. Brought home
eighty dollars' worth of food to stack
in her cupboards and the fridge.
“There's nothing to eat in this goddamn house
but baloney and cheese, “ she said.
Her voice shook with anger. “Nothing!”
“And how's your cat? How's Kitty doing?”
His own voice shook. He needed
to get off this subject of food; it never
brought them anything but grief.
“Kitty, “ his mother said. “Here, Kitty.
Kitty, Kitty. She won't answer me, honey.
I don't know this for sure, but I think
she jumped into the washing machine
when I was about to do a load. And before I forget,
that machine's making
a banging noise. I think there's something
8
the matter with it. Kitty! She won't
answer me. Honey, I'm afraid.
I'm afraid of everything. Help me, please.
Then you can go back to whatever it was
you were doing. Whatever
it was that was so important
I had to take the trouble
to bring you into this world.”
9
VI. The Phone Booth
She slumps in the booth, weeping
into the phone. Asking a question
or two, and weeping some more.
Her companion, an old fellow in jeans
and denim shirt, stands waiting
his turn to talk, and weep.
She hands him the phone.
For a minute they are together
in the tiny booth, his tears
dropping alongside hers. Then
she goes to lean against the fender
of their sedan. And listens
to him talk about arrangements.
I watch all this from my car.
I don't have a phone at home, either.
I sit behind the wheel,
smoking, waiting to make
my own arrangements. Pretty soon
he hangs up. Comes out and wipes his face.
They get in the car and sit
with the windows rolled up.
The glass grows steamy as she
leans into him, as he puts
his arm around her shoulders.
The workings of comfort in that cramped, public place.
I take my small change over
to the booth, and step inside.
But leaving the door open, it's
10
so close in there. The phone still warm to the touch.
I hate to use a phone
that's just brought news of death.
But I have to, it being the only phone
for miles, and one that might
listen without taking sides.
I put in the coins and wait.
Those people in the car wait too.
He starts the engine then kills it.
Where to? None of us able
to figure it. Not knowing
where the next blow might fall,
or why. The ringing at the other end
stops when she picks it up.
Before I can say two words, the phone
begins to shout, “I told you it's over!
Finished! You can go
to hell as far as I'm concerned!”
I drop the phone and pass my hand
across my face. I close and open the door.
The couple in the sedan roll
their windows down and
watch, their tears stilled
for a moment in the face of this distraction.
Then they roll their windows up
and sit behind the glass. We
don't go anywhere for a while.
And then we go.
11
&
Tenor Sax.
q = 96
p
œ
Ë
A
‰ œ
Ë
short, stabbing
‰ œb
¨
⋲ ⋲ œ
Ë
‰œ
-
Start Voice
&
"Richard, Bill, Chuck..."4
œ.
π
‰ œ.‰ œ
.⋲ ⋲ œ
.‰ œ
-
repeat phrase rising at notes slowly during nameswn w wb
&
"They know who they are."9
P
Ϭ
B‰
œ¨‰ œb
¨⋲⋲œ¨
‰ œ-
&
"And Kristina, Merry, Cath..."12œ.
π
‰œ.
‰œ.
⋲ ⋲œ.
‰œ-
w#
move phrase up quicker during namesw w# w
&
B"I'm serious about this." TO18 A"darker narratives." TO
p
"Soda pop of all kinds."
.œn
¯ œn¯œ
œb
¯
œ.œ<
œ-
œ-
&
"We'll go out into the sunny harbor."22
œn.
p
‰ œb.
‰ œb.⋲ ⋲ œn
.‰
œb-
"We may even go a little way down the coast, "
œn.
P
‰œ.‰ œ.
⋲ ⋲œ#.
‰
œ-
&
"But if that doesn't work out...."26
Ϭ
F
‰œn¨‰
œb¨
⋲⋲ œb¨‰
œn- End Voice
&
29œ.
p
‰
œn.
‰ œb.
⋲⋲œ.
‰ œ- embellish and fade
niente
My Boat(VII) niemela
12
VII. My Boat
[tenor saxophone starts - wait for cue from tenor sax performer]
My boat is being made to order. Right now it's about to leave
the hands of its builders. I've reserved a special place
for it down at the marina. It's going to have plenty of room
on it for all my friends: Richard, Bill, Chuck, Toby, Jim, Hayden,
Gary, George, Harold, Don, Dick, Scott, Geoffrey, Jack,
Paul, Jay, Morris, and Alfredo. All my friends! They know who
they are.
Tess, of course. I wouldn't go anyplace without her.
And Kristina, Merry, Catherine, Diane, Sally, Annick, Pat,
Judith, Susie, Lynne, Cindy, Jean, Mona.
Doug and Amy! They're family, but they're also my friends,
and they like a good time. There's room on my boat
for just about everyone. I'm serious about this!
There'll be a place on board for everyone's stories.
My own, but also the ones belonging to my friends.
Short stories, and the ones that go on and on. The true
and the made-up. The ones already finished, and the ones still
being written.
Poems, too! Lyric poems, and the longer, darker narratives.
For my painter friends, paints and canvases will be on board
my boat.
We'll have fried chicken, lunch meats, cheeses, rolls,
French bread. Every good thing that my friends and I like.
And a big basket of fruit, in case anyone wants fruit.
In case anyone wants to say he or she ate an apple,
or some grapes, on my boat. Whatever my friends want,
name it, and it'll be there. Soda pop of all kinds.
Beer and wine, sure. No one will be denied anything, on
13
my boat.
We'll go out into the sunny harbor and have fun, that's the idea.
Just have a good time all around. Not thinking
about this or that or getting ahead or falling behind.
Fishing poles if anyone wants to fish. The fish are out there!
We may even go a little way down the coast, on my boat.
But nothing dangerous, nothing too serious.
The idea is simply to enjoy ourselves and not get scared.
We'll eat and drink and laugh a lot, on my boat.
I've always wanted to take at least one trip like this,
with my friends, on my boat. If we want to
we'll listen to Schumann on the CBC.
But if that doesn't work out, okay,
we'll switch to KRAB, The Who, and the Rolling Stones.
Whatever makes my friends happy! Maybe everyone
will have their own radio, on my boat. In any case,
we're going to have a big time. People are going to have fun,
and do what they want to do, on my boat.
14
VIII. The Car
The car with the cracked windshield.
The car that threw a rod.
The car without brakes.
The car with a faulty U-joint.
The car with a hole in its radiator.
The car I picked peaches for.
The car with a cracked block.
The car with no reverse gear.
The car I traded for a bicycle.
The car with steering problems.
The car with generator trouble.
The car with no back seat.
The car with the torn front seat.
The car that burned oil.
The car with rotten hoses.
The car that left the restaurant without paying.
The car with bald tires.
The car with no heater or defroster.
The car with its front end out of alignment.
The car the child threw up in.
The car I threw up in.
The car with a blown head-gasket.
The car I left on the side of the road.
The car that leaked carbon monoxide.
The car with a sticky carburetor.
The car that hit the dog and kept on going.
The car with a hole in its muffler.
The car with no muffler.
The car my daughter wrecked.
The car with the twice-rebuilt engine.
The car with corroded battery cables.
The car bought with a bad check.
Car of my sleepless nights.
The car with a stuck thermostat.
The car whose engine caught fire.
The car with no headlights.
The car with a broken fan belt.
The car with wipers that wouldn't work.
The car I gave away.
The car with transmission trouble.
The car I washed my hands of.
The car I struck with a hammer.
The car with payments that couldn't be met.
The reposessed car.
The car whose clutch-pin broke.
The car waiting on the back lot.
Car of my dreams.
My car.
15
IX. The Cobweb
A few minutes ago, I stepped onto the deck
of the house. From there I could see and hear the water,
and everything that's happened to me all these years.
It was hot and still. The tide was out.
No birds sang. As I leaned against the railing
a cobweb touched my forehead.
It caught in my hair. No one can blame me that I turned
and went inside. There was no wind. The sea
was dead calm. I hung the cobweb from the lampshade.
Where I watched it shudder now and then when my breath
touches it. A fine thread. Intricate.
Before long, before anyone realizes,
I'll be gone from here.
16
&
œ
Slow, meanderingSolo Intro
œ# œ˙# w#
Start Voice"noise like water..." ADD
j
œb
j
œw
&
7
w
"Now there's no more..."
ww
w
w
"Right where you're living" wb
Sp
lively, energetic
wb˙b
&
"tear up that hill" ADD14j
œb
j
œw
"shook his hand" DROP TO wb
w
&
Parameter Change - 4
Voice CS Feed OFF20
w
calm, pensive
w
"after in this life"w
ADD
"and for a moment I imagine"
Sp
wb
lively, energetic
ww
j
œb
j
œw
&
"when they slap each other on the back"30Voice CS Feed ON
"disappear in a..."Voice CS Feed OFF
&
40
wb
Slow, meandering
wbw
wb
End VoiceSolo Exit
œ
F
œ# œ˙#
˙w
wnwb
w
&
work down to 47
wbwn
œ œ œ ˙ w
niente
w
U
Its CourseniemelaTenor Sax.
(X)
17
X. Its Course
[tenor saxophone starts – wait for cue
from tenor sax performer]
The man who took 38 steelhead out
of this little river
last winter (his name is Bill Zitter,
"last name in the directory")
told me the river's changed its course
dramatically, he would even say
radically, since he first moved here,
he and his wife. It used to flow
"yonder, where those houses are."
When salmon crossed that shoal at night,
they made a noise like water boiling
in a cauldron, a noise like you were
scrubbing something on a washboard.
"It could wake you up from a deep sleep."
Now, there's no more salmon run.
And he won't fish for steelhead
this winter, because Mrs. Zitter's
eaten up with cancer. He's needed
at home. The doctors expect
she'll pass away before the New Year.
"Right where you're living," he goes on,
"that used to be a motorcycle run.
They'd come from all over the country
to race their bikes. They'd tear up
that hill and then go down
the other side. But they were
just having fun. Young guys. Not
like those gangs today, those bad apples."
I wished him luck. Shook his hand.
And went home to my house, the place
they used to race motorcycles.
Later, at the table in my room, looking
out over the water, I give some thought
to just what it is I'm doing here.
What it is I'm after in this life.
It doesn't seem like much,
in the end. I remembered what he'd said
about the young men
and their motorcycles.
Those young men who must be old men
now. Zitter's age, or else
my age. Old enough, in either case.
And for a moment I imagine
the roar of the engines as they surge
up this hill, the laughter and
shouting as they spill, swear, get up,
shake themselves off, and walk
their bikes to the top.
Where they slap each other on the back
and reach in the burlap bag for a beer.
Now and then one of them gunning it
for all it's worth, forcing his way
to the top, and then going lickety-
split down the other side!
Disappearing in a roar, in a cloud of dust.
18
Right outside my window is where
all this happened. We vanish soon enough.
Soon enough, eaten up.
19
20
BIBLIOGRAPHY
The Old Days, My Boat from Where Water Comes Together with Other Water by Raymond
Carver, copyright © 1985 by Raymond Carver, 1996 by Tess Gallagher, used by her permission.
Powder Monkey, The Phone Booth, Where the Groceries Went, The Cobweb, The Car, The
Jungle, It's Course, Possible, and Eagles from All Of Us, by Raymond Carver. Copyright © 1996
by Tess Gallagher, used by her permission.
McCartney, James. (2002). SuperCollider real-time audio synthesis environment [software].
www.audiosynth.com
Schwarz, D. (2003). The Caterpillar System for Data-Driven Concatenative Sound Synthesis.
Proc. Of the 6th Int. Conference on Digital Audio Effects. London, UK, Sept 8-11, 2003.
Schwarz, D., & Beller, G., & Verbrugghe B., & Britton, S. (2006). Real-Time Corpus-Based
Concatenative Synthesis with CataRT. Proceedings of the COST-G6 Conference on Digital
Audio Effects, pages 279-282, Montreal, Canada, Sept. 2006.
Sturm, Bob L. (2006). Adaptive Concatenative Sound Synthesis and Its Application to
Micromontage Composition. Computer Music Journal, 30:4, 46-66.
APPENDIX A
CONCATENATE
SUPERCOLLIDER CONCATENATIVE SYNTHESIZER PLUG-IN
Concatenate.ar(corpusbufnum, live input, threshold, unit length, crossfade, matching,
continuous, analysisbufnum)
Live input concatenative synthesizer. Searches analysis buffer and concatenates units from
associated corpus buffer by similar/opposite audio characteristics to live input. Operates
continuously or in bursts with input. Prior library analysis of each source file by Conanalyse is
required (recommended Conanalyser GUI).
Can be used in simultaneous instances (with different concatenation parameters) from
same/different corpus and associated analysis files for layering/chaining/multichannel effects.
Ugen is mono.
corpusbufnum - audio buffer number of source corpus file. Up to 48 source files (with analysis
files) can be used with Concatenator GUI.
live input - audio input at 44100 for concatenation control.
cut-off - noise floor/low volume limiting in live input (0-1). Default is 0.0005
unit length - 0 is random unit lengths from 0.1 to 0.4 secs. A float value >= 0.1 determines fixed
unit lengths up to 1.0". Lower limit is 0.1 second.
crossfade - click control (1), or not (0) between units.
matching - code for matrix of similar/opposite matching of pitch, amplitude, spectral centroid,
21
spectral tilt (see below) to live input.
continuous - continuous concatenation after sensing input (1), or burst mode with input (0).
analysisbufnum - buffer number of analysis data. Must be generated by Conanalysis.
matching matrix: (Use Numerical code)
0 Oppose amp, Match freq, Match spectral center, Match spectral tilt
1 Match amp, Oppose freq, Match spectral center, Match spectral tilt
2 Match amp, Match freq, Oppose spectral center, Match spectral tilt
3 Match amp, Match freq, Match spectral center, Oppose spectral tilt
4 Oppose amp, Oppose freq, Match spectral center, Match spectral tilt
5 Oppose amp, Match freq, Oppose spectral center, Match spectral tilt
6 Oppose amp, Match freq, Match spectral center, Oppose spectral tilt
7 Match amp, Oppose freq, Oppose spectral center, Match spectral tilt
8 Match amp, Oppose freq, Match spectral center, Oppose spectral tilt
9 Match amp, Match freq, Oppose spectral center, Oppose spectral tilt
10 Oppose amp, Oppose Freq, Oppose spectral center, Match spectral tilt
11 Oppose amp, Oppose freq, Match spectral center, Oppose spectral tilt
12 Oppose amp, Match freq, Oppose spectral center, Oppose spectral tilt
13 Match amp, Oppose freq, Oppose spectral center, Oppose spectral tilt
14 Oppose amp, Oppose freq, Oppose spectral center, Oppose spectral til
15 Match amp, Match freq, Match spectral center, Match spectral tilt
22
Code Examples:
s.sendMsg(\b_allocRead, 0, "/Volumes/HD/Users/user/Folder/AudioFile.aif", 0, 0);s.sendMsg(\b_allocRead, 1, "/Volumes/HD/Users/user/Folder/AudioFile.aif.analysis", 0, 0);
SynthDef(\concatenator, {arg corpusbuf, liveinput=0, lowThresh, unitLength, crossFade, parameterVal, contcon, gate, anaArray;
var env, sig1, sig2, livesig, anaArray2;
env=EnvGen.ar(Env.asr(0,1,0.2), gate: gate, doneAction:2);livesig = SoundIn.ar(liveinput);
sig1 = Concatenate.ar(corpusBuf, livesig, lowThresh, unitLength, crossFade, parameterVal, contcon, anaArray);
sig2 = Concatenate.ar(corpusBuf, sig1, lowThresh, unitLength, crossFade, parameterVal, contcon, anaArray);
Out.ar(0, [sig1, sig2]) * env;
}).send(s);
s.sendMsg(\s_new, \concatenator, x=s.nextNodeID, 1, 1, \corpusbuf, 0, \liveinput, 0, \lowThresh, 0.008, \unitLength, 0, \crossFade, 0, parameterVal, 15, \contcon, 0, \gate, 0, \annaArray, 1);
23
Amplitude detectionZero CrossingsFFT Analysis:Spectral Tilt
Spectral Centroid
Search Algorithm:Switchable matching
Criteria
Corpus Metadata
Audio Corpus
Concatenation Process:Unit Sizing
Cross fadingContinuous output / Burst
Audio Input
Input Threshold
Pitch Detection
Mono audio output stream
APPENDIX BBLOCK DIAGRAM OF CONCATENATE PLUG-IN
(grey areas are a single module - stackable)
24
BIOGRAPHY
Douglas M. Niemela was born in Gainesville, Florida on December 30, 1963. He
received a B.A. in Interdisciplinary Humanities at the University of Maryland in 1988, with
concentrations in art history, world literature, and international law. Concurrent studies were
conducted at Berklee College of Music in bass studies and jazz arranging.
From 1995 to 2001, Douglas M. Niemela was a computer graphics troubleshooter for
Microsoft Corporation in Redmond, Washington, specializing in PostScript programming for
product print and packaging graphics. He entered the University of Washington and received an
M.M. in composition in 2006. At the University of Washington, he has taught classes in desktop
music technology, assembled sound reinforcement systems for the School of Music, and assisted
in concert production.
Douglas M. Niemela has composed for theater, dance, live and computer music
performances while at the University of Washington. He has performed and taught on electric
bass in Washington, DC, San Francisco, Boston, and Seattle.
25