• jon@schemawound.com
Supercollider
Tweet Deconstruction: 2012-11-13

Tweet Deconstruction: 2012-11-13

I was asked on Soundcloud to explain the following tweet:

{h={|f|1-LFTri.ar(f)};l={|s,e|Line.ar(s,e,1200,1,0,2)};FreeVerb.ar(h.(l.(147,5147))*h.(l.(1117,17))*h.(100)*h.([55,55.1])*0.05,0.7,1)}.play

First step is to start unpacking the tweet to make it more readable:

(
{
	h={|f|1-LFTri.ar(f)};
	l={|s,e|Line.ar(s,e,1200,1,0,2)};
	FreeVerb.ar(h.(l.(147,5147))*h.(l.(1117,17))*h.(100)*h.([55,55.1])*0.05,0.7,1);
}.play
)

h and l were used as generic variables functions to cut down on the amount of repeated code. If we remove them we end up with:

(
{
	FreeVerb.ar(
		(1-LFTri.ar(Line.ar(147,5147,1200,1,0,2)))
		* (1-LFTri.ar(Line.ar(1117,17,1200,1,0,2)))
		* (1-LFTri.ar(100))
		* (1-LFTri.ar([55,55.1]))
		*0.05
		,0.7
		,1
	);
}.play
)

In order to make things a little more readable I pull some things out into variables:

(
{
	var line = Array.with(
		Line.ar(147,5147,1200,1,0,2),
		Line.ar(1117,17,1200,1,0,2)
	);
	var tri = Array.with(
		1-LFTri.ar(line[0]),
		1-LFTri.ar(line[1]),
		1-LFTri.ar(100),
		1-LFTri.ar([55,55.1]),
	);
	var triScale = 0.05;
	var triMix = tri[0] * tri[1] * tri[2] * tri[3] * triScale;
	var verb = FreeVerb.ar(triMix, 0.7, 1);
	verb;
}.play
)

Now it becomes clear that this piece is made up of 4 triangle oscillators multiplied, 2 of which are controlled by slow lines and 2 have fixed frequencies. The output is then run through a simple reverb.

By running the following function you can plot out the 4 triangle oscillators

{[1-LFTri.ar(Line.ar(147,5147,1200,1,0,2)),1-LFTri.ar(Line.ar(1117,17,1200,1,0,2)),1-LFTri.ar(100),1-LFTri.ar([55,55.1])]}.plot(10)