{
   "ancestor_list" : [],
   "description" : "Hotroded version of \"08091500Acid309 by_otophilia\". With additional basssynth, euclidian patterns (needs the Bjorklund Object). With some randomisation for bass- and leadsynth.",
   "author" : "bernhard",
   "name" : "Hotroded \"08091500Acid309 by_otophilia\"",
   "is_private" : null,
   "id" : "1-5d8",
   "code" : "// hotroded version of \"08091500Acid309 by_otophilia\". With additional basssynth, euclidian patterns (needs the Bjorklund Object). With some randomisation for bass- and leadsynth.\r\n\r\n\r\n// -------- The Beat---------\r\n\r\n~dseq = [Bjorklund.new(2,12), Bjorklund.new(4,9)*4, Bjorklund.new(2,6)+1*(Bjorklund.new(7,16)*2), Bjorklund.new(4,9), Bjorklund.new(5,12)].flop;\r\n\r\n~dseq = [Bjorklund.new(3,8), Bjorklund.new(3,16).rotate(3)*3.5, Bjorklund.new(4,16).rotate(2)*4, Bjorklund.new(15,16)*4, Bjorklund.new(7,12)].flop;\r\n\r\n~dseq = [Bjorklund.new(3,8), Bjorklund.new(4,9).rotate(0)*3.5, Bjorklund.new(4,16).rotate(2)*4, Bjorklund.new(15,16)*4, Bjorklund.new(7,12)].flop;\r\n\r\n~dseq = [Bjorklund.new(2,16).rotate(0), Bjorklund.new(9,16).rotate(4)*2+Bjorklund.new(11,16).rotate(4)*1, Bjorklund.new(5,16).rotate(3)*2.5, Bjorklund.new(4,8).rotate(2)*3.5+1,Bjorklund.new(5,16).rotate(2)].flop;\r\n\r\n~dseq = [Bjorklund.new(5,16).rotate(0)*3, Bjorklund.new(5,8).rotate(4)*2+Bjorklund.new(0,16).rotate(1)*1, Bjorklund.new(3,16).rotate(2)*3, Bjorklund.new(4,8).rotate(2)*2.5+1,Bjorklund.new(5,16).rotate(2)].flop;\r\n\r\n~dseq = [Bjorklund.new(4,16).rotate(0), Bjorklund.new(3,24).rotate(4)*4+Bjorklund.new(9,16).rotate(1)*1, Bjorklund.new(5,16).rotate(2)*3, Bjorklund.new(5,8).rotate(2)*2.5+1,Bjorklund.new(5,16).rotate(2)].flop;\r\n\r\n\r\n// --------The Leadsynth-------\r\n\r\n// Enter values for rhythm in \"Bjorklund.new(k,n)\". Glides and Accents are the second array, Notes the last Array. Glide and Notes are scrambled, the notelengths shiftet with \"rotate.([some values].choose)\".\r\n\r\n~bseq = [Bjorklund.new(4,9).rotate([1,3,5,7].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[12,10,13,25,24,18,31,32, 33,23,18,6, 12,10,0,13].scramble + 31+12].flop;\r\n\r\n~bseq = [Bjorklund.new(5,12).rotate([1,3,5,7].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[24,12,13,-2, 25,13,24,13, 18,6,-2,0, -12,-2,1,18].scramble + 31+12].flop;\r\n\r\n~bseq = [Bjorklund.new(2,12).rotate([1,3,5,7].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[12,10,13,25, 24,36,37,34, 0,7,19,12, 13,10,37,34].scramble + 31+12].flop;\r\n\r\n// More random\r\n~bseq = [Bjorklund.new(rrand(3,9),[3,4,6,9,12,16].choose).rotate([1,3,5,7].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[27,12,13,10, 24,1,6,18, 12,13,10,0, -2,1,13,18].scramble + 31+24].flop;\r\n\r\n\r\n// --------The Basssynth-----------\r\n\r\n~bseq2 = [Bjorklund.new(5,12).rotate([0,2,4,6].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[0,12,10,12, 24,10,7,12, -2,7,-7,0, 10,-2,22,24].scramble + 31].flop;\r\n\r\n~bseq2 = [Bjorklund.new(2,6).rotate([0,2,4,6].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[0,12,10,12, 24,10,7,12, -2,7,-7,0, 10,-2,22,24].scramble + 31].flop;\r\n\r\n// More random\r\n~bseq2 = [Bjorklund.new(rrand(1,3),[3,6,8,9,12].choose).rotate([0,2,4,6].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[0,12,10,12, 24,10,7,12, -2,7,-7,0, 10,-2,22,24].scramble + 31].flop;\r\n\r\n\r\n// Run first the Routine, then change patterns ~dseq, ~bseq and ~bseq2 in the upper part\r\n\r\n(\r\nRoutine.run {var c; c = Condition.new; s.freeAll; TempoClock.all.do{|x|x.clear}; s.bootSync(c);\r\n\r\n( // **** SynthDefs ****\r\n\r\n\tSynthDef(\"kick\", {\r\n\t\targ outBus=0;\r\n\t\tvar env0, env1, env1m, out;\r\n\r\n\t\tenv0 =  EnvGen.ar(Env.new([0.5, 1, 0.5, 0], [0.005, 0.06, 0.26], [-4, -2, -4]), doneAction:2);\r\n\t\tenv1 = EnvGen.ar(Env.new([110, 59, 29], [0.005, 0.29], [-4, -5]));\r\n\t\tenv1m = env1.midicps;\r\n\r\n\t\tout = LFPulse.ar(env1m, 0, 0.5, 1, -0.5);\r\n\t\tout = out + WhiteNoise.ar(1);\r\n\t\tout = LPF.ar(out, env1m*1.5, env0);\r\n\t\tout = out + SinOsc.ar(env1m, 0.5, env0);\r\n\r\n\t\tout = out * 1.2;\r\n\t\tout = out.clip2(1);\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\tSynthDef(\"snare\", {\r\n\t\targ outBus=0, amp=0.8;\r\n\t\tvar env0, env1, env2, env1m, oscs, noise, out;\r\n\r\n\t\tenv0 = EnvGen.ar(Env.new([0.5, 1, 0.5, 0], [0.005, 0.03, 0.10], [-4, -2, -4]));\r\n\t\tenv1 = EnvGen.ar(Env.new([110, 60, 49], [0.005, 0.1], [-4, -5]));\r\n\t\tenv1m = env1.midicps;\r\n\t\tenv2 = EnvGen.ar(Env.new([1, 0.4, 0], [0.05, 0.13], [-2, -2]), doneAction:2);\r\n\r\n\t\toscs = LFPulse.ar(env1m, 0, 0.5, 1, -0.5) + LFPulse.ar(env1m * 1.6, 0, 0.5, 0.5, -0.25);\r\n\t\toscs = LPF.ar(oscs, env1m*1.2, env0);\r\n\t\toscs = oscs + SinOsc.ar(env1m, 0.8, env0);\r\n\r\n\t\tnoise = WhiteNoise.ar(0.2);\r\n\t\tnoise = HPF.ar(noise, 200, 2);\r\n\t\tnoise = BPF.ar(noise, 6900, 0.6, 3) + noise;\r\n\t\tnoise = noise * env2;\r\n\r\n\t\tout = oscs + noise;\r\n\t\tout = out.clip2(1) * amp;\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\tSynthDef(\"clap\", {\r\n\t\targ outBus=0, amp = 0.5;\r\n\t\tvar env1, env2, out, noise1, noise2;\r\n\r\n\t\tenv1 = EnvGen.ar(Env.new([0, 1, 0, 1, 0, 1, 0, 1, 0], [0.001, 0.013, 0, 0.01, 0, 0.01, 0, 0.03], [0, -3, 0, -3, 0, -3, 0, -4]));\r\n\t\tenv2 = EnvGen.ar(Env.new([0, 1, 0], [0.02, 0.3], [0, -4]), doneAction:2);\r\n\r\n\t\tnoise1 = WhiteNoise.ar(env1);\r\n\t\tnoise1 = HPF.ar(noise1, 600);\r\n\t\tnoise1 = BPF.ar(noise1, 2000, 3);\r\n\r\n\t\tnoise2 = WhiteNoise.ar(env2);\r\n\t\tnoise2 = HPF.ar(noise2, 1000);\r\n\t\tnoise2 = BPF.ar(noise2, 1200, 0.7, 0.7);\r\n\r\n\t\tout = noise1 + noise2;\r\n\t\tout = out * 2;\r\n\t\tout = out.softclip * amp;\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\tSynthDef(\"hat\", {\r\n\t\targ outBus=0, amp=0.3;\r\n\t\tvar env1, env2, out, oscs1, noise, n, n2;\r\n\r\n\t\tn = 5;\r\n\t\tthisThread.randSeed = 4;\r\n\r\n\t\tenv1 = EnvGen.ar(Env.new([0, 1.0, 0], [0.001, 0.2], [0, -12]));\r\n\t\tenv2 = EnvGen.ar(Env.new([0, 1.0, 0.05, 0], [0.002, 0.05, 0.03], [0, -4, -4]), doneAction:2);\r\n\r\n\t\toscs1 = Mix.fill(n, {|i|\r\n\t\t\tSinOsc.ar(\r\n\t\t\t\t( i.linlin(0, n-1, 42, 74) + rand2(4.0) ).midicps,\r\n\t\t\t\tSinOsc.ar( (i.linlin(0, n-1, 78, 80) + rand2(4.0) ).midicps, 0.0, 12),\r\n\t\t\t\t1/n\r\n\t\t\t)\r\n\t\t});\r\n\r\n\t\toscs1 = BHiPass.ar(oscs1, 1000, 2, env1);\r\n\t\tn2 = 8;\r\n\t\tnoise = WhiteNoise.ar;\r\n\t\tnoise = Mix.fill(n2, {|i|\r\n\t\t\tvar freq;\r\n\t\t\tfreq = (i.linlin(0, n-1, 40, 50) + rand2(4.0) ).midicps.reciprocal;\r\n\t\t\tCombN.ar(noise, 0.04, freq, 0.1)\r\n\t\t}) * (1/n) + noise;\r\n\t\tnoise = BPF.ar(noise, 6000, 0.9, 0.5, noise);\r\n\t\tnoise = BLowShelf.ar(noise, 3000, 0.5, -6);\r\n\t\tnoise = BHiPass.ar(noise, 1000, 1.5, env2);\r\n\r\n\t\tout = noise + oscs1;\r\n\t\tout = out.softclip;\r\n\t\tout = out * amp;\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\tSynthDef(\"acid\", {\r\n\t\targ outBus=0, gate=1, pitch=50, amp=8;\r\n\t\tvar env1, env2, out;\r\n\t\tpitch = Lag.kr(pitch, 0.12 * (1-Trig.kr(gate, 0.001)) * gate);\r\n\t\tenv1 = EnvGen.ar(Env.new([0, 1.0, 0, 0], [0.001, 2.0, 0.04], [0, -4, -4], 2), gate, amp);\r\n\t\tenv2 = EnvGen.ar(Env.adsr(0.001, 0.8, 0, 0.8, 70, -4), gate);\r\n\t\tout = LFSaw.ar(pitch.midicps, 2, -1);\r\n\r\n\t\t\tout = MoogLadder.ar(out, (pitch + env2/2).midicps+(LFNoise1.kr(0.2,1100,1500)),LFNoise1.kr(0.4,0.9).abs+0.3,3);\r\n\t\t\tout = LeakDC.ar((out * env1).tanh/2.7);\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\r\n\t\t\t\t\tSynthDef(\"acid2\", {\r\n\t\targ outBus=0, gate=1, pitch=20, amp=3.5;\r\n\t\tvar env1, env2, out;\r\n\t\tpitch = Lag.kr(pitch, 0.12 * (1-Trig.kr(gate, 0.001)) * gate);\r\n\t\tenv1 = EnvGen.ar(Env.perc(0.001,0.7,4,-4), gate, amp);\r\n\t\tenv2 = EnvGen.ar(Env.perc(0.001,0.3,600,-3), gate);\r\n\t\tout = LFPulse.ar(pitch.midicps, 0, 0.5);\r\n\r\n\t\t\tout = MoogLadder.ar(out, 100+pitch.midicps + env2,0.1);\r\n\t\t\tout = LeakDC.ar((out * env1).tanh);\r\n\r\n\t\tOut.ar(outBus, out.dup);\r\n\t}).add;\r\n\r\n\r\n\tSynthDef(\"fx\", {\r\n\t\targ outBus=0, gate=0;\r\n\t\tvar out;\r\n\r\n\t\tout = In.ar(outBus, 2);\r\n\t\tout = FreeVerb2.ar( BPF.ar(out[0], 3500, 1.5), BPF.ar(out[1], 3500, 1.5), 1.0, 0.95, 0.15) * EnvGen.kr(Env.new([0.02, 0.3, 0.02], [0.4, 0.01], [3, -4], 1), 1-Trig.kr(gate, 0.01)) + out;\r\n\t\tout = LeakDC.ar(out/2);\r\n\t\tout = Limiter.ar(out, 1.0, 0.02);\r\n\r\n\t\t\tReplaceOut.ar(outBus, Limiter.ar(out,0.9));\r\n\t}).add;\r\n);\r\n\r\ns.sync(c);\r\n\r\n( // **** Sequence ****\r\n\r\n~dseq = [Bjorklund.new(3,8), Bjorklund.new(3,16).rotate(4)*3.5, Bjorklund.new(4,16).rotate(2)*4, Bjorklund.new(15,16)*4, Bjorklund.new(7,12)].flop;\r\n\r\n~bseq = [Bjorklund.new(7,9).rotate([1,3,5,7].choose),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[12,10,13,25,24,18,31,32, 33,23,18,6, 12,10,0,13].scramble + 31].flop;\r\n\r\n~bseq2 = [Bjorklund.new(1,6).rotate(2),[1,2,1,0, 1,1,0,2, 2,4,2,0, 1,0,1,4].scramble,[0,6,10,12, 13,18,10,12, -2,6,6,10, 13,12,22,24].scramble + 31].flop;\r\n\r\n\t~pnt = 0;\r\n\t~shf = 0.16;\r\n\t~bpm = 130;\r\n\r\n\t~clock = TempoClock(~bpm/60);\r\n\r\n\t~clock.sched(0.0, {\r\n\t\tvar delta, bass,bass2;\r\n\t\tdelta = if(~pnt%2 == 0){1/4 * (1+~shf)}{1/4 * (1-~shf)};\r\n\r\n\t\ts.bind{\r\n\t\t\tif(~pnt == 0){\r\n\t\t\t\t~group = Group.new;\r\n\t\t\t\t~acid = Synth.head(~group, \"acid\", [\\gate, 0]);\r\n\t\t\t\t~acid2 = Synth.head(~group, \"acid2\", [\\gate, 0]);\r\n\t\t\t\t~fx = Synth.after(~group, \"fx\");\r\n\t\t\t};\r\n\r\n\t\t\t~dseq.wrapAt(~pnt).do{|x, i|\r\n\t\t\t\tswitch(i,\r\n\t\t\t\t\t0, { if( x>0 ){ Synth.head(~group, \"kick\") } },\r\n\t\t\t\t\t1, { if( x>0 ){ Synth.head(~group, \"snare\", [\\amp, (x/4).squared*0.7]) } },\r\n\t\t\t\t\t2, { if( x>0 ){ Synth.head(~group, \"clap\", [\\amp, (x/4).squared*0.5]) } },\r\n\t\t\t\t\t3, { if( x>0 ){ Synth.head(~group, \"hat\", [\\amp, (x/4).squared*0.32]) } },\r\n\t\t\t\t\t4, { ~fx.set(\\gate, (x>0).binaryValue) }\r\n\t\t\t\t);\r\n\t\t\t};\r\n\r\n\t\t\tbass = ~bseq.wrapAt(~pnt);\r\n\t\t\t~acid.set(\\pitch, bass[2]);\r\n\t\t\tif(bass[0]==1){ ~acid.set(\\gate, 1) };\r\n\r\n\t\t\t\tbass2 = ~bseq2.wrapAt(~pnt);\r\n\t\t\t~acid2.set(\\pitch, bass2[2]);\r\n\t\t\tif(bass2[0]==1){ ~acid2.set(\\gate, 1) };\r\n\t\t};\r\n\t\tif(bass[1]>0){ ~clock.sched(delta * bass[1]/4 * 0.99, { s.bind{ ~acid.set(\\gate, 0) } }) };\r\n\r\n\t\t\tif(bass2[1]>0){ ~clock.sched(delta * bass2[1]/4 * 0.99, { s.bind{ ~acid2.set(\\gate, 0) } }) };\r\n\r\n\t\t~pnt = ~pnt+1;\r\n\t\tdelta;\r\n\t});\r\n);\r\n\r\n});",
   "labels" : [
      "techno",
      "random",
      "acid",
      "303",
      "909",
      "euclidian"
   ]
}
