{
   "id" : "1-5hD",
   "is_private" : null,
   "code" : "s.options.numOutputBusChannels = 16;\r\ns.reboot;\r\n\r\n(\r\nvar amp = 0.1;\r\nvar isDolby = true;\r\n\r\n\r\nisDolby.if({\r\n\r\n\tSynthDef(\\sortChannels, {\r\n\t\tvar ins = In.ar(0, 8) ++ Silent.ar(8);\r\n\t\t\r\n\t\tins =  ins * 0.9;\r\n\t\tins = ins.tanh;\r\n\t\t\r\n\t\t\r\n\t\t[0, 2, 1, 5, 7, 12, 6, 4, 3, 8, 9, 10, 11, 13, 14, 15].do{|idx, i|\r\n\t\t\tReplaceOut.ar(idx, ins[i])\r\n\t\t};\r\n\t\t\r\n\t}).add;\r\n\r\n}, {\r\n\tSynthDef(\\sortChannels, {\r\n\t\tSilent.ar(1); // do nothing\r\n\t}).add;\r\n})\r\n\t\r\n\r\n// intro White\r\nSynthDef(\\introWhite, {\r\n\tvar pink, white, whiter, whiter2, crackle, out;\r\n\t\r\n\tcrackle = {LPF.ar(Dust.ar(1000), 50, mul: 20)}!8;\r\n\twhiter = {\r\n\t\tHPF.ar(WhiteNoise.ar, XLine.kr(4000, 10000, 10), mul: XLine.kr(0.1, 10, 10))\r\n\t}!8;\r\n\t\r\n\twhite = {WhiteNoise.ar}!8;\r\n\tpink = {PinkNoise.ar}!8;\r\n\t\r\n\tout = SelectX.ar(\r\n\t\tEnvGen.ar(Env([0, 3, 3, 0], [0.1, 9.8, 0.1])),\r\n\t\t[crackle, pink, white, whiter]\r\n\t).tanh *\r\n\tEnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp;\r\n\tOut.ar(0, out)\r\n\t\r\n}).add;\r\n\r\n// White + shake\r\nSynthDef(\\whiteshake, {|lFreq=67|\r\n\tvar pink, white, whiter, whiter2, crackle, out;\r\n\t\r\n\tcrackle = {Crackle.ar(Line.kr(1, 2.1, 10))}!8;\r\n\twhiter = {\r\n\t\tHPF.ar(WhiteNoise.ar, Line.kr(4000, 16000, 10), mul: Line.kr(1, 5, 10))\r\n\t\t+ RLPF.ar(Pulse.ar(Line.ar(1, 0.9, 10) * 25, Rand(0, 1)), 400, mul: 20)\r\n\t\t+ RLPF.ar(Impulse.ar(Line.ar(1, 1.1, 10) * 50, Rand(0, 1)), 200, mul: 20)\r\n\t\t+ RLPF.ar(Impulse.ar(Line.ar(1, 0.8746, 10) * 75, Rand(0, 1)), 100, mul: 20)\r\n\t}!8;\r\n\t\r\n\twhiter2 = {\r\n\t\t//HPF.ar(\r\n\t\tClipNoise.ar\r\n\t\t//  , Line.kr(4000, 16000, 10)\r\n\t\t//  , mul: Line.kr(1, 100, 10))\r\n\t}!8;\r\n\twhite = {WhiteNoise.ar}!8;\r\n\tpink = {PinkNoise.ar}!8;\r\n\t\r\n\tout = SelectX.ar(\r\n\t\tEnvGen.ar(Env([0, 1, 4, 4, 2, 1, 1, 3], [0.1, 0.1, 3.7, 0.1, 0.1, 2, 1])),\r\n\t\t[crackle, pink, white, whiter2, whiter]\r\n\t).tanh *\r\n\tRLPF.ar(Pulse.ar(Line.ar(1, rrand(0.9, 1.1), 10) * 100, rrand(0.5, 1.0)), lFreq, rq: 0.01, mul: 20) *\r\n\tEnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 0.2;\r\n\t\r\n\tOut.ar(0, out.tanh)\r\n}).add;\r\n\r\n// Impulses\r\nSynthDef(\\impulses, {|freq = 5, i = 0, hFreq = 1000|\r\n\tvar out = SplayAz.ar(\r\n\t\t8,\r\n\t\t({|j| HPF.ar(Impulse.ar(freq, j/20), hFreq)}!20).scramble,\r\n\t\tEnvGen.ar(Env([0, 0, 0.1, 0.2, 0.5], [0.5, 2, 3, 4.5])),\r\n\t\tcenter: Line.ar(i.sign * 4, 0, 10) + (i/4)\r\n\t).postln\r\n\t*\r\n\tEnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 40;\r\n\tOut.ar(0, out)\r\n}).add;\r\n\r\nthisThread.randSeed = [5651, 561, 51, 54, 54349857].choose.postln;\r\n\r\n// karussel\r\nSynthDef(\\karussel, {|scaling = 0|\r\n\tvar channels = #[0, 1, 2, 3, 4, 5, 6, 7];\r\n\tvar allEight;\r\n\tvar out;\r\n\t\r\n\tallEight = (12.collect{|i|\r\n\t\tvar freq = (rrand(10, 40).degreeToKey([0, 3, 6, 9] + scaling) * LFPulse.kr(2).range(2, 1))  .midicps\r\n\t\t*  EnvGen.ar(Env([0.125, 1, 1, 0], [0.5, 8.5, 1]), doneAction: 2)\r\n\t\t* LFNoise1.ar(10).range(0.98, 1.02);\r\n\t\tvar a, b;\r\n\t\tvar out;\r\n\t\tvar trig;\r\n\t\t\r\n\t\ttrig = Impulse.ar(1, i/8);\r\n\t\t#a, b = Pan2.ar(\r\n\t\t\tSinOsc.ar(freq, 0, XLine.kr(10, 1, 10)).tanh * EnvGen.ar(Env.perc(0.001, rrand(0.1, 0.5)), gate: trig),\r\n\t\t\tEnvGen.ar(Env.perc(0, 1), gate: trig)\r\n\t\t);\r\n\t\tchannels = channels.scramble;\r\n\t\tout = 0!8;\r\n\t\tout[channels.first] = a;\r\n\t\tout[channels.last] = b;\r\n\t}.sum + (Silent.ar!8))* 0.5;\r\n\tout = SplayAz.ar(8, allEight, Line.ar(0, 2, 5), center: Line.kr(16, 0, 10))\r\n\t* EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2)  * amp * 10;\r\n\tOut.ar(0, out.postln)\r\n}).add;\r\n\r\nthisThread.randSeed = 54349857;\r\n\r\n// Roundnround\r\nSynthDef(\\roundnround, {|scaling = 0|\r\n\tvar in, pos, out;\r\n\tvar freq = (({rrand(5, 20)}!5).degreeToKey([0, 3, 6, 9] + scaling))  .midicps\r\n\t* LFNoise1.ar(10).range(0.98, 1.02);\r\n\t\r\n\tin = SinOsc.ar(freq, Rand(0, pi), mul: Line.kr(10, 1, 5)).tanh;\r\n\tpos = {HPF.ar(\r\n\t\tWhiteNoise.ar.lag(\r\n\t\t\tLine.kr(0.05, 0, 9.5)\r\n\t), Line.kr(50, 20000, 9))\r\n\t+ rrand(0.0, 2)\r\n\t}!5\r\n\t+ SinOsc.ar(0.01\r\n\t\t//XLine.kr(0.1, 1, 10).range(0, 2)\r\n\t);\r\n\tout = PanAz.ar(\r\n\t\t8,\r\n\t\tin,\r\n\t\tpos\r\n\t).sum\r\n\t* EnvGen.ar(Env([0, 1, 1, 0], [0, 10, 0]), doneAction: 2) * amp * 2;\r\n\tOut.ar(0, out)\r\n}).add;\r\n\r\n// outro White\r\nSynthDef(\\outroWhite, {\r\n\tvar pink, white, whiter, whiter2, crackle, monowhiter, polywhiter, out;\r\n\t\r\n\tcrackle = {LPF.ar(Dust.ar(1000), 50, mul: 20)}!8;\r\n\twhiter = {\r\n\t\tHPF.ar(WhiteNoise.ar, XLine.kr(10000, 4000, 10), mul: XLine.kr(10, 0.5, 10))\r\n\t}!8;\r\n\twhite = {WhiteNoise.ar}!8;\r\n\tpink = {PinkNoise.ar}!8;\r\n\tpolywhiter = {\r\n\t\tHPF.ar(WhiteNoise.ar, 4000, mul: 0.5)\r\n\t}!8;\r\n\tmonowhiter = (\r\n\t\tHPF.ar(WhiteNoise.ar, 4000, mul: 0.5)\r\n\t)!8;\r\n\tout = SelectX.ar(\r\n\t\tEnvGen.ar(Env([2, 5, 5, 2, 1, 0], [0.1, 9.8, 0.1, 0, 5])),\r\n\t\t[polywhiter, monowhiter, crackle, pink, white, whiter]\r\n\t).tanh *\r\n\tEnvGen.ar(Env([0, 1, 1, 0], [0, 15, 5]), doneAction: 2) * amp;\r\n\tOut.ar(0, out)\r\n}).add;\r\n\r\n\r\nSynthDef(\\sortChannels, {\r\n\tvar ins = In.ar(0, 8) ++ Silent.ar(8);\r\n\r\n\tins =  ins * 0.9;\r\n\tins = ins.tanh;\r\n\t\r\n\t\r\n\t[0, 2, 1, 5, 7, 12, 6, 4, 3, 8, 9, 10, 11, 13, 14, 15].do{|idx, i|\r\n\t\tReplaceOut.ar(idx, ins[i])\r\n\t};\r\n\t\r\n}).add;\r\n\r\n)\r\n\r\n\r\n\r\n(\r\n{\r\n\tvar dt, playGroup, sorter;\r\n\t\r\n\tdt = 4.6;\r\n\tplayGroup = Group();\r\n\ts.sync;\r\n\tsorter = Synth.after(playGroup, \\sortChannels);\r\n\tdt.wait;\r\n\t\r\n\tSynth.grain(\\introWhite, target: playGroup);\r\n\t10.wait;\r\n\tdt.wait;\r\n\t\r\n\tSynth.grain(\\impulses, [\\freq, 12, \\i, 0, \\hFreq, 5000], target: playGroup);\r\n\t12.wait;\r\n\t[0, -2, 3, 0].do{|scale|\r\n\t\t[8, 12, 5, 10, 14, 16, 12].do{|freq, i|\r\n\t\t\tSynth.grain(\\impulses, [\\freq, freq-scale, \\i, i-scale, \\hFreq, 5000], target: playGroup);\r\n\t\t\t1.wait\r\n\t\t};\r\n\t\t11.wait;\r\n\t};\r\n\tdt.wait;\r\n\t\r\n\t[50, 67, 60, 50].do{|lfreq|\r\n\t\tSynth.grain(\\whiteshake, [\\lfreq, lfreq], target: playGroup);\r\n\t\t11.5.wait;\r\n\t};\r\n\tdt.wait;\r\n\t\r\n\t[0, -1, 3, 0].do{|scale|\r\n\t\tSynth.grain(\\karussel, [\\scaling, scale], target: playGroup);\r\n\t\t11.wait;\r\n\t};\r\n\tdt.wait;\r\n\t\r\n\t[0, -1, 3, 0].do{|scale|\r\n\t\tSynth.grain(\\roundnround, [\\scaling, scale], target: playGroup);\r\n\t\t11.5.wait;\r\n\t};\r\n\tdt.wait;\r\n\t\r\n\tSynth.grain(\\outroWhite, target: playGroup);\r\n\t\r\n\t20.wait;\r\n\t\r\n\tsorter.free;\r\n\t\r\n\t\r\n\t\r\n}.fork\r\n)",
   "labels" : [
      "piece",
      "fixedmedia"
   ],
   "description" : "An 8-channel fixed-media piece arranged and composed Till Bovermann aka LFSaw for the 2011 edition of 4for8, Helsinki.",
   "ancestor_list" : [],
   "author" : "LFSaw",
   "name" : "windter"
}
