// Right-click the display to change resolution

slider1:0<-30,0,0.1>Threshold (dB)
slider2:2<1,20,0.1>Ratio
slider3:3<1,20,0.1>Attack (ms)
slider4:100<20,1000,1>Release (ms)
slider5:50<10,100,1>Env Decay (ms)
slider6:0<-24,24,0.1>Output (dB)

filename:0,w_comp_simple_2gfx/lampA.png
filename:1,w_comp_simple_2gfx/lampB.png

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

@init
output = 1;
transfer_A = 0;
transfer_B = 1;
gain = 1;
env = 0;

log2dB = 8.6858896380650365530225783783321;

//Lamp
s = 1/101;

ext_noinit = 1;
RIGHT_CLICK = 2;
NO_CLICK = 0;
NO = 0; YES = 1;
first_click = YES;

@slider
threshold = 10^(slider1/20);

transfer_A = (1/slider2)-1;
transfer_B = output * pow(threshold,-transfer_A);

attack = exp(-1/(slider3/1000*srate));
release = exp(-1/(slider4/1000*srate));
envelope_decay = exp(-1/(slider5/1000*srate));

vol = 10^(slider6/20);

@sample
inL = spl0;
inR = spl1;

det = max(abs(inL),abs(inR));
det += 0.000000000001;
env = det >= env ? det : det+envelope_decay*(env-det);
transfer_gain = env > threshold ? pow(env,transfer_A)*transfer_B:output;
gain = transfer_gain < gain ? transfer_gain+attack*(gain-transfer_gain) : transfer_gain+release*(gain-transfer_gain);

spl0 = inL * gain * vol;
spl1 = inR * gain * vol;

gr = -log(gain)*log2dB;
m = max(abs(spl0),abs(spl0))*gr;
m ^= s;
e = m;

