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 :