// "additive synth kick" SynthDef(\addbd, { arg out=0, freq=77, amp=0.1; var osc, clip, env, penv, nenv; penv = EnvGen.ar( Env(levels: [1, 1, 0.5 ], times:[ 0.01, 0.3 ], curve:[0,0]) ); osc = FSinOsc.ar([freq,freq*1.01] * penv); nenv = EnvGen.ar(Env(levels:[1,1,0], times:[0.001,0.008], curve:0)); osc = osc + (BPF.ar(WhiteNoise.ar(0.05), freq * 100,0.1) * nenv); osc = osc + (BPF.ar(WhiteNoise.ar(0.05), freq * 70,0.1) * nenv); osc = osc + (BPF.ar(WhiteNoise.ar(0.1), freq * 33,0.1) * nenv); osc = osc + (BPF.ar(WhiteNoise.ar(0.1), freq * 19, 0.3) * EnvGen.ar(Env(levels: [1,1,0], times: [0.1,1], curve:-9)) * 0.1 ); env = EnvGen.ar(Env.perc(0, 0.55), doneAction: 2); osc = osc * env; osc = osc.softclip; Out.ar(out, Pan2.ar(osc[0]+osc[1] * amp, 0)); }).add; ( // "LFTri bass drum kick" - by luka@lukaprincic.si SynthDef(\tribd, { arg out=0, gate=1, freq=77, amp=0.1; var snd, aenv, fenv, senv; fenv = Env(levels:[2, 1.2, 0], times: [0.1, 0.4]).kr; freq = [freq,freq*2] * fenv; freq = freq.max(10); snd = LFTri.ar(freq) + SinOsc.ar(freq) * [1,0.3]; snd = snd.sum * 0.9; snd = LPF.ar(snd, freq * 4); snd = snd + RLPF.ar( BrownNoise.ar(1), Env(levels:[2000,500,90], times:[0.01,0.05]).kr, 0.3 ); snd = snd + ( BPF.ar(WhiteNoise.ar(0.9), 3000) * Env([1,1,0], [0.004,0.005]).kr ); snd = snd + ( BPF.ar(WhiteNoise.ar(2), 9000) * Env([1,1,0], [0.013,0.001]).kr ); aenv = Env([1,1,0], [0.2,2], curve: -9).kr; snd = snd * aenv; snd = Limiter.ar(snd, 8); senv = Linen.kr(releaseTime: 0.1, gate: gate, doneAction: Done.freeSelf); snd = LeakDC.ar(snd); snd = snd * amp * senv; snd = Pan2.ar(snd, pos:0); snd = snd.clip2; Out.ar(out, snd); }).add; ); ///////////////////////////////////////////////////////////////// // SC-808 drum kit // SC808 drum snare SynthDef.new(\sc808sn, { arg amp=2, tone=340, tone2=189, snappy=0.7, gate=1, amp2=1, out=0; var noiseEnv, atkEnv, sig, noise, osc1, osc2, sum; noiseEnv = EnvGen.kr(Env.perc(0.001, 4.2, 1, -115), doneAction:0); atkEnv = EnvGen.kr(Env.perc(0.001, 0.8,curve:-95), doneAction:2); noise = WhiteNoise.ar; noise = HPF.ar(noise, 1800); noise = LPF.ar(noise, 8850); noise = noise * noiseEnv * snappy; osc1 = SinOsc.ar(tone2, pi/2) * 0.6; osc2 = SinOsc.ar(tone, pi/2) * 0.7; sum = (osc1+osc2) * atkEnv * amp2; sig = Pan2.ar(((noise*1) + sum) * amp * 2.5, 0); sig = HPF.ar(sig, 340); Out.ar(out, sig); }).add; SynthDef.new(\sc808clap, { arg amp=1, gate=0, out=0; var atkenv, atk, decay, sum, denv; atkenv = EnvGen.kr(Env.new([0.5,1,0],[0, 0.3], -160), doneAction:2); denv = EnvGen.kr(Env.dadsr(0.026, 0, 6, 0, 1, 1, curve:-157), doneAction:0); atk = WhiteNoise.ar * atkenv * 1.4; decay = WhiteNoise.ar * denv; sum = atk + decay * amp; sum = HPF.ar(sum, 500); sum = BPF.ar(sum, 1062, 0.5); Out.ar(out, Pan2.ar(sum * 1.5, 0)); }).add; SynthDef.new(\sc808rimshot, { arg amp=1, out=0; var fenv, env, sig, punch, tri1, tri2; env = EnvGen.kr(Env.new([1, 1, 0], [0.00272, 0.07], -42), doneAction:2); tri1 = LFTri.ar(1667 * 1.1, 1) * env; tri2 = LFPulse.ar(455 * 1.1, width:0.8) * env; punch = WhiteNoise.ar * env * 0.46; sig = tri1 + tri2 + punch; sig = BPeakEQ.ar(sig, 464, 0.44, 8); sig = HPF.ar(sig, 315); sig = LPF.ar(sig, 7300); sig = Pan2.ar(sig * amp, 0); Out.ar(out, sig); }).add; SynthDef.new(\sc808claves, { arg amp=1, out=0; var env, sig; env = EnvGen.kr(Env.new([1, 1, 0], [0, 0.1], -20), doneAction:2); sig = SinOsc.ar(2500, pi/2) * env * amp; sig = Pan2.ar(sig, 0); Out.ar(out, sig); }).add; SynthDef.new(\sc808cow, { arg amp=1, out=0; var sig, pul1, pul2, env, atk, atkenv, datk; atkenv = EnvGen.kr(Env.perc(0, 1, 1, -215),doneAction:0); env = EnvGen.kr(Env.perc(0.01, 9.5, 1, -90),doneAction:2); pul1 = LFPulse.ar(811.16); pul2 = LFPulse.ar(538.75); atk = (pul1 + pul2) * atkenv * 6; datk = (pul1 + pul2) * env; sig = (atk + datk) * amp; sig = HPF.ar(sig, 250); sig = LPF.ar(sig, 4500); sig = Pan2.ar(sig, 0); Out.ar(out, sig); }).add; SynthDef.new(\sc808hh, { arg decay=0.42, amp=1, pan=0, out=0; var sig, sighi,siglow, sum, env, osc1, osc2, osc3, osc4, osc5, osc6; env = EnvGen.kr(Env.perc(0.005, decay, 1, -30),doneAction:2); osc1 = LFPulse.ar(203.52); osc2 = LFPulse.ar(366.31); osc3 = LFPulse.ar(301.77); osc4 = LFPulse.ar(518.19); osc5 = LFPulse.ar(811.16); osc6 = LFPulse.ar(538.75); sighi = (osc1 + osc2 + osc3 + osc4 + osc5 + osc6); siglow = (osc1 + osc2 + osc3 + osc4 + osc5 + osc6); sighi = BPF.ar(sighi, 8900, 1); sighi = HPF.ar(sighi, 9000); siglow = BBandPass.ar(siglow, 8900, 0.8); siglow = BHiPass.ar(siglow, 9000, 0.3); sig = BPeakEQ.ar((siglow+sighi), 9700, 0.8, 0.7); sig = sig * env * amp; sig = Pan2.ar(sig, pan); Out.ar(out, sig); }).add; SynthDef.new(\sc808oh, { arg decay=0.5, amp=4, pan=0, out=0; var sig, siga, sigb, env1, env2, osc1, osc2, osc3, osc4, osc5, osc6, sum; env1 = EnvGen.kr(Env.perc(0.1, decay, curve:-3), doneAction:2); env2 = EnvGen.kr(Env.new([0, 1, 0], [0, decay*5], curve:-150), doneAction:0); osc1 = LFPulse.ar(203.52) * 0.6; osc2 = LFPulse.ar(366.31) * 0.6; osc3 = LFPulse.ar(301.77) * 0.6; osc4 = LFPulse.ar(518.19) * 0.6; osc5 = LFPulse.ar(811.16) * 0.6; osc6 = LFPulse.ar(538.75) * 0.6; sig = osc1 + osc2 + osc3 + osc4 + osc5 +osc6; sig = BLowShelf.ar(sig, 990, 2, -3); sig = BPF.ar(sig, 7700); sig = BPeakEQ.ar(sig, 7200, 0.5, 5); sig = BHiPass4.ar(sig, 8100, 0.7); sig = BHiShelf.ar(sig, 9400, 1, 5); siga = sig * env1 * 0.6; sigb = sig * env2; sum = siga + sigb; sum = LPF.ar(sum, 4000); sum = Pan2.ar(sum, 0); sum = sum * amp * 2; Out.ar(out, sum); }).add; SynthDef.new(\sc808cymb, { arg decay=2, amp=20, pan=0, gate=0, tone=0.002, out=0; var sig, sig1,sig2, sig2a, sig2b, sig3, env1, env2, env2b, env3, osc1, osc2, osc3, osc4, osc5, osc6, sum; env1 = EnvGen.kr(Env.perc(0.3, decay, curve:-3), doneAction:2); env2 = EnvGen.kr(Env.new([0, 0.6, 0], [0.1, decay*0.7], -5), doneAction:0); env2b = EnvGen.kr(Env.new([0, 0.3, 0], [0.1, decay*20], -120), doneAction:0); env3 = EnvGen.kr(Env.new([0, 1, 0], [0, decay*5], curve:-150), doneAction:0); osc1 = LFPulse.ar(203.52) * 0.6; osc2 = LFPulse.ar(366.31) * 0.6; osc3 = LFPulse.ar(301.77) * 0.6; osc4 = LFPulse.ar(518.19) * 0.6; osc5 = LFPulse.ar(811.16) * 0.6; osc6 = LFPulse.ar(538.75) * 0.6; sig = osc1 + osc2 + osc3 + osc4 + osc5 +osc6; sig1 = BLowShelf.ar(sig, 2000, 1, 5); sig1 = BPF.ar(sig1, 3000); sig1 = BPeakEQ.ar(sig1, 2400, 0.5, 5); sig1 = BHiPass.ar(sig1, 1550, 0.7); sig1 = LPF.ar(sig1, 3000); sig1 = BLowShelf.ar(sig1, 1000, 1, 0); sig1 = sig1 * env1 * tone; sig2 = BLowShelf.ar(sig, 990, 2, -5); sig2 = BPF.ar(sig2, 7400); sig2 = BPeakEQ.ar(sig2, 7200, 0.5, 5); sig2 = BHiPass4.ar(sig2, 6800, 0.7); sig2 = BHiShelf.ar(sig2, 10000, 1, -4); sig2a = sig2 * env2 * 0.3; sig2b = sig2 * env2b * 0.6; sig3 = BLowShelf.ar(sig, 990, 2, -15); sig3 = BPF.ar(sig3, 6500); sig3 = BPeakEQ.ar(sig3, 7400, 0.35, 10); sig3 = BHiPass4.ar(sig3, 10500, 0.8, 2); sig3 = sig3 * env3; sum = sig1 + sig2a + sig2b + sig3; sum = LPF.ar(sum, 4000); sum = Pan2.ar(sum, 0); sum = sum * amp; Out.ar(out, sum); }).add;