1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
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
|