bounds(1, 0, 0, 0)
form caption("Supersaw") size(300, 200), pluginid("spsw")
rslider bounds(60, 15, 60, 60) range(1, 1.03, 1, 1, 0.001) channel("detune") text("detune") valuetextbox(1) textbox(1)
rslider bounds(120, 15, 60, 60) range(0, 1, 0, 1, 0.001) channel("phase") text("phase") valuetextbox(1) textbox(1)
rslider bounds(180, 15, 60, 60) range(0, 1, 0, 1, 0.001) channel("spread") text("spread") valuetextbox(1) textbox(1)
keyboard bounds(0, 100, 300, 100) middlec(4) keywidth(10)
-n -+rtmidi=NULL -M0 --midi-key-cps=4 --midi-velocity-amp=5
; ==============================================
sr = 41000
ksmps = 32
nchnls = 2
0dbfs = 1
opcode Spread, k, ki
kspread, idest xin
kpan = (kspread * (idest - 0.5)) + 0.5
xout kpan
endop
instr 1
ifrq = p4
iamp = p5/32
kphase chnget "phase"
kspread chnget "spread"
kdetune chnget "detune"
khalfdetune = (((kdetune - 1) * 0.015) / 0.03) + 1
kquarterdetune = (((kdetune - 1) * 0.0075) / 0.03) + 1
kphase1 = kphase * 0.1729
aosc1 vco2 iamp, ifrq, 4, 0.05, kphase1
aosc1l, aosc1r pan2 aosc1, Spread:k(kspread, 0.1729)
kphase2 = kphase * 0.7841
aosc2 vco2 iamp, ifrq, 4, 0.05, kphase2
aosc2l, aosc2r pan2 aosc2, Spread:k(kspread, 0.7841)
kphase3 = kphase * 0.7220
aosc3 vco2 iamp, ifrq*kquarterdetune, 4, 0.05, kphase3
aosc3l, aosc3r pan2 aosc3, Spread:k(kspread, 0.7220)
kphase4 = kphase * 0.3084
aosc4 vco2 iamp, ifrq/kquarterdetune, 4, 0.05, kphase4
aosc4l, aosc4r pan2 aosc4, Spread:k(kspread, 0.3084)
kphase5 = kphase * 0.7978
aosc5 vco2 iamp, ifrq*khalfdetune, 4, 0.05, kphase5
aosc5l, aosc5r pan2 aosc5, Spread:k(kspread, 0.7978)
kphase6 = kphase * 0.3764
aosc6 vco2 iamp, ifrq/khalfdetune, 4, 0.05, kphase6
aosc6l, aosc6r pan2 aosc6, Spread:k(kspread, 0.3764)
kphase7 = kphase * 0.7006
aosc7 vco2 iamp, ifrq*kdetune, 4, 0.05, kphase7
aosc7l, aosc7r pan2 aosc7, Spread:k(kspread, 0.7006)
kphase8 = kphase * 0.4512
aosc8 vco2 iamp, ifrq/kdetune, 4, 0.05, kphase8
aosc8l, aosc8r pan2 aosc8, Spread:k(kspread, 0.4512)
asigl = aosc1l + aosc2l + aosc3l + aosc4l + aosc5l + aosc6l + aosc7l + aosc8l
asigr = aosc1r + aosc2r + aosc3r + aosc4r + aosc5r + aosc6r + aosc7r + aosc8r
out asigl, asigr
endin
==============================================
f 0 z