-odac
ksmps = 64
nchnls = 2
0dbfs = 1
seed 0
#include "wavetables.udo"
opcode oscbank, a, kkkkiiiiio
kfreq, kamp, kfreqstepmult, kampstepmult, ibands, iwidthamp, icentreamp, ihalfing, imaxrandrate, iband xin
aosc oscil kamp, min:k(kfreq, sr / 2)
aosc pdhalfy aosc, ihalfing
kwidth = abs:k(oscil:k(iwidthamp, random(0.1, imaxrandrate), gifnSine, random(0, 1)))
kcentre = abs:k(oscil:k(icentreamp, random(0.1, imaxrandrate), gifnSine, random(0, 1)))
aosc pdclip aosc, kwidth, kcentre
if (iband < ibands) then
arecurse oscbank kfreq * kfreqstepmult, kamp * kampstepmult, kfreqstepmult, kampstepmult, ibands, iwidthamp, icentreamp, ihalfing, imaxrandrate, iband + 1
aosc += arecurse
endif
xout aosc
endop
instr playback
ixstart = p4
iystart = p5
ixend = p6
iyend = p7
icolour = p8
ivariation = p9
iwidth = p10
iheight = p11
istartfreq = (ixstart * 100) + 20
iendfreq = (ixend * 100) + 20
kfreq linseg istartfreq, p3, iendfreq
istartfstep = iystart + 1.3
iendfstep = iyend + 1.3
kfreqstepmult linseg istartfstep, p3, iendfstep
aamp linseg 0, p3 * 0.05, 1, p3 * 0.9, 1, p3 * 0.05, 0
ioscillators = max(1, int(100 / active:i("playback")))
aout oscbank kfreq, 0.1, kfreqstepmult, random(0.9, 0.99), ioscillators, iwidth, iheight, icolour, ivariation * 2
aout *= aamp * 0.5
kpan linseg iystart, p3, iyend
aL, aR pan2 aout, kpan
outs aL, aR
endin
f0 36000