|
|
|
|
Click here to listen to the piece while you read.
Dedication
This piece is dedicated to Jeff Bush. Dr. Jeff Bush, a former teacher of mine, loved to talk. He explained, argued, commented, discussed, critiqued, encouraged, taught, related, quoted, speculated, and conjectured - among others - about all sorts of things. Some of which were related to my percussion lessons and some of which was not; however, it was all interesting and wonderfully insightful.
As we were discussing poly-rhythm in one of my lessons (as we did often), he said something like this:
Poly-rhythm, by definition is the juxtaposition of simultaneous contrasting rhythms, like watching the turn signals on all the cars that wait to turn at an intersection.
Although music incorporates the concept of poly-rhythm, human performers are restricted by the simple fact that our minds think only one idea at a time. Our brains do not "multi-task" effectively; and therefore poly-rhythms in music performance result in wonderful sounds placed awkwardly in time. This piece was written to provide me with wonderful sounds placed wonderfully in time. I now think of it as a soundtrack for all the turn signals on our streets.
The Title
At the "Institute for Studies in the Arts" at ASU there is a small lunch room. In that lunch room is a fridge. Stuck to that fridge is a fridge-magnet-madlib-word-game that consists of about fifty little magnetic words. I walked into that lunch room one night while contemplating Supercollider to re-fill my coffee cup and saw the words "My | Tattoo | is | a | web | designer" placed side-by-side on the fridge door. It stuck with me long enough to give that name to the Supercollider document I was currently working on.
Sorry that this anecdote isn't more interesting.
The SuperCollider Code
(
// my tattoo
// by Dave Sabine
// this code will produce a stereo AIFF format audio file for the
// purpose of burning to a CD.
// Note: this code is a variation on example SuperCollider code
// written by James McCartney
// If you have more than 2 channels of output, then I'd suggest
// changing the value of numChan...you can output to as many
// audio channels as you have available.
Synth.play(
{
var z, r, numChan, t;
t = Wavetable.chebyFill(512, [0.3, -0.8, 1.1]);
numChan = 2;
r = [
{
PanAz.ar(numChan,
FSinOsc.ar(800 + 3000.0.rand), LFSaw.kr(0.4 + 4.rand, 0.5),
LFSaw.kr(0.4 + 0.6.rand, 0.4, 0.5),
0.1, 2)
},
{
PanAz.ar(numChan,
FSinOsc.ar(80 + 900.0.rand), LFSaw.kr(0.4 + 0.4.rand, 0.5),
LFSaw.kr(0.4 + 0.6.rand, 0.4, 0.5),
0.1, 2)
},
{
PanAz.ar(numChan,
FSinOsc.ar(400 + 12000.0.rand), FSinOsc.kr(0.4 + 0.8.rand, 0.5),
LFSaw.kr(0.4 + 0.8.rand, 0.4, 0.5),
0.1, 2)
},
{
PanAz.ar(numChan,
SinOsc.ar(54,FSinOsc.kr(40 + 20.rand,1),0.5),
0.1,2)
},
{
PanAz.ar(numChan,
FSinOsc.ar(80 + 300.0.rand,1.0.rand), LFSaw.kr(0.4 + 0.8.rand, 0.5),
LFSaw.kr(0.4 + 0.8.rand, 0.4, 0.5),
0.1, 2)
},
{
var env;
env = Env.new([0.001,1,0.3,0.8,0.001],[2,3,1,4],[0,3,-3,-1]);
PanAz.ar(numChan,
EnvGen.ar(env,
Resonz.ar(COsc.ar(t,5200, SinOsc.ar(1,0.1)), 2000.0.rand + 80, 0.1)
), 0.1,2)
},
{
var z;
z = Decay.ar(Dust.ar(1,0.5),2, FSinOsc.ar(400 + 4000.rand));
PanAz.ar(numChan,
DelayL.ar(z, 0.5,0.5,z),
0.1, 2)
}
];
z = OverlapTexture.ar({arg sp, i; r.choose.value}, 40, 1, 4, numChan);
Limiter.ar(z, 0.4,0.01)
})
)
|
|
|
|