// LMB = Sound/Color
// RMB = Image Position

slider1:0<0,255,1>--R
slider2:0<0,255,1>--G
slider3:0<0,255,1>--B
slider4:0<0,1,0.001>--R (gfx)
slider5:0<0,1,0.001>--G (gfx)
slider6:0<0,1,0.001>--B (gfx)
slider7:150<0,400,1>--pos x
slider8:10<0,100,1>--pos y

slider11:1<0.1,20,0.1>Attack (ms)
slider12:150<1,500,1>Release (ms)
slider13:-12<-30,0,1>Output (dB)
slider14:1<0.5,4,0.1>Zoom
slider15:2<0,6,1>Image

filename:0,RGB_mouse_01_gfx/001.png
filename:1,RGB_mouse_01_gfx/002.png
filename:2,RGB_mouse_01_gfx/003.png
filename:3,RGB_mouse_01_gfx/004.png
filename:4,RGB_mouse_01_gfx/005.png
filename:5,RGB_mouse_01_gfx/006.png
filename:6,RGB_mouse_01_gfx/test.png
//....add more images. Update slider15 !

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

@init
ext_noinit = 1;
f = srate;
fmin = srate/10000;
seekv = 0;

itm=otm=0;
m1=m0=0;

// RGB to HEX
hextab = 0;
i=0;
loop(10,hextab[i] = $'0' + i; i+=1; );
loop(6,hextab[i] = $'A' + i - 10; i+=1; );

@slider
fadein = exp(-1/(slider11*0.001*srate));
fadeout = exp(-1/(slider12*0.001*srate));

vol = slider13 <= -30 ? 0.0 : 10^(slider13/20);

@block
// GFX TO RGB
r=255*slider4;
slider1 = ceil(r);
sliderchange(slider1);
g=255*slider5;
slider2 = ceil(g);
sliderchange(slider2);
b=255*slider6;
slider3 = ceil(b);
sliderchange(slider3);

// RGB TO DECIMALS
dr=slider1*256*256;
dg=slider2*256;
db=slider3;

// DECIMALS TO FREQ
tmpr=max(ceil(dr*(f/16711680))*0.01,fmin);
tmpg=max(ceil(dg*(f/65280))*0.01,fmin);
tmpb=max(ceil(db*(f/255))*0.01,fmin);

// FREQ TO GRAYSCALE
t=ceil(0.299*tmpr + 0.587*tmpg + 0.114*tmpb);

// RGB to HEX
rx=slider1;
gx=slider2;
bx=slider3;

x1=rx/16;
y1=rx%=16;
x2=gx/16;
y2=gx%=16;
x3=bx/16;
y3=bx%=16;

@sample
adj = 2*$pi*t/srate;

toner = (0.5+(cos(pos)/2)); // Sine
toneg = (0.5+(2*pos/$pi-1)/2); // Triangle
(toneg > 1) ? toneg = 2-toneg;
toneb = (0.5+(1-pos/(2*$pi))/2); // Saw

// TONES * GRAYSCALE
tone = (toner*0.299+toneg*0.587+toneb*0.114)*6;
// TONES * GRAYSCALE * GFX
//tone = (toner*slider4*0.299+toneg*slider5*0.587+toneb*slider6*0.114); // produces clicks !!!

otm=0.999*otm + tone - itm; itm=tone; tone=otm;
m1=m0;
tone=0.5*(m1+m0=tone);

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

tone *= seekv;

spl0 += tone*vol;
spl1 += tone*vol;

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

@gfx 0 245
gfx_a=1;
gfx_r=slider4;gfx_g=slider5;gfx_b=slider6;
gfx_x=0;gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

gfx_a=1;
gfx_r=gfx_g=gfx_b=0;
(mouse_cap) == 2 ?
(
gfx_x=mouse_x;
gfx_y=mouse_y;
slider7=mouse_x;
slider8=mouse_y;
):(
gfx_x=slider7;
gfx_y=slider8;
);
gfx_getimgdim(slider15,w,h);
gfx_blit(slider15,slider14,0);

(mouse_cap) == 1 ?
(
((mouse_x < slider7+w*slider14) && (mouse_y < slider8+h*slider14) && (mouse_x > slider7) && (mouse_y > slider8)) ?
(
gfx_x=mouse_x;
gfx_y=mouse_y;

gfx_getpixel(slider4,slider5,slider6);
sliderchange(slider4);
sliderchange(slider5);
sliderchange(slider6);
);
);

// RGB
gfx_x=gfx_w-145;
gfx_y=gfx_h-gfx_texth-3;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(gfx_w,gfx_h);

gfx_x=gfx_w-143;
gfx_y=gfx_h-gfx_texth-1;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("R:");
gfx_drawnumber(slider1,0);

gfx_x=gfx_w-92;
gfx_y=gfx_h-gfx_texth-1;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("G:");
gfx_drawnumber(slider2,0);

gfx_x=gfx_w-41;
gfx_y=gfx_h-gfx_texth-1;
gfx_r=gfx_g=gfx_b=1;
gfx_drawstr("B:");
gfx_drawnumber(slider3,0);

// HEX
gfx_x=0;
gfx_y=gfx_h-gfx_texth-2;
gfx_r=gfx_g=gfx_b=0;
gfx_a=1;
gfx_rectto(56,gfx_h);

gfx_r=gfx_g=gfx_b=1;
gfx_x=2;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x1]);
gfx_x=10;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y1]);
gfx_x=20;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x2]);
gfx_x=28;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y2]);
gfx_x=38;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[x3]);
gfx_x=46;gfx_y=gfx_h-gfx_texth;
gfx_drawchar(hextab[y3]);
