// title: Amasiko // author: qqqswitch // 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). // code: ~ohh = Buffer.read(~s1, '/samples/OpenHat/OpenHat-accent050-decay100.wav'); ~ohh2 = Buffer.read(~s1, '/samples/OpenHat/OpenHat-accent100-decay100.wav'); ~chh = Buffer.read(~s1, '/samples/ClosedHat/ClosedHat909-decay100.wav'); ~crash = Buffer.read(~s1, '/samples/Crash/Crash-accent090-tune050.wav'); ~clap = Buffer.read(~s1, '/samples/HandClap/HandClap909-accent100.wav'); ~rim = Buffer.read(~s1, '/samples/RimShot/RimShot909-accent100.wav'); ~ride = Buffer.read(~s1, '/samples/Ride/Ride909-accent050-tune050.wav'); ( SynthDef(\moap, { // 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 // hence why I used send(~s1) instead of add. This is sent to my percussion computer. arg ohhVol = 0, chhVol = 0, kickVol = 0, snareVol = 0, amp = 1, rimVol = 0, swingDur = 1, clockIn = 0, clkCut = 500, katk = 0, krel = 0.9, div = 1, watk = 0, rideBuf = 7, swingWidth = 0.1, wrel = 0.01, chhBuf = 0, maxSteps = 31, ohhBuf = 1, channels = 1, rideVol = 0, kwAmp = 0.015, ohhRate = 1, chhRate = 1, patk = 0, prel = 0.03, startFreq = 350, rideRate = 2, kwBW = 1, kFreq = 80, satk = 0, srel = 0.5, swingMax = 0.0, swingMin = 0, pitchRatio = 1.6, kwFreq = 4500, wVol = 0.15, wFreq = 5500, bw = 1, trigDur = 0.001, sFreq = 330, sStart = 350, rimBuf = 6, s2Dec = 0.07, crashVol = 0.0, crashBuf = 2, clapVol = 0.0, s1Dec = 0.12, rimRate = 2, thresh = 0.01, clapBuf = 6, crashRate = 2, clapRate = 2, snareToneFreq = 150, tone = 0.5, kwrel = 0.03; var clock, ohhArr, kickArr, snareArr, steppa, kswing, kpenv, spenv, clapArr, crashArr, ohh, chh, kick, snare, mix, kickEnv, penv, chhArr, sswing, wEnv, clap, crash, retrig, snareEnv, chhSelecta, ohhSelecta, kickSelecta, snareSelecta, crashSelecta, clapSelecta, snareTone1, snareTone2, rimArr, rideArr, rideSelecta, rimSelecta, rim, ride, kwn; clock = Trig1.ar(PulseDivider.ar(Trig.ar(HPF.ar(SoundIn.ar(clockIn), clkCut) > thresh, 0.001), div), trigDur); // ^ Change this to a simple Impulse.ar((bpm/60)*8); if you dont have hardware. chhArr = \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. ohhArr = \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]); kickArr = \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]); snareArr = \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]); crashArr = \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]); clapArr = \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]); rimArr = \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]); rideArr = \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]); steppa = Stepper.ar(clock, 0, 0, maxSteps); chhSelecta = Trig1.ar(Select.ar(steppa, chhArr) * clock, 0.001); ohhSelecta = Trig1.ar(Select.ar(steppa, ohhArr) * clock, 0.001); kickSelecta = Trig1.ar(Select.ar(steppa, kickArr) * clock, 0.001); snareSelecta = Trig1.ar(Select.ar(steppa, snareArr) * clock, 0.001); clapSelecta = Trig1.ar(Select.ar(steppa, clapArr) * clock, 0.001); crashSelecta = Trig1.ar(Select.ar(steppa, crashArr) * clock, 0.001); rimSelecta = Trig1.ar(Select.ar(steppa, rimArr) * clock, 0.001); rideSelecta = Trig1.ar(Select.ar(steppa, rideArr) * clock, 0.001); ohh = PlayBuf.ar(1, ohhBuf, ohhRate, ohhSelecta) * ohhVol; chh = PlayBuf.ar(1, chhBuf, chhRate, chhSelecta) * chhVol; clap = PlayBuf.ar(1, clapBuf, clapRate, clapSelecta) * clapVol; crash = PlayBuf.ar(1, crashBuf, crashRate, crashSelecta) * crashVol; rim = PlayBuf.ar(1, rimBuf, rimRate, rimSelecta) * rimVol; ride = PlayBuf.ar(1, rideBuf, rideRate, rideSelecta) * rideVol; kswing = katk + LFGauss.ar(swingDur, swingWidth).range(swingMin, swingMax); sswing = satk + LFGauss.ar(swingDur, swingWidth).range(swingMin, swingMax); kickEnv = EnvGen.ar(Env.perc(kswing, krel), kickSelecta) * kickVol; kwn = BBandPass.ar(WhiteNoise.ar()*EnvGen.ar(Env.perc(kswing,kwrel), kickSelecta)*kwAmp, kwFreq, kwBW); snareEnv = EnvGen.ar(Env.perc(sswing, srel), snareSelecta) * snareVol; kpenv = startFreq * EnvGen.ar(Env.perc(patk, prel), kickSelecta); spenv = EnvGen.ar(Env([pitchRatio, 1], [prel], \exponential), snareSelecta); wEnv = EnvGen.ar(Env.perc(watk, wrel), snareSelecta) * wVol; kick = ((kwn + SinOsc.ar(kpenv + kFreq)) * kickEnv).clip2; // GABBBAAAAAA snareTone1 = Ringz.ar(Trig.ar(snareSelecta, SampleDur.ir), snareToneFreq*spenv, s1Dec); snareTone2 = Ringz.ar(Trig.ar(snareSelecta, SampleDur.ir), sFreq*spenv, s2Dec); snare = ((snareTone1 + (snareTone2)*0.6).clip2(0.8) * tone + BBandPass.ar(WhiteNoise.ar()*wEnv, wFreq, bw)) * snareEnv; mix = (kick + snare + ohh + chh + clap + crash + rim + ride); // Mixed like this on purpose Out.ar(0, mix * amp); }).send(~s1); ) ( ~hatz = Synth(\moap, [\amp, 1], ~s1); ~hatz.set(\clapBuf, ~clap.bufnum); ~hatz.set(\crashBuf, ~crash.bufnum); ~hatz.set(\rideBuf, ~ride.bufnum); ~hatz.set(\rimBuf, ~rim.bufnum); ~hatz.set(\chhBuf, ~chh.bufnum); ~hatz.set(\ohhBuf, ~ohh2.bufnum); ) ( ~hatz.set(\clockIn, 0); ~hatz.set(\div, 2); ~hatz.set(\maxSteps, 31); ~hatz.set(\watk, 0.001); ~hatz.set(\wVol, 0.7); ~hatz.set(\wrel, 0.35); ~hatz.set(\wFreq, 3500); ~hatz.set(\ohhRate, 2); ~hatz.set(\chhRate, 2); ~hatz.set(\startFreq, 290); ~hatz.set(\trigDur, 0.001); ~hatz.set(\snareToneFreq, 185); ~hatz.set(\sFreq, 350); ~hatz.set(\tone, 0.3); ~hatz.set(\bw, 2); ~hatz.set(\clapRate, 2); ~hatz.set(\crashRate, 2); ~hatz.set(\s1Dec, 0.15); ~hatz.set(\s2Dec, 0.1); ~hatz.set(\prel, 0.003); ~hatz.set(\krel, 0.56); ~hatz.set(\kwAmp, 0.15); ) ( ~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]); ~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]); ~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]); ~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]); ~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]); ~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]); ~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]); ~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]); ) ( ~hatz.set(\ohhVol, 0.15); ~hatz.set(\chhVol, 0.1); ~hatz.set(\snareVol, 0.15); ~hatz.set(\kickVol, 1); ~hatz.set(\clapVol, 0.2); ~hatz.set(\crashVol, 0); ~hatz.set(\rideVol, 0.0); ~hatz.set(\rimVol, 0.15); ) ( ~hatz.free; ) // Use the same sample pack as i did, if you want. // https://audiorealism.se/downloads/TR-909-96kHz-24bit.zip