slider1: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}>in channel
slider2:0<-40,40,0.1>volume (dB)

@init
RMS_MS = 350.0;
RED_DR = 60;
MAX_DB = 0;
MIN_DB = -60.0;

decay = exp(-1.0/(RMS_MS*srate*0.001));

DB_LO = -60.0;

peak2=spl(in);
peak3=spl(in2);

peak0 = peak1 = peak2 = peak3 = 0.0;
peakdb0 = peakdb1 = peakdb2 = peakdb3 = DB_LO;

src_vol = tgt_vol = 10 ^ (slider2 / 20);

@slider
channel = slider1*2;
in = channel;
in2 = in+1;
tgt_vol= 10 ^ (slider2 / 20);

@block
peak0 <= 0.0 ? peakdb0 = DB_LO : peakdb0 = 8.6562*log(peak0);
peak2 <= 0.0 ? peakdb2 = DB_LO : peakdb2 = 8.6562*log(peak2);
peak1 <= 0.0 ? peakdb1 = DB_LO : peakdb1 = 8.6562*log(peak1);
peak3 <= 0.0 ? peakdb3 = DB_LO : peakdb3 = 8.6562*log(peak3);
dyn = 0.5*(peakdb0+peakdb1-peakdb2-peakdb3);

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

@sample
tvol += d_vol;
adj = tvol;

new = abs(spl0)*adj;
new > peak0 ? peak0 = new : peak0 = peak0*decay;
new = abs(spl(in));
new > peak2 ? peak2 = new : peak2 = peak2*decay;

new = abs(spl1)*adj;
new > peak1 ? peak1 = new : peak1 = peak1*decay;
new = abs(spl(in2));
new > peak3 ? peak3 = new : peak3 = peak3*decay;

spl0*=adj;
spl1*=adj;

@gfx 0 300
T = (gfx_h-pxperdb*60.0)|0;
B = (gfx_h-pxperdb*0)|0;
pxperdb = (gfx_h+22.5)/66.0;

redpx = RED_DR*pxperdb;

xw = -gfx_W*3/64;
xs = -gfx_W/16;

gfx_a = 1.0;

i = 0;
loop(2,
i == 0 ? (
tpeak0 = peakdb0;
tpeak1 = peakdb2;
):(
tpeak0 = peakdb1;
tpeak1 = peakdb3;
);

peaky0 = B-pxperdb*(tpeak0-MIN_DB);
peaky0 < T ? peaky0 = T : peaky0 > B ? peakY0 = B;
peaky1 = B-pxperdb*(tpeak1-MIN_DB);
peaky1 < T ? peaky1 = T : peaky1 > B ? peaky1 = B;

d = (peaky1-peaky0-redpx);
d < 0.0 ? d = 0.0 : d > 1.0 ? d = 1.0;
gfx_r = 1.0-d;
gfx_g = d;
gfx_b = 0.0;

gfx_x = gfx_w/2+xw/4;
gfx_y = peaky1;
gfx_rectto(gfx_x+xw, peaky0);

(peaky1-peaky0)<=0?(
gfx_r = 0.2;
gfx_g = 0.8;
gfx_b = 0.3;
):(
gfx_r = 0.8;
gfx_g = 0.8;
gfx_b = 0.1;
);

gfx_x = gfx_x+xs;
gfx_rectto(gfx_x+xw, B);
gfx_x = gfx_x+xs;
gfx_rectto(gfx_x+xw, peaky1);

xw = -xw;
xs = -xs;
i = i+1;
);

i = 0;
db = 60;
while 
(
i%2 ? gfx_r=gfx_g=gfx_b=0.0 : gfx_r=gfx_g=gfx_b=0.375;
gfx_x = 4;
gfx_y = gfx_h-pxperdb*db-0.5;
gfx_lineto(gfx_w-4, gfx_y, 0);  
db = db-3;
i = i+1;
db > 0.0;
);