@gfx 455 78
disp_mode == 0 ? (
gfx_a=1;
gfx_x=422;
gfx_y=20;
gfx_blit(0,1,0);
gr>0.1?(
gfx_a=min(e,1);
gfx_x=422;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=392;
gfx_y=20;
gfx_blit(0,1,0);
gr>1?(
gfx_a=min(e,1);
gfx_x=392;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=362;
gfx_y=20;
gfx_blit(0,1,0);
gr>2?(
gfx_a=min(e,1);
gfx_x=362;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=332;
gfx_y=20;
gfx_blit(0,1,0);
gr>3?(
gfx_a=min(e,1);
gfx_x=332;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=302;
gfx_y=20;
gfx_blit(0,1,0);
gr>4?(
gfx_a=min(e,1);
gfx_x=302;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=272;
gfx_y=20;
gfx_blit(0,1,0);
gr>5?(
gfx_a=min(e,1);
gfx_x=272;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=242;
gfx_y=20;
gfx_blit(0,1,0);
gr>6?(
gfx_a=min(e,1);
gfx_x=242;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=212;
gfx_y=20;
gfx_blit(0,1,0);
gr>7?(
gfx_a=min(e,1);
gfx_x=212;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=182;
gfx_y=20;
gfx_blit(0,1,0);
gr>8?(
gfx_a=min(e,1);
gfx_x=182;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=152;
gfx_y=20;
gfx_blit(0,1,0);
gr>9?(
gfx_a=min(e,1);
gfx_x=152;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=122;
gfx_y=20;
gfx_blit(0,1,0);
gr>10?(
gfx_a=min(e,1);
gfx_x=122;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=92;
gfx_y=20;
gfx_blit(0,1,0);
gr>11?(
gfx_a=min(e,1);
gfx_x=92;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=62;
gfx_y=20;
gfx_blit(0,1,0);
gr>12?(
gfx_a=min(e,1);
gfx_x=62;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=32;
gfx_y=20;
gfx_blit(0,1,0);
gr>13?(
gfx_a=min(e,1);
gfx_x=32;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=2;
gfx_y=20;
gfx_blit(0,1,0);
gr>14?(
gfx_a=min(e,1);
gfx_x=2;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_r=gfx_g=gfx_b=gfx_a=0.6;
gfx_x=374;gfx_y=56;gfx_drawchar($'3');
gfx_x=366;gfx_y=56;gfx_drawchar($'-');
gfx_x=284;gfx_y=56;gfx_drawchar($'6');
gfx_x=276;gfx_y=56;gfx_drawchar($'-');
gfx_x=194;gfx_y=56;gfx_drawchar($'9');
gfx_x=186;gfx_y=56;gfx_drawchar($'-');
gfx_x=100;gfx_y=56;gfx_drawchar($'1');
gfx_x=108;gfx_y=56;gfx_drawchar($'2');
gfx_x=92;gfx_y=56;gfx_drawchar($'-');
gfx_x=10;gfx_y=56;gfx_drawchar($'1');
gfx_x=18;gfx_y=56;gfx_drawchar($'5');
gfx_x=2;gfx_y=56;gfx_drawchar($'-');
);

disp_mode == 1 ? (
gfx_a=1;
gfx_x=422;
gfx_y=20;
gfx_blit(0,1,0);
gr>0.1?(
gfx_a=min(e,1);
gfx_x=422;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=392;
gfx_y=20;
gfx_blit(0,1,0);
gr>2?(
gfx_a=min(e,1);
gfx_x=392;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=362;
gfx_y=20;
gfx_blit(0,1,0);
gr>4?(
gfx_a=min(e,1);
gfx_x=362;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=332;
gfx_y=20;
gfx_blit(0,1,0);
gr>6?(
gfx_a=min(e,1);
gfx_x=332;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=302;
gfx_y=20;
gfx_blit(0,1,0);
gr>8?(
gfx_a=min(e,1);
gfx_x=302;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=272;
gfx_y=20;
gfx_blit(0,1,0);
gr>10?(
gfx_a=min(e,1);
gfx_x=272;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=242;
gfx_y=20;
gfx_blit(0,1,0);
gr>12?(
gfx_a=min(e,1);
gfx_x=242;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=212;
gfx_y=20;
gfx_blit(0,1,0);
gr>14?(
gfx_a=min(e,1);
gfx_x=212;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=182;
gfx_y=20;
gfx_blit(0,1,0);
gr>16?(
gfx_a=min(e,1);
gfx_x=182;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=152;
gfx_y=20;
gfx_blit(0,1,0);
gr>18?(
gfx_a=min(e,1);
gfx_x=152;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=122;
gfx_y=20;
gfx_blit(0,1,0);
gr>20?(
gfx_a=min(e,1);
gfx_x=122;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=92;
gfx_y=20;
gfx_blit(0,1,0);
gr>22?(
gfx_a=min(e,1);
gfx_x=92;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=62;
gfx_y=20;
gfx_blit(0,1,0);
gr>24?(
gfx_a=min(e,1);
gfx_x=62;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=32;
gfx_y=20;
gfx_blit(0,1,0);
gr>26?(
gfx_a=min(e,1);
gfx_x=32;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_a=1;
gfx_x=2;
gfx_y=20;
gfx_blit(0,1,0);
gr>28?(
gfx_a=min(e,1);
gfx_x=2;
gfx_y=20;
gfx_blit(1,1,0);
);

gfx_r=gfx_g=gfx_b=gfx_a=0.6;
gfx_x=374;gfx_y=56;gfx_drawchar($'6');
gfx_x=366;gfx_y=56;gfx_drawchar($'-');
gfx_x=280;gfx_y=56;gfx_drawchar($'1');
gfx_x=288;gfx_y=56;gfx_drawchar($'2');
gfx_x=272;gfx_y=56;gfx_drawchar($'-');
gfx_x=190;gfx_y=56;gfx_drawchar($'1');
gfx_x=198;gfx_y=56;gfx_drawchar($'8');
gfx_x=182;gfx_y=56;gfx_drawchar($'-');
gfx_x=100;gfx_y=56;gfx_drawchar($'2');
gfx_x=108;gfx_y=56;gfx_drawchar($'4');
gfx_x=92;gfx_y=56;gfx_drawchar($'-');
gfx_x=10;gfx_y=56;gfx_drawchar($'3');
gfx_x=18;gfx_y=56;gfx_drawchar($'0');
gfx_x=2;gfx_y=56;gfx_drawchar($'-');
);

mouse_cap == RIGHT_CLICK && first_click ? (
first_click = NO;
disp_mode +=1;
disp_mode > 1 ? disp_mode = 0;
); 
mouse_cap == NO_CLICK ? first_click = YES;
