desc: lookahead 3 samples

slider1:880<20,22000,1>--Low X-Over (Hz)
slider2:5000<20,22000,1>--High X-Over (Hz)
slider3:0<-12,12,0.1>Low (dB)
slider4:0<-12,12,0.1>Mid (dB)
slider5:0<-12,12,0.1>High (dB)
slider6:0<-12,12,0.1>Output (dB)
slider7:0<0,1,1{A,B (buggy)}>--Midrange Mode

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

@init
lg = 1;
mg = 1;
hg = 1;

cDenorm = 10^-30;

@slider
lf = 2 * sin($pi * (slider1 / srate));
hf = 2 * sin($pi * (slider2 / srate));
lg = 10^(slider3/20);
mg = 10^(slider4/20);
hg = 10^(slider5/20);
out = 10^(slider6/20);

pdc_delay = 3;
pdc_bot_ch = 0;
pdc_top_ch = 2;

@sample
//---------------------------------------------------------
// Filter #1 (lowpass)
in = spl0;
f1p0 += (lf * (in - f1p0)) + cDenorm;
f1p1 += (lf * (f1p0 - f1p1));
f1p2 += (lf * (f1p1 - f1p2));
f1p3 += (lf * (f1p2 - f1p3));

l = f1p3;

// Filter #2 (highpass)

f2p0 += (hf * (in - f2p0)) + cDenorm;
f2p1 += (hf * (f2p0 - f2p1));
f2p2 += (hf * (f2p1 - f2p2));
f2p3 += (hf * (f2p2 - f2p3));

h = sdm3 - f2p3;

// Calculate midrange (signal - (low + high))

slider7==1?(
m = in - (h + l);
):(
m = sdm3 - (h + l);
);

// Scale, combine and store

l *= lg;
m *= mg;
h *= hg;

// Shuffle history buffer

sdm3 = sdm2;
sdm2 = sdm1;
sdm1 = in;

//---------------------------------------------------------
// Filter #1 (lowpass)
in2 = spl1;
f1p0A += (lf * (in2 - f1p0A)) + cDenorm;
f1p1A += (lf * (f1p0A - f1p1A));
f1p2A += (lf * (f1p1A - f1p2A));
f1p3A += (lf * (f1p2A - f1p3A));

l2 = f1p3A;

// Filter #2 (highpass)

f2p0A += (hf * (in2 - f2p0A)) + cDenorm;
f2p1A += (hf * (f2p0A - f2p1A));
f2p2A += (hf * (f2p1A - f2p2A));
f2p3A += (hf * (f2p2A - f2p3A));

h2 = sdm3A - f2p3A;

// Calculate midrange (signal - (low + high))

slider7==1?(
m2 = in2 - (h2 + l2);
):(
m2 = sdm3A - (h2 + l2);
);

// Scale, combine and store

l2 *= lg;
m2 *= mg;
h2 *= hg;

// Shuffle history buffer

sdm3A = sdm2A;
sdm2A = sdm1A;
sdm1A = in2;

//---------------------------------------------------------
// Return result

spl0 = (l + m + h) * out;
spl1 = (l2 + m2 + h2) * out;
