-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