slider1:1<0,1,0.001>Strength
slider2:0<-1,1,0.001>Offset
slider3:1<0,2,1{free Offset,auto Offset - mid point,auto Offset - top}>Offset Mode
slider4:1<0,31,1{----------,3+4,5+6,7+8,9+10,11+12,13+14,15+16,17+18,19+20,21+22,23+24,25+26,27+28,29+30,31+32,33+34,35+36,37+38,39+40,41+42,43+44,45+46,47+48,49+50,51+52,53+54,55+56,57+58,59+60,61+62,63+64}>VCA out
slider5:0.32<0.1,2,0.01>Curve
slider10:0<0,3,1{sine,triangle,saw,audio input}>VCA Shape
slider11:1<0,1,1{Hz,BPM}>Tempo Mode
slider12:2<0,4,0.05>Hz
slider13:120<0,240,1>BPM
slider14:1<0,1,1{OFF,ON}>Tempo sync
slider15:9<0,23,1{2 dotted,2,2 triplet,1 dotted,1,1 triplet,1/2 dotted,1/2,1/2 triplet,1/4 dotted,1/4,1/4 triplet,1/8 dotted,1/8,1/8 triplet,1/16 dotted,1/16,16 triplet,1/32 dotted,1/32,1/32 triplet,1/64 dotted,1/64,1/64 triplet}>Tempo sync div
slider16:0<0,31,1{1+2,3+4,5+6,7+8,9+10,11+12,13+14,15+16,17+18,19+20,21+22,23+24,25+26,27+28,29+30,31+32,33+34,35+36,37+38,39+40,41+42,43+44,45+46,47+48,49+50,51+52,53+54,55+56,57+58,59+60,61+62,63+64}>Audio input (VCA Shape...)

@init
ext_noinit = -1;

base = 0.06309573; // 10^(-24/20); // -24 dB
scale = 1 - base;

@slider
strength = slider1;
center = slider2;
curve = slider5*$pi;

slider3 == 1 ? (
slider2=(1-slider1)/2;
sliderchange(slider2);
);
slider3 == 2 ? (
slider2=1-slider1;
sliderchange(slider2);
);

channel = slider4*2;
out = channel;
out2 = out+1;

channelin = slider16*2;
in = channelin;
in2 = in+1;

@block
slider11==1?(

slider14==1?(

slider15==0?(
tmp=tempo*3;
);
slider15==1?(
tmp=tempo*2;
);
slider15==2?(
tmp=tempo*4/3;
);
slider15==3?(
tmp=tempo*3/2;
);
slider15==4?(
tmp=tempo;
);
slider15==5?(
tmp=tempo*2/3;
);
slider15==6?(
tmp=tempo*3/4;
);
slider15==7?(
tmp=tempo*1/2;
);
slider15==8?(
tmp=tempo*1/3;
);
slider15==9?(
tmp=tempo*3/8;
);
slider15==10?(
tmp=tempo*1/4;
);
slider15==11?(
tmp=tempo*1/6;
);
slider15==12?(
tmp=tempo*3/16;
);
slider15==13?(
tmp=tempo*1/8;
);
slider15==14?(
tmp=tempo*1/12;
);
slider15==15?(
tmp=tempo*3/32;
);
slider15==16?(
tmp=tempo*1/16;
);
slider15==17?(
tmp=tempo*1/24;
);
slider15==18?(
tmp=tempo*3/64;
);
slider15==19?(
tmp=tempo*1/32;
);
slider15==20?(
tmp=tempo*1/48;
);
slider15==21?(
tmp=tempo*3/128;
);
slider15==22?(
tmp=tempo*1/64;
);
slider15==23?(
tmp=tempo*1/96;
);

adj = 2*$pi*(tmp/60)/srate; //BPM
slider13=tmp;
sliderchange(slider13);
slider12=tmp/60;
sliderchange(slider12);

):(

adj = 2*$pi*(slider13/60)/srate; //BPM
slider12=slider13/60;
sliderchange(slider12);
);

):(

slider14==1?(

slider15==0?(
tmp2=(tempo/60)*3;
);
slider15==1?(
tmp2=(tempo/60)*2;
);
slider15==2?(
tmp2=(tempo/60)*4/3;
);
slider15==3?(
tmp2=(tempo/60)*3/2;
);
slider15==4?(
tmp2=tempo/60;
);
slider15==5?(
tmp2=(tempo/60)*2/3;
);
slider15==6?(
tmp2=(tempo/60)*3/4;
);
slider15==7?(
tmp2=(tempo/60)*1/2;
);
slider15==8?(
tmp2=(tempo/60)*1/3;
);
slider15==9?(
tmp2=(tempo/60)*3/8;
);
slider15==10?(
tmp2=(tempo/60)*1/4;
);
slider15==11?(
tmp2=(tempo/60)*1/6;
);
slider15==12?(
tmp2=(tempo/60)*3/16;
);
slider15==13?(
tmp2=(tempo/60)*1/8;
);
slider15==14?(
tmp2=(tempo/60)*1/12;
);
slider15==15?(
tmp2=(tempo/60)*3/32;
);
slider15==16?(
tmp2=(tempo/60)*1/16;
);
slider15==17?(
tmp2=(tempo/60)*1/24;
);
slider15==18?(
tmp2=(tempo/60)*3/64;
);
slider15==19?(
tmp2=(tempo/60)*1/32;
);
slider15==20?(
tmp2=(tempo/60)*1/48;
);
slider15==21?(
tmp2=(tempo/60)*3/128;
);
slider15==22?(
tmp2=(tempo/60)*1/64;
);
slider15==23?(
tmp2=(tempo/60)*1/96;
);

adj = 2*$pi*tmp2/srate; //Hz
slider12=tmp2;
sliderchange(slider12);
slider13=tmp2*60;
sliderchange(slider13);

):(

adj = 2*$pi*slider12/srate; //Hz
slider13=slider12*60;
sliderchange(slider13);
);

);

@sample
slider10==0 ? ( //sine
wave = (0.5 + (sin(pos) / 2));
);
slider10== 1 ? ( //triangle
wave = (0.5 + (2*pos/$pi-1) / 2);
(wave > 1) ? wave = 2-wave;
);
slider10== 2 ? ( //saw
wave = (0.5 + (1-pos/$pi) / 2);
);
slider10== 3 ? ( //audio input
wave = (0.5 + (spl(in)+spl(in2)) / 2);
);

sScaled = wave * strength;
sAdjusted = sScaled + center;
sCurved = sAdjusted^curve; //^2.3; //...removed curve...
lfo = base + (sCurved * scale);

slider4 > 0 ? (
spl(out) = min(max(lfo,-1),1);
spl(out2) = min(max(lfo,-1),1);
);

pos = pos + adj;
(pos >= 2 * $pi) ? pos = 0;

spl0 = spl0;
spl1 = spl1;

@gfx 0 320
gfx_clear = -1;
gfx_x = -1;
gfx_y = 0;
gfx_blit(-1,1,0);

gfx_a = 1;
gfx_y = 210 + sCurved * -100;
gfx_x = gfx_w - 5;
gfx_setpixel(1,0.2,0.2);

gfx_a = 0.3;
gfx_y = 110; gfx_setpixel(1,1,1);
gfx_y = 160; gfx_setpixel(1,1,1);
gfx_y = 210; gfx_setpixel(1,1,1);
