slider1:14<1,40,1>A ------------ Delay (primes)
slider2:0<-30,12,0.1>Mix in (dB)
slider3:800<30,8000,10>BP freq (Hz)
slider4:1<0,1,0.05>(narrow<>wide) BP Q
slider5:0<-100,100,1>Pan (%)
slider6:-6<-30,-0.5,0.1>Feedback (dB)

slider11:13<1,40,1>B ------------ Delay (primes)
slider12:0<-30,12,0.1>Mix in (dB)
slider13:800<30,8000,10>BP freq (Hz)
slider14:1<0,1,0.05>(narrow<>wide) BP Q
slider15:-100<-100,100,1>Pan (%)
slider16:-6<-30,-0.5,0.1>Feedback (dB)

slider21:15<1,40,1>C ----------- Delay (primes)
slider22:0<-30,12,0.1>Mix in (dB)
slider23:800<30,8000,10>BP freq (Hz)
slider24:1<0,1,0.05>(narrow<>wide) BP Q
slider25:100<-100,100,1>Pan (%)
slider26:-6<-30,-0.5,0.1>Feedback (dB)

slider31:0<-30,12,0.1>Output wet (dB)
slider32:0<-30,12,0.1>Output dry (dB)

in_pin:L in
in_pin:R in
out_pin:L out
out_pin:R out

@init
delayposa = 0;
delayposb = 0;
delayposc = 0;

fda1_l=fda2_l=fda1_r=fda2_r=0;
fdb1_l=fdb2_l=fdb1_r=fdb2_r=0;
fdc1_l=fdc2_l=fdc1_r=fdc2_r=0;

@slider
dryA = slider2 <= -30.0 ? 0.0 : 10^(slider2/20);
dryB = slider12 <= -30.0 ? 0.0 : 10^(slider12/20);
dryC = slider22 <= -30.0 ? 0.0 : 10^(slider22/20);
wet0 = slider6 <= -30.0 ? 0.0 : 10^(slider6/20);
wet1 = slider16 <= -30.0 ? 0.0 : 10^(slider16/20);
wet2 = slider26 <= -30.0 ? 0.0 : 10^(slider26/20);
wetmix = slider31 <= -30.0 ? 0.0 : 10^(slider31/20);
drymix = slider32 <= -30.0 ? 0.0 : 10^(slider32/20);

dampeninga = slider4*0.999+0.001;
ca = (1/ tan( $pi*slider3/srate));
aa2 = 1+ca*(ca+dampeninga);
faa1 = 2*(1-ca*ca)/aa2;
faa0 = (1+ca*(ca-dampeninga))/aa2;
fka = ca*dampeninga/aa2;

dampeningb = slider14*0.999+0.001;
cb = (1/tan($pi*slider13/srate));
ab2 = 1+cb*(cb+dampeningb);
fab1 = 2*(1-cb*cb)/ab2;
fab0 = (1+cb*(cb-dampeningb))/ab2;
fkb = cb*dampeningb/ab2;

dampeningc = slider24*0.999+0.001;
cc = (1/tan( $pi*slider23/srate));
ac2 = 1+cc*(cc+dampeningc);
fac1 = 2*(1-cc*cc)/ac2;
fac0 = (1+cc*(cc-dampeningc))/ac2;
fkc = cc*dampeningc/ac2;

panA = slider5*0.01;
lA = panA > 0 ? 1-panA:1;
rA = panA < 0 ? 1+panA:1;

panB = slider15*0.01;
lB = panB > 0 ? 1-panB:1;
rB = panB < 0 ? 1+panB:1;

panC = slider25*0.01;
lC = panC > 0 ? 1-panC:1;
rC = panC < 0 ? 1+panC:1;

//@block
//odelaya = delaylena;
za = (slider1-1)^2+slider1+40;
delaylena = min(za*srate/1000,500000)|0;
//odelaya != delaylena ? freembuf(delaylena*2);

