desc: 360 - Panner

slider1:0.5<0,1,0.001>pan
slider2:0.5<0,1,0.001>auto
slider3:1<0,1,1{mono,stereo}>mode

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

@init
twopi = 2*$pi;
fourpi = 4*$pi;
piradian = $pi*0.25;
phi = 0;
dphi = (5/srate);
hlfsqrt =sqrt(0.5);

@slider
fParam1 = slider1; //pan
fParam2 = slider2; //auto
fParam3 = slider3; //mode

phi = (twopi * (fParam1 - 0.5));

(fParam2 > 0.55) ? (
dphi = (20 * (fParam2 - 0.55) / srate);
):(
(fParam2 < 0.45) ? (
dphi = (-20 * (0.45 - fParam2) / srate);
):(
dphi = 0;
);
);

mode = fParam3;

@sample
mode == 0 ? (
a = (spl0 + spl1) * hlfsqrt;

c = (a * -sin((0.5 * phi) - piradian));
d = (a *  sin((0.5 * phi) + piradian));

phi = phi + dphi;

spl0 = c;
spl1 = d;

(phi < 0) ? (
phi = phi + fourpi;
):(
(phi > fourpi) ? (
phi = phi - fourpi;
);
);
);

mode == 1 ? (
a = spl0;
b = spl1;

c = a * cos(0.5 * phi) - b * sin(0.5 * phi);
d = b * cos(0.5 * phi) + a * sin(0.5 * phi);

phi = phi + dphi;

spl0 = c;
spl1 = d;

(phi < 0) ? (
phi = phi + fourpi;
):(
(phi > fourpi) ? (
phi = phi - fourpi;
);
);
);

@gfx 0 60
gfx_r=0; gfx_g=1; gfx_b=0; gfx_a=1;
gfx_setfont(1,"Arial", 16);

gfx_x =20; gfx_y =10;  gfx_printf("%.1f",(360 * (fParam1 - 0.5)) );
gfx_x =70; gfx_y =10;  gfx_printf("deg");
gfx_x =130; gfx_y =10;  gfx_printf("Pan");

gfx_x =20; gfx_y =30;  gfx_printf("%.1f",(57.296 * dphi * srate) );
gfx_x =70; gfx_y =30;  gfx_printf("deg/sec");
gfx_x =130; gfx_y =30;  gfx_printf("Auto");
