{
   "code" : "(\r\n~molecular_box = { arg lenpat, quant=16, keep=3, pattern;\r\n\r\n\tProut({ arg ev;\r\n\t\r\n\t\tvar lenstr = lenpat.asStream;\r\n\t\tvar patstr;\r\n\t\tvar buf = Array.fill(quant,{List.new});\r\n\t\tvar pat, len;\r\n\t\tvar i;\r\n\t\tvar basepat;\r\n\r\n\t\tpatstr = pattern.asStream;\r\n\r\n\t\tlen = lenstr.next;\r\n                if(len.isNil) {\r\n                    nil.yield;\r\n                };\r\n\r\n\t\ti = 0;\r\n\t\tinf.do {\r\n\t\t\tvar n;\r\n\t\t\tbuf[i] = buf[i].keep(0-keep);\r\n\t\t\tn = buf[i];\r\n\r\n\t\t\tif(n.size != 0) {\r\n\t\t\t\t// previous note found, change note length\r\n\t\t\t\tlen = lenstr.next;\r\n                                if(len.isNil) {\r\n                                   nil.yield;\r\n                                };\r\n\t\t\t};\r\n\r\n\t\t\tbasepat = ev;\r\n\t\t\tbasepat[\\legato] = len;\r\n\t\t\tpat = patstr.next(basepat);\r\n                        if(pat.isNil) {\r\n                           nil.yield;\r\n                        };\r\n\r\n\t\t\tn.add(Pn(pat,1));\r\n\r\n\t\t\tlen.do {\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\tev = Ppar(n).embedInStream;\r\n\t\t\t\t} {\r\n\t\t\t\t\tvar myev;\r\n\t\t\t\t\tmyev = ev.deepCopy;\r\n\t\t\t\t\tmyev[\\isRest] = true;\r\n\t\t\t\t\tev = Pn(myev,1).embedInStream;\r\n\t\t\t\t};\r\n\t\t\t\ti = (i+1) % quant;\r\n\t\t\t};\r\n\t\t}\r\n\t})\r\n};\r\n);\r\n\r\n\r\n\r\n\r\n(\r\nSynthDef(\\simple, { arg out=0, amp=0.1, gate=1, pan=0, spread=0.8, freq=200, doneAction=2;\r\n\tvar sig, sig1, sig2, sig3;\r\n\tsig = SinOsc.ar(freq * [1,1.01,2.01,1.02,1/2] * (SinOsc.kr(3)*0.01+1));\r\n\tsig = sig + LFTri.ar(freq * [1,1/2,1.01]);\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:doneAction);\r\n\tsig = Splay.ar(sig, spread, amp, pan);\r\n\tOut.ar(out, sig);\r\n}).add;\r\nSynthDef(\\saw, { arg out=0, amp=0.1, gate=1, pan=0, spread=0.8, freq=200, doneAction=2;\r\n\tvar sig, sig1, sig2, sig3;\r\n\tvar env;\r\n\tsig = LFSaw.ar(freq * [1,1.01,2.01,1.02]);\r\n\tsig = Pulse.ar(freq * [1,1.01,2,2.01,1.002]) + sig;\r\n\tenv = EnvGen.ar(Env.adsr(0.4,0.3,0.31,0.1),gate,doneAction:0);\r\n\tsig = RLPF.ar(sig, \\ffreq.kr(1000) * (env+0.5));\r\n\tsig = sig * EnvGen.ar(\\adsr.kr(Env.adsr(0.01,0.1,0.8,0.1)),gate,doneAction:doneAction);\r\n\tsig = Splay.ar(sig, spread, amp, pan);\r\n\tOut.ar(out, sig);\r\n}).add;\r\nSynthDef(\\reverb, {arg out = 0, in=0;\r\n    var sig = In.ar(in, 2);\r\n    sig = FreeVerb.ar(sig,0.5,0.7);\r\n    ReplaceOut.ar(out, sig);\r\n}).add;\r\n);\r\n\r\n\r\n\r\nSynth.tail(1,\\reverb); // if you want\r\n\r\n\r\n\r\n(\r\n\r\nPdef(\\mol, \r\n\r\n\t~molecular_box.(Pseq([4.5,8],inf), 16, 3,\r\n\t\tPseq([\r\n\t\t\tPbind(\r\n\t\t\t\t\\instrument, Pn(\\simple,4),\r\n\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t[ Env.adsr(0.1,0.1,0.8,0.4) ],\r\n\t\t\t\t\t[ Env.adsr(0.4,0.4,0.6,0.2) ],\r\n\t\t\t\t],inf),\r\n\t\t\t\t\\legato, Pkey(\\legato) / 2,\r\n\t\t\t),\r\n\t\t\tPbind(\r\n\t\t\t\t\\instrument, Pn(\\saw,4),\r\n\t\t\t\t\\ffreq, Pseq([5000,1000,200,2000],inf),\r\n\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t[ Env.adsr(0.1,0.4,0.4,0.3) ],\r\n\t\t\t\t],inf),\r\n\t\t\t\t\\legato, Pkey(\\legato) / 2,\r\n\t\t\t),\r\n\t\t],inf) \r\n\t\t<>\r\n\t\tPbind(\r\n\t\t\t\\degree, Pseq([\r\n\t\t\t\tPseq((0..13)),\r\n\t\t\t\tPseq((0..10)-4),\r\n\t\t\t\tPseq((5..1)),\r\n\t\t\t\tPseq((0..5)*2),\r\n\t\t\t\tPseq((20..10)),\r\n\t\t\t\tPseq((0..10)-10),\r\n\t\t\t],inf),\r\n\t\t);\r\n\r\n\t)\r\n\t<>\r\n\tPbind(\r\n\t\t\\dur, 1/4,\r\n\t\t\\scale, Scale.minor,\r\n\t)\r\n\r\n).play;\r\n\r\n)\r\n\r\n\r\n\r\n\r\n(\r\n\r\nPdef(\\mol, \r\n\r\n\t~molecular_box.(Pseq([4.5,2,5,1],inf), 16, 3,\r\n\t\tPbind(\r\n\t\t\t\\legato, Pseq([\r\n\t\t\t\tPfuncn({ arg ev; ev[\\legato] },16),\r\n\t\t\t\tPser([0.5],16)\r\n\t\t\t],inf)\r\n\t\t)\r\n\t\t<>\r\n\t\tPseq([\r\n\t\t\tPbind(\r\n\t\t\t\t\\instrument, Pn(\\simple,4),\r\n\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t[ Env.adsr(0.1,0.1,0.8,0.4) ],\r\n\t\t\t\t\t[ Env.adsr(0.4,0.4,0.6,0.2) ],\r\n\t\t\t\t],inf),\r\n\t\t\t\t\\legato, Pkey(\\legato) * Pseq([0.2,0.8,1.2],inf).stutter(3),\r\n\t\t\t),\r\n\t\t\tPbind(\r\n\t\t\t\t\\instrument, Pn(\\saw,2),\r\n\t\t\t\t\\ffreq, Pseq([5000,1000,700],inf),\r\n\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t[ Env.adsr(0.1,0.4,0.4,0.3) ],\r\n\t\t\t\t],inf),\r\n\t\t\t),\r\n\t\t\tPbind(\r\n\t\t\t\t\\instrument, Pn(\\saw,2),\r\n\t\t\t\t\\ffreq, Pkey(\\freq) * 4,\r\n\t\t\t\t\\adsr, Pseq([\r\n\t\t\t\t\t[ Env.adsr(0.1,0.4,0.4,0.3) ],\r\n\t\t\t\t],inf),\r\n\t\t\t),\r\n\t\t],inf) \r\n\t\t<>\r\n\t\tPbind(\r\n\t\t\t\\degree, Pseq([\r\n\t\t\t\tPseq((5..1)),\r\n\t\t\t\tPseq((0..3)),\r\n\t\t\t\tPseq((0..10)-4),\r\n\t\t\t\tPseq((0..5)*3),\r\n\t\t\t\tPseq((2..10)),\r\n\t\t\t\tPseq((0..10)-10),\r\n\t\t\t],inf),\r\n\t\t);\r\n\r\n\t)\r\n\t<>\r\n\tPbind(\r\n\t\t\\dur, 1/4,\r\n\t\t\\mtranspose, 2,\r\n\t\t\\root, 4,\r\n\t\t\\scale, Scale.aeolian,\r\n\t)\r\n\r\n).play;\r\n)",
   "is_private" : null,
   "id" : "1-4Wx",
   "labels" : [
      "pattern",
      "generative",
      "molecular"
   ],
   "ancestor_list" : [],
   "description" : "Same algo, but instead of picking the next note in the scale, it take the next event in an event pattern, much more possibilities, I have fun for hours with that =)",
   "name" : "Molecular music box 2",
   "author" : "grirgz"
}
