{
   "name" : "Molecular music box",
   "author" : "grirgz",
   "ancestor_list" : [],
   "description" : "Inspired by this post http://www.kimri.org/blog/?p=487 I rewritten the algo to use more the patterns, so it's generated on the fly and it's easy to customize it =)",
   "labels" : [
      "pattern",
      "generative",
      "molecular"
   ],
   "code" : "(\r\n\tTempoClock.default.tempo = 1;\r\n\t\r\n\tPbind(\r\n\t\t\\index, Pseq((0..15),inf),\r\n\t\t\\dur, 1/4,\r\n\t\t\\octave, 4,\r\n\t\t\\do, Prout({ arg ev;\r\n\t\t\tvar degstr = Pseq((0..24)).asStream; // degrees\r\n\t\t\tvar lenstr = Pseq([4,3],inf).asStream; // note length\r\n\t\t\tvar buf = Array.fill(16,{List.new}); // record loop buffer\r\n\t\t\tvar deg, len;\r\n\r\n\t\t\tlen = lenstr.next;\r\n\r\n\t\t\tinf.do { \r\n\r\n\t\t\t\tvar i = ev[\\index];\r\n\t\t\t\tvar n = buf[i];\r\n\r\n\t\t\t\tif(n.size != 0) {\r\n\t\t\t\t\t// previous note found, change note length\r\n\t\t\t\t\tlen = lenstr.next;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tdeg = degstr.next;\r\n\t\t\t\tn.add([deg, len]);\r\n\r\n\t\t\t\tlen.do {\r\n\t\t\t\t\tvar i = ev[\\index];\r\n\t\t\t\t\tvar n = buf[i];\r\n\r\n\t\t\t\t\tif(n.size != 0) {\r\n\t\t\t\t\t\tev[\\degree] = n.flop[0];\r\n\t\t\t\t\t\tev[\\legato] = n.flop[1];\r\n\t\t\t\t\t} {\r\n\t\t\t\t\t\tev[\\isRest] = true;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tev = deg.yield;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}),\r\n\t).trace.play\r\n)\r\n\r\n(\r\n// change the rules a bit\r\n\t\r\nPdef(\\mol,\r\n\tPbind(\r\n\t\t\\index, Pseq((0..15),inf),\r\n\t\t\\dur, 1/4,\r\n\t\t//\\root, Pseq([2,0],inf),\r\n\t\t\\mtranspose, Pseq([0,3,4,3],inf).stutter(8),\r\n\t\t\\octave, 4,\r\n\t\t\\scale, Scale.dorian,\r\n\t\t\\do, Prout({ arg ev;\r\n\t\t\tvar degstr = Pseq((0..13),inf).asStream;\r\n\t\t\tvar lenstr = Pseq([3,8,2],inf).asStream;\r\n\t\t\tvar buf = Array.fill(16,{List.new});\r\n\t\t\tvar keep = 3; // max note per chord\r\n\t\t\tvar deg, len;\r\n\r\n\t\t\tlen = lenstr.next;\r\n\r\n\t\t\tinf.do { \r\n\r\n\t\t\t\tvar i = ev[\\index];\r\n\t\t\t\tvar n;\r\n\t\t\t\tbuf[i] = buf[i].keep(0-keep);\r\n\t\t\t\tn = buf[i];\r\n\r\n\t\t\t\tif(n.size != 0) {\r\n\t\t\t\t\t// previous note found, change note length\r\n\t\t\t\t\tlen = lenstr.next;\r\n\t\t\t\t};\r\n\r\n\t\t\t\tdeg = degstr.next;\r\n\t\t\t\tn.add([deg, len]);\r\n\r\n\t\t\t\tlen.do {\r\n\t\t\t\t\tvar i = ev[\\index];\r\n\t\t\t\t\tvar n = buf[i];\r\n\r\n\t\t\t\t\tif(n.size != 0) {\r\n\t\t\t\t\t\tev[\\degree] = n.flop[0];\r\n\t\t\t\t\t\tev[\\legato] = n.flop[1]/2;\r\n\t\t\t\t\t\t//ev[\\legato] = 1;\r\n\t\t\t\t\t} {\r\n\t\t\t\t\t\tev[\\isRest] = true;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tev = deg.yield;\r\n\t\t\t\t};\r\n\t\t\t}\r\n\t\t}),\r\n\t).trace\r\n).play;\r\n)",
   "id" : "1-4Ww",
   "is_private" : null
}
