#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