slider1:0.15<0,1,0.01>threshold
slider2:0.6<0,1,0.01>frequency
slider3:0.5<0,1,0.01>hsf drive
slider4:0.5<0,1,0.01>output

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

@init
//ext_noinit=1;

env=0;
g=1;
att=0.01;
rel=0.992;

@slider
fParam1 = slider1; //thresh
fParam2 = slider2; //freq
fParam3 = slider3; //hsf drive
fParam4 = slider4; //output

thresh=pow(10, 3 * fParam1 - 3);
fil=0.05 + 0.94 * fParam2 * fParam2;
fo=(1-fil);
gain=pow(10, 2 * fParam3 - 1);
output=pow(10, 2 * fParam4 - 1);

@sample
f1=fbuf1;
f2=fbuf2;
en=env;

a = spl0;
b = spl1;

tmp = 0.5 * (a + b); //2nd order crossover
f1 = fo * f1 + fil * tmp;
tmp -= f1;
f2 = fo * f2 + fil * tmp;
tmp = gain * (tmp - f2); //extra HF gain

en = (tmp>en) ? en+att*(tmp-en) : en*rel; //envelope
(en>thresh) ? ( g = f1+f2+tmp*(thresh/en); ):( g = f1+f2+tmp; ); //limit 

c = g;
d = g;

spl0 = c * output;
spl1 = d * output;

(abs(f1)<0.0000000001) ? ( fbuf1=0; fbuf2=0; ):( fbuf1=f1; fbuf2=f2; );
(abs(en)<0.0000000001) ? ( env=0; ):( env=en; );

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

gfx_x =20; gfx_y =10;  gfx_printf("%.1f",(60 * fParam1 - 60) );
gfx_x =70; gfx_y =10;  gfx_printf("dB");
gfx_x =110; gfx_y =10;  gfx_printf("Threshold");

gfx_x =20; gfx_y =30;  gfx_printf("%.0f",(1000 + 11000 * fParam2) );
gfx_x =70; gfx_y =30;  gfx_printf("Hz");
gfx_x =110; gfx_y =30;  gfx_printf("Frequency");

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

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