slider1:0<-30,30,0.1>Input (dB)
slider2:0<-30,30,0.1>Output (dB)
slider3:0<0,1,1{Mono,Stereo}>Mode

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

@init
itm1=itm2=otm1=otm2=0;

function tanh(x) (
x = exp(2*x);
(x - 1) / (x + 1);
);

@slider
input = 10^((slider1-9.6)/20);
inv_input = 10^((slider1-3.1)/20);
output = 10^((slider2-slider1+1.4)/20);

mode = slider3;

@sample
mode == 0 ? (
in = (spl0+spl1)*0.5;
drive = tanh(in*input);

outa = (3*drive/2)*(1-((drive^2)/3));
outb = (2*outa - outa^2) * sign(outa);

spl1 = spl0 = tanh(outb) * sign(in) * inv_input * output;
);

mode == 1 ? (
inA = spl0;
inB = spl1;
driveA = tanh(inA*input);
driveB = tanh(inB*input);

outaA = (3*driveA/2)*(1-((driveA^2)/3));
outaB = (3*driveB/2)*(1-((driveB^2)/3));
outbA = (2*outaA - outaA^2) * sign(outaA);
outbB = (2*outaB - outaB^2) * sign(outaB);

spl0 = tanh(outbA) * sign(inA) * inv_input * output;
spl1 = tanh(outbB) * sign(inB) * inv_input * output;
);

otm1=0.999*otm1 + spl0 - itm1; itm1=spl0; spl0=otm1;
otm2=0.999*otm2 + spl1 - itm2; itm2=spl1; spl1=otm2;
