diff options
Diffstat (limited to 'site/udo/synth_instruments.udo')
-rwxr-xr-x | site/udo/synth_instruments.udo | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/site/udo/synth_instruments.udo b/site/udo/synth_instruments.udo new file mode 100755 index 0000000..a5ec34c --- /dev/null +++ b/site/udo/synth_instruments.udo @@ -0,0 +1,78 @@ +#ifndef UDO_SYNTHINSTRUMENTS
+#define UDO_SYNTHINSTRUMENTS ##
+/*
+ Standard regular wave function tables
+
+ This file is part of the SONICS UDO collection by Richard Knight 2023
+ License: GPL-2.0-or-later
+ http://1bpm.net
+*/
+
+#include "wavetables.udo"
+
+opcode synth_fmbass1, aa, k
+ kfreq xin
+ k1 linseg 2.1, p3*0.2, 2, p3*0.8, 2
+ k2 line 10, p3, 0
+ iamp random 500, 800
+ kamp linseg iamp*0.001, p3*0.1, 0.5, p3*0.9, 0
+ aL foscil 0.8, kfreq, 1, k1, k2, gifnSine
+ aR foscil 0.8, kfreq, 1.9, k1, k2, gifnSine
+ aL1 pareq aL, 440, 0.4, 0.7
+ aR1 pareq aR, 440, 0.4, 0.7
+ xout aL1, aR1
+endop
+
+
+opcode synth_303, a, kjJ
+ kfreq, ifilter, kdistortion xin
+ ifilter = (ifilter == -1) ? 90 : ifilter
+ kdistortion = (kdistortion == -1) ? 1 : kdistortion
+ ifrq1 = 440 * exp(log(2) * (ifilter - 69) / 12) ; filter start freq.
+ kffrq port 0, 60/150, ifrq1
+ a1 phasor kfreq
+ a1 = 1 - 2 * a1
+ a1x butterbp a1, kffrq, kfreq
+ a1x = a1x * (2 + kffrq / kfreq)
+ a1 = a1x + a1 * 0.25 ; 0.5
+ a1 butterlp a1, kffrq
+ a1 = taninv(a1 * kdistortion)
+ keqf limit kffrq * 4, 10, sr * 0.48 ; EQ frequency
+ a1 pareq a1 * 0.4, keqf, 4.0, 1.0, 2
+ xout a1
+endop
+
+opcode synth_strings1, a, kJJjj
+ kfreq, kvibwidth, kvibrate, inoisdur, ivibdel xin
+ kvibwidth = (kvibwidth == -1) ? 0.01 : kvibwidth
+ kvibrate = (kvibrate == -1) ? 5.5 : kvibrate
+ inoisdur = (inoisdur == -1) ? 0.1 : inoisdur
+ ivibdel = (ivibdel == -1) ? 0.25 : ivibdel
+
+ kfm2 = kfreq * 3
+ kfm3 = kfreq * 4
+ kindex1 = 7.5 / log:k(kfreq)
+ kindex2 = 15 / sqrt:k(kfreq)
+ kindex3 = 1.25 / sqrt:k(kfreq)
+
+ irise = 0.1
+ idec = 0.4
+
+ kvib init 0
+ kvbctl linen 1, 0.5, p3 - ivibdel, .1
+ krnd randi 0.0075, 2
+ kvib oscili kvbctl * kvibwidth + krnd, kvibrate * kvbctl
+
+ ktrans linseg 1, inoisdur, 0, 1, 0
+ anoise randi ktrans / 4, 0.2 * kfreq
+ attack oscili anoise, 2000
+
+ amod1 oscili kfreq * (kindex1 + ktrans), kfreq
+ amod2 oscili kfm2 * (kindex2 + ktrans), kfm2
+ amod3 oscili kfm3 * (kindex3 + ktrans), kfm3
+ asig oscili 1, (kfreq + amod1 + amod2 + amod3) * (1 + kvib)
+ asig linen (asig + attack), irise, p3, idec
+ xout asig
+endop
+
+#end
|