aboutsummaryrefslogtreecommitdiff
path: root/site/udo/synth_drums.udo
diff options
context:
space:
mode:
authorRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
committerRichard <q@1bpm.net>2025-04-13 18:48:02 +0100
commit9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22 (patch)
tree291bd79ce340e67affa755a8a6b4f6a83cce93ea /site/udo/synth_drums.udo
downloadapps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.gz
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.tar.bz2
apps.csound.1bpm.net-9fbf91db06a6d4f4b5cd8bb45389a731bb86bf22.zip
initial
Diffstat (limited to 'site/udo/synth_drums.udo')
-rwxr-xr-xsite/udo/synth_drums.udo229
1 files changed, 229 insertions, 0 deletions
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
+