davesabine.com

 Search
for Jenny

Listen to a sound clip of Jenny's Chimes. Note that this sound file is only a few moments long while the piece is in fact infinite.

Dedication

Jenny was my neighbour. She is from Ohio. She and I were both foreigners in Arizona and we have became good friends.

In late 2000 after one of her roommates moved out of her apartment, she dedicated the empty room to her Disco ball. She wanted to build a shrine of sorts where she could metaphorically smoke out the demons that plagued her.

She bought an electric water fountain to put in the room. water Simple physics, the properties of glass, light, optics, and refraction turned her flashlight-Disco-ball apparatus into an impressive array of stars which orbitted the small room. earth The various tobaccos and incense that were burned periodically, red, made the experience almost complete.

All but one of the essential alchemists' elements were represented in some way -- the room needed wind. "for Jenny" is a short program I wrote to synthesize wind-chimes for her.

The SuperCollider Code

I created the piece in SuperCollider. You can listen to an MP3 to hear some brief music or if you have Supercollider (or Psycollider for Windows) installed then you might enjoy the code below.

(
// for jenny
// by Dave Sabine

Synth.play({
var dustDensity;
var attackTime;
var delayTime;
var vol;
var env;
env = Env.linen(10,4400,30);
vol = 1;
dustDensity = 0.02;
attackTime = 0.2;
delayTime = 9;


a =
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),72.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),75.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),79.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),82.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),84.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),86.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),87.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),89.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),91.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),93.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),94.midicps,delayTime,vol),attackTime,delayTime)
+
Decay2.ar(Ringz.ar(Dust.ar(dustDensity),96.midicps,delayTime,vol),attackTime,delayTime);

a = RHPF.ar(a,600); // to take away a thumpy attack from ringz

// made a slight adjustment here for SC3
// because CombA is deprecated
a = CombC.ar(a,delayTime*2,delayTime*2,delayTime,add:a);
//a = CombA.ar(a,delayTime*2,delayTime*2,delayTime,add:a);
// this creates a really long delay...
// so these chimes seem oddly in a two part cannon.

Limiter.ar(a, 0.9,0.01); // output

a = a * EnvGen.kr(env)

};)
)

Also note that I created the code above using a very early version of SuperCollider. Since that time, SC3 has been produced (thanks James! and everybody else) so I intend to rebuild this piece to take advantage of the new features.

The Pure Data Code

Years later, because SuperCollider wasn't yet compatible with anything but Macintosh (I don't have a Mac anymore), I decided to recreate the program using Pure Data. This was interesting to me for a few of reasons:

  • It took a lot longer to build in Pure Data.
  • It requires a lot more code in Pure Data -- and not nearly as elegant as the SuperCollider version (but the graphic user interface in Pure Data of course has its benefits).
  • That's not to say that SuperCollider is better, because with Pure Data I knew how to do it and could begin from scratch -- whereas with SuperCollider I find it very difficult to build my own structures and usually search for a structure that is similar to what I want and then modify it as necessary. SuperCollider's learning curve is much steeper; it's not nearly as accessible as Pure Data.
for Jenny - a PD Screenshot

If you use PD, then click here to download the patches.