slider1:-120<-120,0,0.1>Threshold (dB)
slider2:20<10,1000,1>Hold (ms)
slider3:1<1,50,0.1>Fade-in (ms)
slider4:100<10,1000,1>Fade-out (ms)
slider5:1<0,1,1{1+2: gate  and  3+4: inverse gate,all to 1+2}>Output mode
slider6:0<-60,12,0.1>Gate Volume (dB)
slider7:-60<-60,12,0.1>inverse Gate Volume (dB)
slider8:0<-24,24,0.1>Output (dB)

in_pin:L in
in_pin:R in
out_pin:L out 1
out_pin:R out 2
out_pin:L out 3
out_pin:R out 4

@init
silentcnt=0;
seekv=1;
seekto=1;

@slider
thresh=10^(slider1/20);
sillen=slider2*srate/1000;
fadeout=1/pow(10,1/(srate*slider4/1000));
fadein=1/pow(10,1/(srate*slider3/1000));

adj1=slider6 <= -60.0 ? 0.0 : 10^(slider6/20);
adj2=slider7 <= -60.0 ? 0.0 : 10^(slider7/20);
adj3=10^(slider8/20);

@sample
a= abs(spl0) > thresh || abs(spl1) > thresh;

a ? (
silentcnt=0;
seekto=1;
):(
(silentcnt+=1) > sillen ?  seekto=0;
);

seekto > 0.5 ? ( // fading in
seekv=seekv*fadein + (1-fadein);
):( // fading out
seekv=seekv*fadeout;
);

s0=spl0;
s1=spl1;

spl0=spl0*seekv;
spl1=spl1*seekv;

out0=s0-spl0;
out1=s1-spl1;

slider5 == 0 ? (
spl0=(spl0*adj1)*adj3;
spl1=(spl1*adj1)*adj3;
spl2=(out0*adj2)*adj3;
spl3=(out1*adj2)*adj3;
);

slider5 == 1 ? (
spl0=(spl0*adj1+out0*adj2)*adj3;
spl1=(spl1*adj1+out1*adj2)*adj3;
);
