{
   "labels" : [
      "livecoding"
   ],
   "id" : "1-51G",
   "is_private" : null,
   "code" : "// initialisation\r\n(\r\n// pre-tidy up just in case\r\nPdef.all.clear;\r\nNdef.all.clear;\r\ns.waitForBoot{\r\n\t// setup sample paths and \\bf synth\r\n\t~hitzpath=\"/Users/jsimon/Music/SuperCollider Recordings/hitzamples/\"; // drums\r\n\t~gampath=\"/Users/jsimon/Music/SuperCollider Recordings/soh/\"; // gamelan\r\n\t~bufs = (~hitzpath ++ \"*.aiff\").pathMatch.collect({ |i|  Buffer.read(s, i)});\r\n\tSynthDef(\\bf, {|out=0 buf=0 amp=0.1 freq=261.6255653006|\r\n\t\tvar sig = PlayBuf.ar(2, buf, BufRateScale.kr(buf) * freq/60.midicps, doneAction:2);\r\n\t\tOut.ar(out, sig * amp)\r\n\t}).add;\r\n\t~mbus = Bus.audio(s, 2);\r\n\tNdef(\\m).put(0, { InFeedback.ar(~mbus, 2) }).fadeTime_(0.2).play;\r\n\t// tempo clocks\r\n\tt = TempoClock(140/60).permanent_(true);\r\n\tu = TempoClock(140/60 * 2/3).permanent_(true);\r\n\ts.sync;\r\n\t\"SynthDef \\\\bf (args: buf, freq)\".postcln;\r\n\t\"~bufs with hitzamples loaded\".postcln;\r\n\t\"tempo clocks t & u\".postcln;\r\n\t\"Ndef \\\\m is mixer node, listning to ~mbus\".postcln;\r\n\tnil.value;\r\n};\r\n)\r\n\r\n// useful\r\n\r\n~bufs = (~gampath ++ \"*.aiff\").pathMatch.collect({ |i|  Buffer.read(s, i)});\r\n\r\n(~gr = {2.0.linrand}!16/2;\r\nbindef(\\x, \\amp, Pseq(~gr/5, inf)))\r\n\r\n~dr=({2.rand}!16.rand).normalizeSum*4; // array of variable length, always sums to 4\r\n(~dr={2.rand}.dup([4,8,16,32].choose).normalizeSum*4; choose array lengths\r\nPbindef(\\x, \\dur, Pseq(~dr, inf)))\r\n\r\nPdef.all.asCompileString;\r\n////////////////////\r\n// livecoding example\r\n\r\nPbindef(\\x, \\instrument, \\bf, \\out, ~mbus).play(t, quant: 4)\r\nNdef(\\m).put(2, \\filter -> { |in| JPverb.ar(in, t60:0.1)})\r\nNdef(\\m).put(1, \\filter -> { |in| Decimator.ar(in, rate: 200)})\r\nNdef(\\m).put(1, \\filter -> { |in| Decimator.ar(in, rate: Ndef(\\l))})\r\nNdef(\\m).put(2, nil)\r\nNdef(\\l, {LFNoise0.ar(10).range(200,600)})\r\nNdef(\\l2, {LFNoise0.ar(~t*4).range(0.1,1)})\r\nNdef(\\z).play.fadeTime_(2)\r\nNdef(\\z).stop\r\nNdef(\\z, {Blip.ar((100..120), 10 * Ndef(\\l2))*0.08})\r\n\r\n~t=t.tempo\r\n\r\nt.sync(160/60, 30)\r\nu.sync(160/60, 10)\r\n\r\nPbindef(\\x, \\buf, ~bufs.choose)\r\nPbindef(\\x, \\buf, Pseq({~bufs.choose}!4,inf))\r\nPbindef(\\x, \\note, -12)\r\nPbindef(\\x, \\note, -12.rand)\r\nPbindef(\\x, \\note, Pfunc({-24.rand}))\r\nPbindef(\\x, \\note, Pseq({-24.rand}!16,inf))\r\nPbindef(\\x, \\dur, Pseq([1,1,0.5,0.5,1,1,1,1,0.5,0.5].scramble/2,inf))\r\nPbindef(\\x, \\amp, 0.3)",
   "author" : "tedthetrumpet",
   "name" : "livecoding 01",
   "ancestor_list" : [],
   "description" : "Work-in-progress livecoding setup and example"
}
