slider1:-120<-120,0,0.1>gate1 ---------- Threshold (dB)
slider2:0.01<0.01,10,0.01>Attack (ms)
slider3:50<20,200,1>Release (ms)
slider4:50<10,100,1>Env Decay (ms)

slider11:-120<-120,0,0.1>gate2 ---------- Threshold (dB)
slider12:0.01<0.01,10,0.01>Attack (ms)
slider13:50<20,200,1>Release (ms)
slider14:50<10,100,1>Env Decay (ms)

slider21:-120<-120,0,0.1>gate3 ---------- Threshold (dB)
slider22:0.01<0.01,10,0.01>Attack (ms)
slider23:50<20,200,1>Release (ms)
slider24:50<10,100,1>Env Decay (ms)

slider51:0<0,3,1{-----------,Band 1,Band 2,Band 3}>|---------------------------------- Solo
slider52:0<-24,24,0.1>Output (dB)

slider61:100<20,18000,1>Split Freq 1 (Hz)
slider62:8000<20,18000,1>Split Freq 2 (Hz)

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

@init
cDenorm = 10^-30;

gainA = 1;
envA = 0;
gainB = 1;
envB = 0;
gainC = 1;
envC = 0;

@slider
(old_s61 != slider61 && slider61 > slider62) ? slider62 = slider61;
(old_s62 != slider62 && slider62 < slider61) ? slider61 = slider62;
old_s61 = slider61;
old_s62 = slider62;

freqHP = min(max(slider62,freqLP),srate);
xHP = exp(-2.0*$pi*freqHP/srate);
a0HP = 1.0-xHP;
b1HP = -xHP;

freqLP = min(min(slider61,srate),freqHP);
xLP = exp(-2.0*$pi*freqLP/srate);
a0LP = 1.0-xLP;
b1LP = -xLP;

//gate1
thresholdA = 10^(slider1/20);

attackA = exp(-1/(slider2/1000*srate));
releaseA = exp(-1/(slider3/1000*srate));
envelope_decayA = exp(-1/(slider4/1000*srate));

//gate2
thresholdB = 10^(slider11/20);

attackB = exp(-1/(slider12/1000*srate));
releaseB = exp(-1/(slider13/1000*srate));
envelope_decayB = exp(-1/(slider14/1000*srate));

//gate3
thresholdC = 10^(slider21/20);

attackC = exp(-1/(slider22/1000*srate));
releaseC = exp(-1/(slider23/1000*srate));
envelope_decayC = exp(-1/(slider24/1000*srate));

vol = 10^(slider52/20);

@sample
s0 = spl0;
s1 = spl1;

out0 = (tmplLP = a0LP*s0 - b1LP*tmplLP + cDenorm);
out1 = (tmprLP = a0LP*s1 - b1LP*tmprLP + cDenorm);

out4 = s0 - (tmplHP = a0HP*s0 - b1HP*tmplHP + cDenorm);
out5 = s1 - (tmprHP = a0HP*s1 - b1HP*tmprHP + cDenorm);

out2 = s0 - out0 - out4;
out3 = s1 - out1 - out5;

//gate1
in0 = out0;
in1 = out1;
detA = max(abs(in0),abs(in1));
envA = detA >= envA ? detA : detA+envelope_decayA*(envA-detA);
transfer_gainA = envA > thresholdA ? pow(envA,0):0;
gainA = transfer_gainA > gainA ? transfer_gainA+attackA*(gainA-transfer_gainA) : transfer_gainA+releaseA*(gainA-transfer_gainA);

//gate2
in2 = out2;
in3 = out3;
detB = max(abs(in2),abs(in3));
envB = detB >= envB ? detB : detB+envelope_decayB*(envB-detB);
transfer_gainB = envB > thresholdB ? pow(envB,0):0;
gainB = transfer_gainB > gainB ? transfer_gainB+attackB*(gainB-transfer_gainB) : transfer_gainB+releaseB*(gainB-transfer_gainB);

//gate3
in4 = out4;
in5 = out5;
detC = max(abs(in4),abs(in5));
envC = detC >= envC ? detC : detC+envelope_decayC*(envC-detC);
transfer_gainC = envC > thresholdC ? pow(envC,0):0;
gainC = transfer_gainC > gainC ? transfer_gainC+attackC*(gainC-transfer_gainC) : transfer_gainC+releaseC*(gainC-transfer_gainC);

slider51==0?(
spl0 = ((in0 * gainA) + (in2 * gainB) + (in4 * gainC))*vol;
spl1 = ((in1 * gainA) + (in3 * gainB) + (in5 * gainC))*vol;
);
slider51==1?(
spl0 = (in0 * gainA)*vol;
spl1 = (in1 * gainA)*vol;
);
slider51==2?(
spl0 = (in2 * gainB)*vol;
spl1 = (in3 * gainB)*vol;
);
slider51==3?(
spl0 = (in4 * gainC)*vol;
spl1 = (in5 * gainC)*vol;
);
