• jon@schemawound.com
Supercollider
Please Hold (Extended)

Please Hold (Extended)

I have blogged one time previously about the track “Please Hold”.  The track was first written as a 7 second track for the Waxen Wings compilation “Se7en Seconds In Hea7en”.  

7 second version is below:

At the time I wrote the track I included the track length as a parameter in the SynthDef.  As I played with the parameter I realized that the very simple track opened up and became something else entirely when extended over a long period of time.  

The main feature of the track is a tone that is continually dropping in pitch over the entire length of the song.  This tone is made up from 10 different panned sine waves that are all dropping to converge at 47Hz.  The tones dropping at different rates help to produce the main tone and modulation of the piece.

The other feature of the track is a pair of clipped sine wave that rise in volume over the entire length of the track but only becomes audible towards the end of the track.

The only other thing involved in the track is some reverb and a very simple envelope to avoid clipping at the start and end of the track.

Mild post production was done in reaper to shorten the track slightly.  The extended version of the track held on the 47 Hz tone and the final tone of track slightly too long for comfort.  I simply clipped some time out of these portions and cross-faded the edges together using Reaper.

(
	{
		var seconds = 420;

		SynthDef(PleaseHold, {|seconds = 7|
			var sines = 
				SinOsc.ar(Line.kr([40, 47], 47, seconds - 1)) 
				* 
				SinOsc.ar(Line.kr([65, 60], 47, seconds - 1))
				* 
				SinOsc.ar(Line.kr([80, 89], 47, seconds - 1))
				* 
				SinOsc.ar(Line.kr([300, 270], 47, seconds - 1))
				* 
				SinOsc.ar(Line.kr([435, 472], 47, seconds - 1))
				*
				Line.ar(1, 0, seconds)
			;
			var verb = FreeVerb.ar(sines, 1, 1, 0) * 0.9;
			var riseLine = (SinOsc.ar([330, 335]) * Line.ar(0, 0.5, seconds)).clip2(0.4);
			var env = EnvGen.ar(Env.linen(0.1, seconds - 0.2, 0.1), doneAction:2);
			var output = (verb + riseLine) * env;
			Out.ar(0, output * 0.6);
		}).add;

		s.sync;

		Synth(PleaseHold, [seconds, seconds]);
	}.fork
)