Category Archives: Looping

Sawtooth Minimalism

Sawtooth Minimalism

My colleague, Jackie Walduck, was showing students how to create phase music by putting loops out of synch in a DAW. Then I went home from teaching and created a PD patch to play low-pass filtered sawtooth waves, as an example for a different class. I got curious how much easier it would be in SuperCollider and created a tiny program that did the same thing and set it going at the same time. Then I started it again. The phasing was fixed, but it called to mind the shifting relationships of earlier that day.

This version is only SuperCollider, but it uses a non band limitted sawtooth to mimic phasor~ in PD. This version is 7 minutes long, but the proper version should be about 3 hours. I get lost in the phasing and feel relaxed.

I’ve attached the code below. If you want to to last longer, look for the number 340 – that’s 5’40” in seconds. Make it as long as you’d like.

	var scale, dur, pb, steps=16, loops = 4, loop_calc, env_dur, db = -14, fade_in=40, decay = 20;

	loop_calc = {|note_dur, section_dur|
		var loop_dur, total_dur;

		loop_dur = note_dur * steps * loops;
		total_dur = loop_dur * (section_dur/loop_dur).ceil;

	SynthDef(\saw, {|out=0, freq, amp, dur, pan|
		var saw, env, lop, pan2;
		saw =;
		lop =, freq*4);
		env =, doneAction:2);
		pan2 =, pan, env);, pan2 * amp);

	//s.prepareForRecord("/home/celesteh/Documents/Pieces/SawtoothMinimalism/take-" ++ Date.getDate.rawSeconds ++".wav" , 2);



	dur = 60 / 250; // 250 BPM

	env_dur = loop_calc.(dur, 340) - (fade_in+ decay);

	scale = Scale.minorPentatonic(Tuning.choose(5));

	pb = {|limit = 7|
			\instrument, \saw,
			\db, db,
			\dur, dur,
			\scale, scale,
			\degree, Prout({
				var loop;{
					loop = steps.collect({ /*scale.degrees[5.rand]*/ limit.rand });
					loop = loop.scramble;{{|step|
			//\midinote, Pkey(\add) + offset,
			\out, 0


		Pbindf(pb.value, \octave, 4, \pan, 0, \continue, Pn(1,loops*steps)),
			0, Pseq([
				Pbindf(pb.value, \octave, 4, \pan, -75, \continue, Pn(1, loops*steps*4)),
				Pbindf(pb.value(5), \octave, [4, 5], \pan, -1, \db, Penv([db, db-2, db, db], [fade_in,decay, env_dur])),
				Pbindf(pb.value, \octave, 4, \pan, -0.88, \db, Pn(db+1, 1), \degree, [0, 2], \dur, dur*8)
			] ),
			0.0008.rrand(dur/10), Pseq([
				Pbindf(pb.value, \octave, 5, \pan, 75, \continue, Pn(1, loops*steps*4)),
					0, Pseq([Pbindf(pb.(5), \octave, [4,5], \pan, 1, \db, Penv([db, db-2, db, db], [fade_in,decay, env_dur])),
						Pbindf(pb.value, \octave, 4, \pan, 0.88, \db, Pn(db+1, 1), \degree, [1, 4], \dur, dur*8)]),
					(dur * 0.3).rrand(dur*0.7), Pseq([ Pbindf(pb.value,
						\octave, 5,
						\pan, Pwhite(-0.1, 0.1),
						\dur, Pwhite((dur / -700), (dur/700)) + dur,
						\db, Penv([-60, db+1, db, db], [fade_in, decay, env_dur])),
					Pbindf(pb.value, \octave, 5, \pan, 0, \db, Pn(db+1, 1), \degree, [0, 3, 5], \dur, dur*8)


			\dur, dur,
			\freq, Prout({


Deviation from the Norm will be Punished Unless it is Exploitable

[play]Deviation from the Norm will be Punished Unless it is Exploitable

This was inspired by (and titled from) my favourite holiday meme.

All of my Christmas songs this year are to fundraising for the Hackney Night shelter, which my wife has been volunteering at. There are very few shelter beds in East London. This roving shelter makes up a large percentage of them.


Nice to See You

[play]Nice to See You by No More Twist (2008)

No More Twist is a new duo of Polly Moller and I. We played this improvised set live on KFJC on 17 July 2008. She was on flute(s) and noisemakers and I played a live sampling application (written in SuperCollider). We were featured to promote the Edgetone New Music Summit. We will be playing there on Wednesday (23 July 2008), where we will be premiering a piece called “Inquisition.” It’s going to have Polly hooked up to a lie detector that I built and I’ll be interpreting her biometric data as she answers questions posed by the audience.

This piece here, however, has text from a long spam email and uses the latest iteration of my SC program SimpleSample.


Live at the 1510 Performance Space

[play] Live at the 1510 Performance Space (2008)


Live improvisation recorded at the 1510 Performance space in Oakland, California on 5 February 2008.

I played an Evenfall Minimodular synthesizer, looped with a SuperCollider program. Matt played a bunch of pedals and cool little boxes.

Recording by Clyde NIESEN


Breaking Waves

Breaking Waves

This piece uses a destructive loop. The original sound is ocean-like noise. I encoded this as an mp3, then I decoded it back to aiff. Then I re-encoded that aiff to and mp3 and repeated this process several times. Mp3s are supposed to have transparent compression, so the user never hears the lost information. However, after repeated processing, the wave sounds break down.

This piece was released on Ibol Records Random Spheres of Influence in 2001