{
   "id" : "1-Eo",
   "is_private" : null,
   "code" : "( \r\nvar w, buttons, data, synths, dims = [16,16], resolution = 4; \r\nw = Window(\"rand-n-step\", Rect(50,250,dims[0]*22 + 10,dims[1]*22+10)); \r\n\r\nsynths = Array.fill(dims[1], { |i|\r\n\tSynthDef('rstp'++i, {\r\n\t\tvar sig = Pan2.ar(\r\n\t\t\tPMOsc.ar(80.exprand(10000), 1.exprand(200), 1.exprand(20)),\r\n\t\t\t-1.0.rand2,\r\n\t\t\tEnvGen.kr(Env(Array.rand(4, 0, 0.1.rrand(0.5)).add(0), Array.rand(3, 0.1, 0.3).add(0.1), -5.rrand(5)), doneAction: 2)\r\n\t\t);\r\n\t\tOut.ar(0, sig);\r\n\t}).add.name;\r\n});\r\n\r\ndata = Array2D(dims[1],dims[0]);\r\nbuttons = Array.fill(dims[1], { |l|\r\n\tArray.fill(dims[0], { |i| \r\n\t\tButton( w, Rect( 5 + (22*i), 5 + (22*l), 20, 20) ).states_([ ['-'], ['+'], ['%'] ]).action_({ |b| data[l,i] = b.value }); \r\n\t})\r\n}); \r\n\r\nAppClock.play({\r\n\tinf.do({|i|\r\n\t\tdims[1].do({ |l|\r\n\t\t\t(buttons[l] @@ i).font_(Font(\"sans\", 20));\r\n\t\t\t(buttons[l] @@ (i-1)).font_(Font(\"sans\", 14));\r\n\t\t\tswitch( data[l,i.mod(dims[0])],\r\n\t\t\t\t1, { Synth(synths[l]) },\r\n\t\t\t\t2, { 0.5.coin.if({ Synth(synths[l]) }) }\r\n\t\t\t);  \r\n\t\t});\r\n\t\t(TempoClock.default.tempo.reciprocal / resolution).yield;\r\n\t});\r\n}.asRoutine);\r\nw.front; \r\n)",
   "labels" : [
      "gui",
      "sequencer",
      "random",
      "step"
   ],
   "description" : "simple gui step sequencer of PMOsc-based random instruments\r\n\r\nnote: modify variables \"dims\" and \"resolution\" to change number of instruments/steps and time resolution",
   "ancestor_list" : [],
   "name" : "rand-n-step",
   "author" : "vividsnow"
}
