desc: needs improvements

slider1:2<0,3,1{20,30,60,100}>|--------------LSF (Hz)
slider2:0<0,15,0.1>Push (dB)
slider3:0<-15,0,0.1>Pull (dB)

slider5:832<160,4000,1>|------------Peak (Hz)
slider6:0<0,1,1{dull,sharp}>Q Mode
slider7:0<-12,12,0.1>Gain (dB)

slider9:2<0,3,1{6k,8k,12k,15k}>|--------------HSF (Hz)
slider10:0<-8,8,0.1>Gain (dB)

slider12:0<-12,12,0.1>|----------Output (dB)

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

@slider
//Push LowShelf
freq1 = (slider1 == 0 ? 90 : (slider1 == 1 ? 150 : (slider1 == 2 ? 320 :  540 )));
f= 2*$pi * min(freq1, 0.49 * srate) / srate;
q=0.5;
dB_gain=slider2*1.375;

w0 = f;
cos_w0 = cos(w0);
a = 10^(db_gain / 40);

tmp0 = 2 * sqrt(a) * sin(w0) / (2 * q);
tmp1 = (a + 1) - (a - 1) * cos_w0;
tmp2 = (a + 1) + (a - 1) * cos_w0;

b0 = a * (tmp1 + tmp0);
b1 = 2 * a * ((a - 1) - (a + 1) * cos_w0);
b2 = a * (tmp1 - tmp0);
a0 = tmp2 + tmp0;
a1 = -2 * ((a - 1) + (a + 1) * cos_w0);
a2 = tmp2 - tmp0;

a1 /= a0;
a2 /= a0;
b0 /= a0;
b1 /= a0;
b2 /= a0;

//Pull LowShelf
fB= 2*$pi * min(freq1, 0.49 * srate) / srate;
qB=0.5;
dB_gainB=slider3*1.375;

w0B = fB;
cos_w0B = cos(w0B);
aB = 10^(db_gainB / 40);

tmp0B = 2 * sqrt(aB) * sin(w0B) / (2 * qB);
tmp1B = (aB + 1) - (aB - 1) * cos_w0B;
tmp2B = (aB + 1) + (aB - 1) * cos_w0B;

b0B = aB * (tmp1B + tmp0B);
b1B = 2 * aB * ((aB - 1) - (aB + 1) * cos_w0B);
b2B = aB * (tmp1B - tmp0B);
a0B = tmp2B + tmp0B;
a1B = -2 * ((aB - 1) + (aB + 1) * cos_w0B);
a2B = tmp2B - tmp0B;

a1B /= a0B;
a2B /= a0B;
b0B /= a0B;
b1B /= a0B;
b2B /= a0B;

//Peak
fC= 2*$pi * min(slider5, 0.49 * srate) / srate;
tmp = (slider6 == 0 ? 0.6 : 1.2);
qC=tmp;
dB_gainC=slider7;

w0C = fC;
alphaC = sin(w0C) / (2*qC);
aC = 10^(db_gainC / 40);

b0C = 1 + alphaC * aC;
b1C = a1C = -2 * cos(w0C);
b2C = 1 - alphaC * aC;
a0C = 1 + alphaC / aC;
a2C = 1 - alphaC / aC;

a1C /= a0C;
a2C /= a0C;
b0C /= a0C;
b1C /= a0C;
b2C /= a0C;

//HighShelf
freq2 = (slider9 == 0 ? 1200 : (slider9 == 1 ? 2800 : (slider9 == 2 ? 7150 :  9500 )));
fD= 2*$pi * min(freq2, 0.49 * srate) / srate;
qD=0.5;

slider9 > 1 ?
(
slider10 >= 0 ? tmp2 = slider10;
slider10 < 0 ? tmp2 = slider10*0.75;
):(
tmp2 = slider10;
);
dB_gainD = tmp2;

w0D = fD;
cos_w0D = cos(w0D);
aD = 10^(db_gainD / 40);

tmp0D = 2 * sqrt(aD) * sin(w0D) / (2 * qD);
tmp1D = (aD + 1) - (aD - 1) * cos_w0D;
tmp2D = (aD + 1) + (aD - 1) * cos_w0D;

b0D = aD * (tmp2D + tmp0D);
b1D = -2 * aD * ((aD - 1) + (aD + 1) * cos_w0D);
b2D = aD * (tmp2D - tmp0D);
a0D = tmp1D + tmp0D;
a1D = 2 * ((aD - 1) - (aD + 1) * cos_w0D);
a2D = tmp1D - tmp0D;

a1D /= a0D;
a2D /= a0D;
b0D /= a0D;
b1D /= a0D;
b2D /= a0D;

outvol=10^(slider12/20);

@sample
inA=spl0;
inB=spl1;

//Left
x2A = x1A;
x1A = x0A;
x0A = inA;

y2A = y1A;
y1A = y0A;
y0A = b0*x0A + b1*x1A + b2*x2A - a1*y1A - a2*y2A;

//Right
x2B = x1B;
x1B = x0B;
x0B = inB;

y2B = y1B;
y1B = y0B;
y0B = b0*x0B + b1*x1B + b2*x2B - a1*y1B - a2*y2B;

//Output
out0=y0A;
out1=y0B;

//Left
x2AB = x1AB;
x1AB = x0AB;
x0AB = inA;

y2AB = y1AB;
y1AB = y0AB;
y0AB = b0B*x0AB + b1B*x1AB + b2B*x2AB - a1B*y1AB - a2B*y2AB;

//Right
x2BB = x1BB;
x1BB = x0BB;
x0BB = inB;

y2BB = y1BB;
y1BB = y0BB;
y0BB = b0B*x0BB + b1B*x1BB + b2B*x2BB - a1B*y1BB - a2B*y2BB;

//Output
out2=y0AB;
out3=y0BB;

out4=(3.375*out2+out0)*0.228571;
out5=(3.375*out3+out1)*0.228571;

//Left
x2AC = x1AC;
x1AC = x0AC;
x0AC = out4;

y2AC = y1AC;
y1AC = y0AC;
y0AC = b0C*x0AC + b1C*x1AC + b2C*x2AC - a1C*y1AC - a2C*y2AC;

//Right
x2BC = x1BC;
x1BC = x0BC;
x0BC = out5;

y2BC = y1BC;
y1BC = y0BC;
y0BC = b0C*x0BC + b1C*x1BC + b2C*x2BC - a1C*y1BC - a2C*y2BC;

//Output
out6=y0AC;
out7=y0BC;

//Left
x2AD = x1AD;
x1AD = x0AD;
x0AD = out6;

y2AD = y1AD;
y1AD = y0AD;
y0AD = b0D*x0AD + b1D*x1AD + b2D*x2AD - a1D*y1AD - a2D*y2AD;

//Right
x2BD = x1BD;
x1BD = x0BD;
x0BD = out7;

y2BD = y1BD;
y1BD = y0BD;
y0BD = b0D*x0BD + b1D*x1BD + b2D*x2BD - a1D*y1BD - a2D*y2BD;

//Output
spl0=y0AD;
spl1=y0BD;

spl0*=outvol;
spl1*=outvol;
