{
   "name" : "Musical Toys For Little Robots",
   "author" : "mimetikmusic",
   "ancestor_list" : [],
   "description" : "An algorithmic/aleatoric composition for mallets and proxy patterns",
   "labels" : [
      "algorithmic aleatoric patterns mallets"
   ],
   "id" : "1-4S9",
   "is_private" : null,
   "code" : "/*\"Musical Toys For Little Robots\"\r\n\r\n       or\r\n\r\n  \"How I learned to stop worrying and love the proxy\"\r\n\r\nhttp://soundcloud.com/unknown-artist-6/musical-toys-for-little-robots\r\n\r\n */\r\n\r\n~fx=Bus.audio(s,2);\r\n\r\n(\r\nSynthDef(\\mallet,{arg in=0,out=0,m=48,a=1,r=1,p=0;\r\n\r\n\tvar sig=Array.fill(3,{|n| SinOsc.ar(m.midicps+(n*0.01),mul:a*0.3)}).sum;\r\n        var env=EnvGen.kr(Env.perc(0.001,r),gate:1,doneAction:2);\r\n\r\n\tOut.ar(out,Pan2.ar(sig*env,pos:p));\r\n};\r\n).add;\r\n\r\nSynthDef(\\rev,{arg in=0,out=0;\r\n\tvar sig=In.ar(in,2);\r\n\tsig=sig*0.8+CombC.ar(sig,0.5,0.3,0.5,0.2);\r\n\tOut.ar(out,sig)\r\n\t};\r\n).add;\r\n)\r\n\r\nSynth(\\rev,[\\in:~fx]);\r\n\r\n\r\n(\r\nfork{\r\n\tvar degrees=Prand([0,4,5,7,9,12],inf).asStream;\r\n\tvar root=[36,48,60,72];\r\n\tvar x;\r\n\tx=Array.new;\r\n\ta=PatternProxy(Pseq([0+root.wchoose([0.3,0.4,0.2,0.1])],inf));\r\n\td=1/8;\r\n\r\n\t~streams=[];\r\n\t~names={|pbind| ~streams=~streams++pbind.play(quant:1)};\r\n\r\n\t~names.value(Pbind(*[\\instrument:\\mallet,\r\n\t\t               \\m:a,\r\n\t\t               \\dur:d,\r\n\t\t               \\a:{rrand(0.4,1)*0.05},\r\n\t\t\t           \\p:{rrand(-0.2,0.2)},\r\n\t\t               \\r:{rrand(0.5,0.8)},\r\n\t\t               \\out:~fx\r\n\t]));\r\n\r\n\r\n    20.do({|n|\r\n\t\tx=x.add(degrees.next+root.wchoose([0.3,0.4,0.2,0.1]));\r\n\t\tx.postln;\r\n        a.source=Pseq(x.scramble,inf);\r\n\t\tif ((n+1) % 6 == 0,{~names.value(Pbind(*[\\instrument:\\mallet,\r\n\t\t\t           \\m:Pcollect({arg inval;inval-[-24,12].choose},a),\r\n\t\t               \\dur:d,\r\n\t\t\t           \\a:{rrand(0.4,1)*0.05/(n+1)},\r\n\t\t\t           \\p:{rrand(-0.2,0.2)},\r\n\t\t               \\r:{rrand(0.5,0.8)},\r\n\t\t               \\out:~fx\r\n\t\t]));\"new stream\".postln});\r\n\t\t\t(n+1).wait});\r\n\r\n\t19.do({|n|\r\n\t\tx.removeAt(0);\r\n\t\tx.postln;\r\n        a.source=Pseq(x.scramble,inf);\r\n\t\t(19-(n+1)).wait;});\r\n4.wait;\r\n\t~streams.do{|n| n.stop;2.wait};\r\n}\r\n)"
}
