slider1:0.5<0,1,0.01>attack
slider2:0.5<0,1,0.01>release
slider3:0.5<0,1,0.01>output
slider4:0.5<0,1,0.01>filter
slider5:0.5<0,1,0.01>attack hold
slider6:0.5<0,1,0.01>release hold

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

@slider
fParam1 = slider1; //attack
fParam2 = slider2; //release
fParam3 = slider3; //output
fParam4 = slider4; //filter
fParam5 = slider5; //att-rel
fParam6 = slider6; //rel-att

dry = pow(10, (2 * fParam3) - 1);

(fParam4>0.5) ? (
fili = 0.8 - 1.6*fParam4;
filo = 1 + fili;
filx = 1;
):(
fili = 0.1 + 1.8*fParam4;
filo = 1 - fili;
filx = 0;
);

(fParam1>0.5) ? (
att1 = pow(10, -1.5);
att2 = pow(10, 1 - 5 * fParam1);
):(
att1 = pow(10, -4 + 5 * fParam1);
att2 = pow(10, -1.5);
);
rel12 = 1 - pow(10, -2 - 4 * fParam5);

(fParam2>0.5) ? (
rel3 = 1 - pow(10, -4.5);
rel4 = 1 - pow(10, -5.85 + 2.7 * fParam2);
):(
rel3 = 1 - pow(10, -3.15 - 2.7 * fParam2);
rel4 = 1 - pow(10, -4.5);
);
att34 = pow(10, - 4 * fParam6);

@sample
e1=env1;
e2=env2;
e3=env3;
e4=env4;

fb1=fbuf1;
fb2=fbuf2;

a = spl0;
b = spl1;

fb1 = filo*fb1 + fili*a;
fb2 = filo*fb2 + fili*b;
e = fb1 + filx*a;
f = fb2 + filx*b;

i = a + b;
i = (i>0) ? i : -i;

e1 = (i>e1) ? e1 + att1 * (i-e1) : e1 * rel12;
e2 = (i>e2) ? e2 + att2 * (i-e2) : e2 * rel12;
e3 = (i>e3) ? e3 + att34 * (i-e3) : e3 * rel3;
e4 = (i>e4) ? e4 + att34 * (i-e4) : e4 * rel4;
g = (e1 - e2 + e3 - e4);

spl0 = dry * (a + e * g);
spl1 = dry * (b + f * g);

(e1<0.0000000001) ? ( env1=0; env2=0; env3=0; env4=0; fbuf1=0; fbuf2=0; ):( env1=e1; env2=e2; env3=e3; env4=e4; fbuf1=fb1; fbuf2=fb2; );

@gfx 0 140
gfx_r=0; gfx_g=0.9; gfx_b=0; gfx_a=1;
gfx_setfont(1,"Arial", 16);

gfx_x =20; gfx_y =10;  gfx_printf("%.0f",(200 * fParam1 - 100) );
gfx_x =70; gfx_y =10;  gfx_drawchar($'%');
gfx_x =140; gfx_y =10;  gfx_printf("Attack");

gfx_x =20; gfx_y =30;  gfx_printf("%.0f",(200 * fParam2 - 100) );
gfx_x =70; gfx_y =30;  gfx_drawchar($'%');
gfx_x =140; gfx_y =30;  gfx_printf("Release");

gfx_x =20; gfx_y =50;  gfx_printf("%.1f",(40 * fParam3 - 20) );
gfx_x =70; gfx_y =50;  gfx_printf("dB");
gfx_x =140; gfx_y =50;  gfx_printf("Output");

gfx_x =20; gfx_y =70;  gfx_printf("%.1f",(20 * fParam4 - 10) );
gfx_x =70; gfx_y =70;  gfx_printf("Lo <> Hi");
gfx_x =140; gfx_y =70;  gfx_printf("Filter");

gfx_x =20; gfx_y =90;  gfx_printf("%.0f",(100 * fParam5) );
gfx_x =70; gfx_y =90;  gfx_drawchar($'%');
gfx_x =140; gfx_y =90;  gfx_printf("Attack Hold");

gfx_x =20; gfx_y =110;  gfx_printf("%.0f",(100 * fParam6) );
gfx_x =70; gfx_y =110;  gfx_drawchar($'%');
gfx_x =140; gfx_y =110;  gfx_printf("Release Hold");
