From 9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 Mon Sep 17 00:00:00 2001 From: Richard Date: Sun, 13 Apr 2025 18:48:02 +0100 Subject: initial --- site/udo/synth_drums.udo | 229 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100755 site/udo/synth_drums.udo (limited to 'site/udo/synth_drums.udo') diff --git a/site/udo/synth_drums.udo b/site/udo/synth_drums.udo new file mode 100755 index 0000000..3d2ea10 --- /dev/null +++ b/site/udo/synth_drums.udo @@ -0,0 +1,229 @@ +#ifndef UDO_SYNTHDRUMS +#define UDO_SYNTHDRUMS ## +/* + Synth drum generators + + This file is part of the SONICS UDO collection by Richard Knight 2021 + License: GPL-2.0-or-later + http://1bpm.net +*/ + +#include "wavetables.udo" + +opcode kick909, a, 0 + idur = p3 + ifreq = 200 + idct = .0001 + aampenv expseg 1, .08, .3, .4, .001 + adclick expseg .001, idct, 1, idur-(idct*2), 1, idct, .001 + aosc1 oscil 1, ifreq*aampenv + xout aosc1*aampenv*adclick +endop + + +/* + Clap derived from an instrument by Istvan Varga (2002) +*/ +opcode clap1, a, jj + idec, ifreq xin + ibpfrq = (ifreq == -1) ? 1046.5 : ifreq + kbpbwd port ibpfrq*0.25, 0.03, ibpfrq*4.0 ;bandpass filter bandwidth + idec = (idec == -1) ? 0.5 : idec ;decay time + + a1 = 1.0 + a1x delay1 a1 + a1 = a1 - a1x + a2 delay a1, 0.011 + a3 delay a1, 0.023 + a4 delay a1, 0.031 + + a1 tone a1, 60.0 + a2 tone a2, 60.0 + a3 tone a3, 60.0 + a4 tone a4, 1.0 / idec + + aenv1 = a1 + a2 + a3 + a4*60.0*idec + aout unirand 2.0 + aout = aenv1 * (aout - 1.0) + aout butterbp aout, ibpfrq, kbpbwd + xout aout * 120 +endop + + +/* + Rim shot derived from an instrument by Istvan Varga (2002) +*/ +opcode rim1, a, 0 + icps = 440.0*exp(log(2.0)*(57.0-69.0)/12.0) + acps expon icps, 0.0025, icps * 0.5 + acps = acps + icps + iamp = 1 + a1a phasor acps, 0.0 + a1b phasor acps, 0.5 + afmenv expon 1.0, 0.02, 0.5 + a1 = (a1a-a1b)*6.0*afmenv + acps = acps*(1.0+a1) + a0 oscil3 1.0, acps + a1 unirand 2.0 + a1 tone a1-1.0, 2000 + a0 = a0 + a1*0.1 + aenv expon 1.0, 0.005, 0.5 + + a0 limit 4.0*iamp*a0*aenv, -1.0, 1.0 + a0 table3 a0*4096.0, gifnSine, 0, 0, 1 + + kffrq expseg 20000, 0.07, 100, 1, 100 + + a0x tone a0, 4000 + a0y = a0 - a0x + a0x delay a0y, 0.0002 + a0 = a0 - a0x*4.0 + a0 pareq a0, kffrq, 0, 0.7071, 2 + + a_ linseg 1, p3-0.1, 1, 0.025, 0, 1, 0 + a0 = a0*a_ + + xout a0 +endop + + +/* + Snare derived from an instrument by Istvan Varga (2002) +*/ +opcode snare1, a, 0 + icps0 = 150 + icps1 = 2.0 * icps0 + kcps port icps0, 0.007, icps1 + kcpsx = kcps * 1 + kfmd port 0.0, 0.01, 0.7 + aenv1 expon 1.0, 0.03, 0.5 + kenv2 port 1.0, 0.008, 0.0 + aenv2 interp kenv2 + aenv3 expon 1.0, 0.025, 0.5 + + a_ oscili 1.0, kcps, gifnSine + a1 oscili 1.0, kcps * (1.0 + a_*kfmd), gifnSine + a_ oscili 1.0, kcpsx, gifnSine + a2 oscili 1.0, kcpsx * (1.0 + a_*kfmd), gifnSine + + a3 unirand 2.0 + a3 = a3 - 1.0 + a3 butterbp a3, 5000, 7500 + a3 = a3 * aenv2 + + a0 = a1 + a2*aenv3 + a3*1.0 + a0 = a0 * aenv1 + xout a0 +endop + + +/* + RK kick1 +*/ +opcode kick1, a, 0 + /* p3 should be between 0.1 and 0.3 really */ + kax linseg 500, p3*0.05, 200, p3*0.1, 40, p3*0.8, 20 + kenv linseg 1,p3*0.2,0.6,p3*0.2,0.4,p3*0.2,0.1,p3*0.2,0 + kpit linseg 300, p3*0.2, 200, p3*0.4, 80, p3*0.2, 50, p3*0.2, 30 + a1 oscil 0.6, kax*1 + a2 oscil 0.85,kpit*0.4 + a3 oscil 0.95,kpit*0.2 + an noise 0.3,-0.1 + ax1 oscil 0.05, 200 + ax2 oscil 0.02, 900 + kaxenv linseg 0.2, p3*0.02, 0 + akx = (ax1*ax2)*kaxenv + aout = (a1+a2+a3)*0.25 + amix = ((aout*kenv)+akx) + adist distort amix, 0.3, gifnSine + aeq1 pareq adist, 90, 0, 1.4 + aeq2 pareq aeq1, 60, 1.8, 0.9 + aout pareq aeq2, 9000, 2.8, 0.5 + xout aout +endop + + +/* + RK kick2, a bit 808 ish unless harsh mode is on +*/ +opcode kick2, a, oo + iharsh, itune xin + if (iharsh == 1) then + idist = 0.5 + idistwave = gifnSquare + else + idist = 0.1 + idistwave = gifnSine + endif + xtratim 0.1 + krelease release + ktune init itune + kmul transeg 0.2, p3*0.5, -15, 0.01, p3*0.5, 0, 0 + kbend transeg 0.5, 1.2, -4, 0, 1, 0, 0 + asig gbuzz 0.5, 50*octave(ktune)*semitone(kbend), 20, 1, kmul, gifnCosine + aenv transeg 1, p3-0.004, -6, 0 + gkpump = k(aenv) + aatt linseg 0, 0.004, 1 + asig = asig*aenv*aatt + aenv linseg 1, 0.07, 0 + acps expsega 400, 0.07, 0.001, 1, 0.001 + aimp oscili aenv, acps*octave(ktune*0.25) + amix = ((asig*0.7)+(aimp*0.35)) + gkpump = min(rms(amix) * 7, 1) + aout1 pareq amix, 100, 0.01, 0.7 + aout1 distort aout1, idist, idistwave + aout1 pareq aout1, 50, 2, 0.4 + aout1 pareq aout1, 190, 0.7, 0.6 + aout1 pareq aout1, 4900, 2, 0.7 + aout1 pareq aout1, 8900, 2, 0.7 + xout aout1 +endop + + + +opcode hihat1, a, 0 + idel = random(0.001, 0.02) + xtratim idel + kfreq line 300, p3, 100 + aenv expsega .1, .0005, 1, p3 - .0005, .01 + asqr1 oscil 1, kfreq, gifnSquare, -1 + asqr2 oscil 1, kfreq*1.4471, gifnSaw, -1 + asqr3 oscil 1, kfreq*1.6170, gifnSaw, -1 + asqr4 oscil 1, kfreq*1.9265, gifnSaw, -1 + asqr5 oscil 1, kfreq*2.5028, gifnSaw, -1 + asqr6 oscil 1, kfreq*2.6637, gifnSaw, -1 + a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 + a808 butterhp a808, 4270 + a808 butterhp a808, 4270 + aout = a808 * aenv * 0.5 + aout delay aout, idel + xout aout +endop + + + +opcode hihat2, aa, 0 + idel1 = random(0.005, 0.02) + idel2 = random(0.005, 0.02) + xtratim(max(idel1, idel2)) + + kfreq line 800, p3, 300 + aenv expsega .1, .0005, 1, p3 - .0005, .01 + asqr1 oscil 1, kfreq, gifnSquare, -1 + asqr2 oscil 1, kfreq*1.4471, gifnSquare, -1 + asqr3 oscil 1, kfreq*1.6170, gifnSquare, -1 + asqr4 oscil 1, kfreq*1.9265, gifnSquare, -1 + asqr5 oscil 1, kfreq*2.5028, gifnSaw, -1 + asqr6 oscil 1, kfreq*2.6637, gifnSaw, -1 + a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 + a808 butterhp a808, 3270 + a808 butterhp a808, 3270 + aout = a808 * aenv * 0.5 + aL delay aout, idel1 + aR delay aout, idel2 + xout aL, aR +endop + + +#end + -- cgit v1.2.3