{
   "code" : "(\r\nfork {\r\n    var size = 3.rrand(10).debug('envelope size');\r\n    {|dur=1, amp=0.8, pan = 0|\r\n        Pan2.ar( \r\n            SinOsc.ar(\r\n                EnvGen.ar(Env(\\freq_l.kr(400!size), \\freq_d.kr(0.1!(size-1)), \\freq_c.kr(1!(size-1)))), // named controls\r\n                mul: EnvGen.ar(Env.sine(dur, amp), doneAction:2)\r\n            ).tanh, \r\n            pan\r\n        );\r\n    }.asSynthDef.name_(\"dzin\").add;\r\n    Server.default.sync;\r\n    Pbind(*[\r\n        instrument: \\dzin,\r\n        delta: Pseg(Prand(1/2.pow((0..3)), inf), Pwhite(1,4), \\lin),\r\n        dur: Pfunc({ thisThread.clock.beatDur }) * Pkey(\\delta), // set dur to delta duration\r\n        freq_l: Pcollect(`_, Ptuple({ Pbrown(0,1,0.05).linexp(0,1,40,4e3) } ! size, inf)), // array refs - freq envelope levels\r\n        freq_c: Ptuple({ Pcollect(`_, Ptuple({ Pbrown(-4,4,0.5) } ! (size-1), inf)) }!2, inf), // array of arrayrefs - multichannel expansion w/ different curve levels\r\n        freq_d: Pfunc({ |e| Ref(Array.rand(size-1,0.3,1).normalizeSum * e.dur) }), // sending array ref with total dur = Pkey(\\dur)\r\n        pan: Ptuple( { Pbrown() - 0.5 * 2 } ! 2, inf ), // array - multichannel expansion\r\n        amp: Ptuple( { Pbrown() / 10 + 0.1 } ! 2, inf ) // same\r\n    ]).play(TempoClock(156/60));\r\n}\r\n)",
   "id" : "1-4Ts",
   "is_private" : null,
   "labels" : [
      "sketch"
   ],
   "description" : "controlling arrayed args using pattern",
   "ancestor_list" : [],
   "name" : "birdy",
   "author" : "vividsnow"
}
