Supercollider

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)

Tags :