//odelayb = delaylenb;
zb = (slider11-1)^2+slider11+40;
delaylenb = min(zb*srate/1000,500000)|0;
//odelayb != delaylenb ? freembuf(delaylenb*2);

//odelayc = delaylenc;
zc = (slider21-1)^2+slider21+40;
delaylenc = min(zc*srate/1000,500000)|0;
//odelayc != delaylenc ? freembuf(delaylenc*2);

@sample
dpinta = delayposa;
dpintb = delayposb+4*srate;
dpintc = delayposc+8*srate;

osa1 = dpinta[0];
osa2 = dpinta[0];
osb1 = dpintb[1];
osb2 = dpintb[1];
osc1 = dpintc[2];
osc2 = dpintc[2];

in1 = spl0;
in2 = spl1;
in3 = spl0;
in4 = spl1;
in5 = spl0;
in6 = spl1;

dpinta[0] = min(max(in1*dryA + osa1*wet0,-4),4);
dpinta[0] = min(max(in2*dryA + osa2*wet0,-4),4);
dpintb[1] = min(max(in3*dryB + osb1*wet1,-4),4);
dpintb[1] = min(max(in4*dryB + osb2*wet1,-4),4);
dpintc[2] = min(max(in5*dryC + osc1*wet2,-4),4);
dpintc[2] = min(max(in6*dryC + osc2*wet2,-4),4);

(delayposa+=1) >= delaylena ? delayposa=0;
(delayposb+=1) >= delaylenb ? delayposb=0;
(delayposc+=1) >= delaylenc ? delayposc=0;

da0_l = fka*osa1 - (faa1*fda1_l + faa0*fda2_l);
da0_r = fka*osa2 - (faa1*fda1_r + faa0*fda2_r);
db0_l = fkb*osb1 - (fab1*fdb1_l + fab0*fdb2_l);
db0_r = fkb*osb2 - (fab1*fdb1_r + fab0*fdb2_r);
dc0_l = fkc*osc1 - (fac1*fdc1_l + fac0*fdc2_l);
dc0_r = fkc*osc2 - (fac1*fdc1_r + fac0*fdc2_r);

osa1 = (da0_l - fda2_l);
osa2 = (da0_r - fda2_r);
osb1 = (db0_l - fdb2_l);
osb2 = (db0_r - fdb2_r);
osc1 = (dc0_l - fdc2_l);
osc2 = (dc0_r - fdc2_r);

fda2_l = fda1_l;
fda2_r = fda1_r;
fdb2_l = fdb1_l;
fdb2_r = fdb1_r;
fdc2_l = fdc1_l;
fdc2_r = fdc1_r;

fda1_l = da0_l;
fda1_r = da0_r;
fdb1_l = db0_l;
fdb1_r = db0_r;
fdc1_l = dc0_l;
fdc1_r = dc0_r;

spl0 = spl0*drymix + (osa1*lA + osb1*lB + osc1*lC)*wetmix;
spl1 = spl1*drymix + (osa2*rA + osb2*rB + osc2*rC)*wetmix;

@gfx 0 66
gfx_x=20;gfx_y=10;
gfx_r=gfx_b=0;
gfx_g=gfx_a=1;
gfx_drawchar($'A');
gfx_drawchar($' ');
gfx_drawchar($'=');
gfx_drawchar($' ');
gfx_drawnumber(za,0);
gfx_drawchar($' ');
gfx_drawchar($'m');
gfx_drawchar($'s');

gfx_x=20;gfx_y=30;
gfx_drawchar($'B');
gfx_drawchar($' ');
gfx_drawchar($'=');
gfx_drawchar($' ');
gfx_drawnumber(zb,0);
gfx_drawchar($' ');
gfx_drawchar($'m');
gfx_drawchar($'s');

gfx_x=20;gfx_y=50;
gfx_drawchar($'C');
gfx_drawchar($' ');
gfx_drawchar($'=');
gfx_drawchar($' ');
gfx_drawnumber(zc,0);
gfx_drawchar($' ');
gfx_drawchar($'m');
gfx_drawchar($'s');
