// 8xStereo ganged Volume/Pan/Width.

desc: 0=all_off   ,   9=all_on

slider1:0<-60,24,0.1>Volume (dB)
slider2:0<-100,100,1>Pan (%)
slider3:0<-6,6,0.5>Pan Law (dB)
slider4:100<0,100,1>Width (%)

slider6:1<0,1,1{ 1 + 2   -----------  mute, 1 + 2}>Trigger 1
slider7:1<0,1,1{ 3 + 4   -----------  mute, 3 + 4}>Trigger 2
slider8:1<0,1,1{ 5 + 6   -----------  mute, 5 + 6}>Trigger 3
slider9:1<0,1,1{ 7 + 8   -----------  mute, 7 + 8}>Trigger 4
slider10:1<0,1,1{ 9 +10  -----------  mute, 9 +10}>Trigger 5
slider11:1<0,1,1{11+12  -----------  mute,11+12}>Trigger 6
slider12:1<0,1,1{13+14  -----------  mute,13+14}>Trigger 7
slider13:1<0,1,1{15+16  -----------  mute,15+16}>Trigger 8

slider15:0<0,1,1{original,all to 1+2}>mode

in_pin:L in 1
in_pin:R in 2
in_pin:L in 3
in_pin:R in 4
in_pin:L in 5
in_pin:R in 6
in_pin:L in 7
in_pin:R in 8
in_pin:L in 9
in_pin:R in 10
in_pin:L in 11
in_pin:R in 12
in_pin:L in 13
in_pin:R in 14
in_pin:L in 15
in_pin:R in 16
out_pin:L out 1
out_pin:R out 2
out_pin:L out 3
out_pin:R out 4
out_pin:L out 5
out_pin:R out 6
out_pin:L out 7
out_pin:R out 8
out_pin:L out 9
out_pin:R out 10
out_pin:L out 11
out_pin:R out 12
out_pin:L out 13
out_pin:R out 14
out_pin:L out 15
out_pin:R out 16

@init

src_vol = tgt_vol = slider1 <= -60.0 ? 0.0 : 10^(slider1/20);
src_pan = tgt_pan = 0.01*slider2;
src_dry = tgt_dry = slider4/100;
src_wet = tgt_wet = (100-slider4)/100;

@slider

tgt_vol = slider1 <= -60.0 ? 0.0 : 10^(slider1/20);
tgt_pan = 0.01*slider2;
panlaw = 10^(slider3/20);
pancomp = (panlaw > 1 ? 1/panlaw : panlaw);
tgt_dry = slider4/100;
tgt_wet = (100-slider4)/100;

@block

d_vol = (tgt_vol-src_vol)/samplesblock;
tvol = src_vol;
src_vol = tgt_vol;

d_pan = (tgt_pan-src_pan)/samplesblock;
tpan = src_pan;
src_pan = tgt_pan;

d_dry = (tgt_dry-src_dry)/samplesblock;
tdry = src_dry;
src_dry = tgt_dry;

d_wet = (tgt_wet-src_wet)/samplesblock;
twet = src_wet;
src_wet = tgt_wet;

trigger & 1 ? (
slider6 = 0;
sliderchange(6);
slider7 = 0;
sliderchange(7);
slider8 = 0;
sliderchange(8);
slider9 = 0;
sliderchange(9);
slider10 = 0;
sliderchange(10);
slider11 = 0;
sliderchange(11);
slider12 = 0;
sliderchange(12);
slider13 = 0;
sliderchange(13);
);

trigger & (2^1) ? (
slider6 = (slider6-1)*-1;
sliderchange(6);
);

trigger & (2^2) ? (
slider7 = (slider7-1)*-1;
sliderchange(7);
);

trigger & (2^3) ? (
slider8 = (slider8-1)*-1;
sliderchange(8);
);

trigger & (2^4) ? (
slider9 = (slider9-1)*-1;
sliderchange(9);
);

trigger & (2^5) ? (
slider10 = (slider10-1)*-1;
sliderchange(10);
);

trigger & (2^6) ? (
slider11 = (slider11-1)*-1;
sliderchange(11);
);

trigger & (2^7) ? (
slider12 = (slider12-1)*-1;
sliderchange(12);
);

trigger & (2^8) ? (
slider13 = (slider13-1)*-1;
sliderchange(13);
);

trigger & (2^9) ? (
slider6 = 1;
sliderchange(6);
slider7 = 1;
sliderchange(7);
slider8 = 1;
sliderchange(8);
slider9 = 1;
sliderchange(9);
slider10 = 1;
sliderchange(10);
slider11 = 1;
sliderchange(11);
slider12 = 1;
sliderchange(12);
slider13 = 1;
sliderchange(13);
);

@sample

tvol += d_vol;
tpan += d_pan;
tdry += d_dry;
twet += d_wet;

adj = tvol;
dry = tdry;
wet = twet;

spl0=((spl1+spl0)/2 * wet) + (spl0 * dry);
spl1=(spl0 * wet) + (spl1 * dry);
spl2=((spl3+spl2)/2 * wet) + (spl2 * dry);
spl3=(spl2 * wet) + (spl3 * dry);
spl4=((spl5+spl4)/2 * wet) + (spl4 * dry);
spl5=(spl4 * wet) + (spl5 * dry);
spl6=((spl7+spl6)/2 * wet) + (spl6 * dry);
spl7=(spl6 * wet) + (spl7 * dry);
spl8=((spl9+spl8)/2 * wet) + (spl8 * dry);
spl9=(spl8 * wet) + (spl9 * dry);
spl10=((spl11+spl10)/2 * wet) + (spl10 * dry);
spl11=(spl10 * wet) + (spl11 * dry);
spl12=((spl13+spl12)/2 * wet) + (spl12 * dry);
spl13=(spl12 * wet) + (spl13 * dry);
spl14=((spl15+spl14)/2 * wet) + (spl14 * dry);
spl15=(spl14 * wet) + (spl15 * dry);

panlaw != 1 ? (
panlaw > 1 ? adj *= panlaw;
panatt = abs(tpan);
adj *= pancomp+(1-pancomp)*(2/(2-panatt)-1);
);

adj0 = adj1 = adj;
tpan < 0 ? adj1 *= 1+tpan;
tpan > 0 ? adj0 *= 1-tpan;

slider15==0 ? (
spl0 *= adj0*slider6;
spl1 *= adj1*slider6;

spl2 *= adj0*slider7;
spl3 *= adj1*slider7;

spl4 *= adj0*slider8;
spl5 *= adj1*slider8;

spl6 *= adj0*slider9;
spl7 *= adj1*slider9;

spl8 *= adj0*slider10;
spl9 *= adj1*slider10;

spl10 *= adj0*slider11;
spl11 *= adj1*slider11;

spl12 *= adj0*slider12;
spl13 *= adj1*slider12;

spl14 *= adj0*slider13;
spl15 *= adj1*slider13;
);

slider15==1 ? (
spl0=(spl0*slider6+spl2*slider7+spl4*slider8+spl6*slider9+spl8*slider10+spl10*slider11+spl12*slider12+spl14*slider13)*adj0;
spl1=(spl1*slider6+spl3*slider7+spl5*slider8+spl7*slider9+spl9*slider10+spl11*slider11+spl13*slider12+spl15*slider13)*adj1;

spl2=spl3=spl4=spl5=spl6=spl7=spl8=spl9=spl10=spl11=spl12=spl13=spl14=spl15=0;
);
