{
   "ancestor_list" : [],
   "description" : "TR-909 drum machine I made with a 32 step sequencer, I could not get the hi-hats, ride, etc perfectly so I opted to sample them (sorry).",
   "name" : "Amasiko",
   "author" : "qqqswitch",
   "is_private" : null,
   "id" : "1-5iZ",
   "code" : "~ohh = Buffer.read(~s1, '/samples/OpenHat/OpenHat-accent050-decay100.wav');\r\n~ohh2 = Buffer.read(~s1, '/samples/OpenHat/OpenHat-accent100-decay100.wav');\r\n~chh = Buffer.read(~s1, '/samples/ClosedHat/ClosedHat909-decay100.wav');\r\n~crash = Buffer.read(~s1, '/samples/Crash/Crash-accent090-tune050.wav');\r\n~clap = Buffer.read(~s1, '/samples/HandClap/HandClap909-accent100.wav');\r\n~rim = Buffer.read(~s1, '/samples/RimShot/RimShot909-accent100.wav');\r\n~ride = Buffer.read(~s1, '/samples/Ride/Ride909-accent050-tune050.wav');\r\n(\r\nSynthDef(\\moap, {\r\n\t// YES everything runs at audio rate. Works with hardware clocks but please don't send 5v into your microphone input, find some way to attenuate it or just use another computer AUX OUT --> MIC IN\r\n\t// hence why I used send(~s1) instead of add. This is sent to my percussion computer.\r\n\targ ohhVol = 0, chhVol = 0, kickVol = 0, snareVol = 0, amp = 1, rimVol = 0, swingDur = 1,\r\n\tclockIn = 0, clkCut = 500, katk = 0, krel = 0.9, div = 1, watk = 0, rideBuf = 7, swingWidth = 0.1,\r\n\twrel = 0.01, chhBuf = 0, maxSteps = 31, ohhBuf = 1, channels = 1, rideVol = 0, kwAmp = 0.015,\r\n\tohhRate = 1, chhRate = 1, patk = 0, prel = 0.03, startFreq = 350, rideRate = 2, kwBW = 1,\r\n\tkFreq = 80, satk = 0, srel = 0.5, swingMax = 0.0, swingMin = 0, pitchRatio = 1.6, kwFreq = 4500,\r\n\twVol = 0.15, wFreq = 5500, bw = 1, trigDur = 0.001, sFreq = 330, sStart = 350, rimBuf = 6,\r\n\ts2Dec = 0.07, crashVol = 0.0, crashBuf = 2, clapVol = 0.0, s1Dec = 0.12, rimRate = 2, thresh = 0.01,\r\n\tclapBuf = 6, crashRate = 2, clapRate = 2, snareToneFreq = 150, tone = 0.5, kwrel = 0.03;\r\n\r\n\r\n\tvar clock, ohhArr, kickArr, snareArr, steppa, kswing, kpenv, spenv, clapArr, crashArr,\r\n\tohh, chh, kick, snare, mix, kickEnv, penv, chhArr, sswing, wEnv, clap, crash, retrig,\r\n\tsnareEnv, chhSelecta, ohhSelecta, kickSelecta, snareSelecta, crashSelecta, clapSelecta,\r\n\tsnareTone1, snareTone2, rimArr, rideArr, rideSelecta, rimSelecta, rim, ride, kwn;\r\n\r\n\tclock = Trig1.ar(PulseDivider.ar(Trig.ar(HPF.ar(SoundIn.ar(clockIn), clkCut) > thresh, 0.001), div), trigDur);\r\n\t// ^ Change this to a simple Impulse.ar((bpm/60)*8); if you dont have hardware.\r\n\r\n\tchhArr = \\chhz.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]); //Included for your ease-of-use, I know it would've been easier to write 0!32.\r\n\tohhArr = \\ohhz.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n\tkickArr = \\kickz.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n\tsnareArr = \\snarez.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n\tcrashArr = \\crashz.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n\tclapArr = \\clapz.ar([0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n\trimArr = \\rimz.ar([0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1]);\r\n\trideArr = \\ridez.ar([0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1]);\r\n\r\n\r\n\r\n\tsteppa = Stepper.ar(clock, 0, 0, maxSteps);\r\n\r\n\tchhSelecta = Trig1.ar(Select.ar(steppa, chhArr) * clock, 0.001);\r\n\tohhSelecta = Trig1.ar(Select.ar(steppa, ohhArr) * clock, 0.001);\r\n\tkickSelecta = Trig1.ar(Select.ar(steppa, kickArr) * clock, 0.001);\r\n\tsnareSelecta = Trig1.ar(Select.ar(steppa, snareArr) * clock, 0.001);\r\n\tclapSelecta = Trig1.ar(Select.ar(steppa, clapArr) * clock, 0.001);\r\n\tcrashSelecta = Trig1.ar(Select.ar(steppa, crashArr) * clock, 0.001);\r\n\trimSelecta = Trig1.ar(Select.ar(steppa, rimArr) * clock, 0.001);\r\n\trideSelecta = Trig1.ar(Select.ar(steppa, rideArr) * clock, 0.001);\r\n\r\n\tohh = PlayBuf.ar(1, ohhBuf, ohhRate, ohhSelecta) * ohhVol;\r\n\tchh = PlayBuf.ar(1, chhBuf, chhRate, chhSelecta) * chhVol;\r\n\tclap = PlayBuf.ar(1, clapBuf, clapRate, clapSelecta) * clapVol;\r\n\tcrash = PlayBuf.ar(1, crashBuf, crashRate, crashSelecta) * crashVol;\r\n\trim = PlayBuf.ar(1, rimBuf, rimRate, rimSelecta) * rimVol;\r\n\tride = PlayBuf.ar(1, rideBuf, rideRate, rideSelecta) * rideVol;\r\n\r\n\tkswing = katk + LFGauss.ar(swingDur, swingWidth).range(swingMin, swingMax);\r\n\tsswing = satk + LFGauss.ar(swingDur, swingWidth).range(swingMin, swingMax);\r\n\r\n\r\n\r\n\tkickEnv = EnvGen.ar(Env.perc(kswing, krel), kickSelecta) * kickVol;\r\n\tkwn = BBandPass.ar(WhiteNoise.ar()*EnvGen.ar(Env.perc(kswing,kwrel), kickSelecta)*kwAmp, kwFreq, kwBW);\r\n\tsnareEnv = EnvGen.ar(Env.perc(sswing, srel), snareSelecta) * snareVol;\r\n\tkpenv = startFreq * EnvGen.ar(Env.perc(patk, prel), kickSelecta);\r\n\tspenv = EnvGen.ar(Env([pitchRatio, 1], [prel], \\exponential), snareSelecta);\r\n\twEnv = EnvGen.ar(Env.perc(watk, wrel), snareSelecta) * wVol;\r\n\r\n\tkick = ((kwn + SinOsc.ar(kpenv + kFreq)) * kickEnv).clip2; // GABBBAAAAAA\r\n\tsnareTone1 = Ringz.ar(Trig.ar(snareSelecta, SampleDur.ir), snareToneFreq*spenv, s1Dec);\r\n\tsnareTone2 = Ringz.ar(Trig.ar(snareSelecta, SampleDur.ir), sFreq*spenv, s2Dec);\r\n\tsnare = ((snareTone1 + (snareTone2)*0.6).clip2(0.8) * tone + BBandPass.ar(WhiteNoise.ar()*wEnv, wFreq, bw)) * snareEnv;\r\n\r\n\r\n\tmix = (kick + snare + ohh + chh + clap + crash + rim + ride); // Mixed like this on purpose\r\n\tOut.ar(0, mix * amp);\r\n\r\n}).send(~s1);\r\n)\r\n(\r\n~hatz = Synth(\\moap, [\\amp, 1], ~s1);\r\n~hatz.set(\\clapBuf, ~clap.bufnum);\r\n~hatz.set(\\crashBuf, ~crash.bufnum);\r\n~hatz.set(\\rideBuf, ~ride.bufnum);\r\n~hatz.set(\\rimBuf, ~rim.bufnum);\r\n~hatz.set(\\chhBuf, ~chh.bufnum);\r\n~hatz.set(\\ohhBuf, ~ohh2.bufnum);\r\n)\r\n\r\n(\r\n~hatz.set(\\clockIn, 0);\r\n~hatz.set(\\div, 2);\r\n~hatz.set(\\maxSteps, 31);\r\n~hatz.set(\\watk, 0.001);\r\n~hatz.set(\\wVol, 0.7);\r\n~hatz.set(\\wrel, 0.35);\r\n~hatz.set(\\wFreq, 3500);\r\n~hatz.set(\\ohhRate, 2);\r\n~hatz.set(\\chhRate, 2);\r\n~hatz.set(\\startFreq, 290);\r\n~hatz.set(\\trigDur, 0.001);\r\n~hatz.set(\\snareToneFreq, 185);\r\n~hatz.set(\\sFreq, 350);\r\n~hatz.set(\\tone, 0.3);\r\n~hatz.set(\\bw, 2);\r\n~hatz.set(\\clapRate, 2);\r\n~hatz.set(\\crashRate, 2);\r\n~hatz.set(\\s1Dec, 0.15);\r\n~hatz.set(\\s2Dec, 0.1);\r\n~hatz.set(\\prel, 0.003);\r\n~hatz.set(\\krel, 0.56);\r\n~hatz.set(\\kwAmp, 0.15);\r\n)\r\n\r\n(\r\n~hatz.set(\\ohhz,  [0,1,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,1,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n~hatz.set(\\chhz,  [0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1, 0,1,0,1]);\r\n~hatz.set(\\kickz, [0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0]);\r\n~hatz.set(\\snarez,[0,0,0,1, 0,1,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,1, 0,0,0,0]);\r\n~hatz.set(\\crashz,[0,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,1,0, 0,0,0,0, 0,0,1,0, 1,0,0,0]);\r\n~hatz.set(\\clapz, [0,1,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0, 0,0,0,0, 0,0,0,1]);\r\n~hatz.set(\\rimz,  [0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n~hatz.set(\\ridez, [0,1,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1, 0,1,0,1, 0,0,0,1, 0,0,0,1, 0,0,0,1]);\r\n)\r\n\r\n(\r\n~hatz.set(\\ohhVol, 0.15);\r\n~hatz.set(\\chhVol, 0.1);\r\n~hatz.set(\\snareVol, 0.15);\r\n~hatz.set(\\kickVol, 1);\r\n~hatz.set(\\clapVol, 0.2);\r\n~hatz.set(\\crashVol, 0);\r\n~hatz.set(\\rideVol, 0.0);\r\n~hatz.set(\\rimVol, 0.15);\r\n)\r\n(\r\n~hatz.free;\r\n)\r\n\r\n// Use the same sample pack as i did, if you want.\r\n// https://audiorealism.se/downloads/TR-909-96kHz-24bit.zip",
   "labels" : [
      "techno",
      "sequencer",
      "gabber",
      "drum machine",
      "tr909"
   ]
}
