// This is a mod of the already included gate plugin.

desc: set track channels to 4 // 1+2=gate // 3+4=inverse gate

slider1:-120<-120,0,0.1>threshold (dB)
slider2:20<1,1000,1>silence length for fadeout (ms)
slider3:10<1,100,1>fade-in response (ms)
slider4:100<1,1000,1>fade-out response (ms)
slider5:1<0,1,1{output is 1+2/3+4,outputs 1+2/3+4 to 1+2}>mode
slider6:0<-60,12,0.1>1+2 volume (dB)
slider7:0<-60,12,0.1>3+4 volume (dB)
slider8:0<-24,24,0.1>main volume (dB)

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

scale = log(10.0)*0.05;

@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 : exp(slider6*scale);
adj2 = slider7 <= -60.0 ? 0.0 : exp(slider7*scale);
adj3 = exp(slider8*scale);

@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;

spl2 = s0 - spl0;
spl3 = s1 - spl1;

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

slider5 == 1 ? (
spl0 = (spl0 * adj1 + spl2 * adj2)* adj3;
spl1 = (spl1 * adj1 + spl3 * adj2)* adj3;
);
