Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
241 changes: 241 additions & 0 deletions Dynamic/danmarshall_DE-Cyber-Denoise.jsfx
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
desc: DE-Cyber-Denoise
author: Dan Marshall
version: 1.0.1
provides:
danmarshall_DE-Cyber-Denoise/New file 1.jsfx > danmarshall_DE-Cyber-Denoise/DE-Cyber-Deniser-lite.jsfx
danmarshall_DE-Cyber-Denoise/New file 2.jsfx > danmarshall_DE-Cyber-Denoise/De-Cyber-gate.jsfx
danmarshall_DE-Cyber-Denoise/New file 3.jsfx > danmarshall_DE-Cyber-Denoise/DE-cyber-DenoiserPro.jsfx
screenshot:
cyber gate https://github.com/danny1marshall1587-maker/reaper-jsfx/blob/main/cybergate%20screenshot.png
cyber denoiser lite https://github.com/danny1marshall1587-maker/reaper-jsfx/blob/main/denoiserlite%20screenshot.png
cyber denoiser pro https://github.com/danny1marshall1587-maker/reaper-jsfx/blob/main/screenshot.png
about:
Cyber-Forensic Suite V1.0
Author: Danny Marshall

Performance Tier: Ultra-Low RT CPU (Agnostic Optimization)

1. DE-Cyber-Denoiser PRO (10-Band)
The flagship of the suite, engineered for surgical noise restoration where precision is the only priority.

Architecture: 10-band logarithmic crossover network for high-resolution frequency isolation.

Performance: Optimized for 0.18% RT CPU usage.

Key Feature: Dynamic "Analyzing Room" HUD with a crash-proof, multi-click Learn Timer (5s–60s).

Visuals: Classic Neon Blue/Purple "Static" Dashboard for flicker-free monitoring.

2. DE-Cyber-Denoiser LITE (5-Band)
The "Lite" edition is designed for high-track-count projects where efficiency is king, without sacrificing forensic effectiveness.

Architecture: 5-band split mapped to forensic "Problem Zones" (Rumble, Mud, Presence, Hiss, Air).

Performance: Surgical optimization hitting a benchmark of 0.12% RT CPU.

Visuals: "Neon Inferno" palette (Hot Pinks and Electric Oranges) for instant visual differentiation.

Best For: Managing noise across 50+ tracks without hitting performance ceilings.

3. DE-Cyber-Gate (1-Band)
An ultra-fast, single-band forensic gate for rapid signal snapshotting and "Toxic" performance levels.

Architecture: Direct-path full-range detector for zero-latency gating.

Performance: The "Speed Demon" of the suite, targeting 0.05% RT CPU.

Visuals: "Toxic Cyber" theme (Lime Greens and Cyber-Black) signaling the highest performance tier.

Key Feature: Full-range "Learn" capability to set forensic thresholds in seconds.

Standard Suite Features
Agnostic Optimization: Every plugin is written to maximize L3 cache affinity, specifically verified on the AMD Ryzen 7 5700X3D.

Forensic Monitoring: All versions feature the "Listen Noise" mode, allowing you to hear exactly what is being surgically removed from the signal.

Static UI Engine: Manual background clears ensure a rock-solid, flicker-free dashboard even during heavy processing.

Safety First: Learning logic includes a +3dB forensic safety buffer to ensure noise floors stay buried.


desc: Cyber-Denoiser PRO (10-Band Forensic)
version: 1.0
author: Danny Marshall
changelog: Initial release with streamlined dashboard and crash-proof timer logic.
Provides: cyber_denoiser_pro.jsfx
about:
# Cyber-Denoiser PRO
A high-precision, 10-band forensic denoiser optimized for x86 architectures and L3 cache efficiency.
Features a real-time "Static" dashboard and automated noise floor analysis.

options:gmem=DenoisePro

slider1:0<-100,0,1>-T1
slider2:0<-100,0,1>-T2
slider3:0<-100,0,1>-T3
slider4:0<-100,0,1>-T4
slider5:0<-100,0,1>-T5
slider6:0<-100,0,1>-T6
slider7:0<-100,0,1>-T7
slider8:0<-100,0,1>-T8
slider9:0<-100,0,1>-T9
slider10:0<-100,0,1>-T10
slider11:5<1,100,1>-Att
slider12:0<0,1000,1>-Rel
slider13:0<0,1,0.001>-Floor
slider14:20<5,60,1>-LearnTime
slider15:6<1,24,0.5>-Gradient
slider17:0<0,1,1>-RMSMode
slider18:1<0,1,1>-LowCut
slider19:1<0,1,1>-HighCut
slider20:0<0,1,1>-ListenNoise

@init
i=1; loop(20, slider_show(i, 0); i+=1; );
r1=r2=r3=r4=r5=r6=r7=r8=r9=r10=0;
g1=g2=g3=g4=g5=g6=g7=g8=g9=g10=1;
p1=p2=p3=p4=p5=p6=p7=p8=p9=p10=0.00001;
learn_start = -1; m_latch = 0; last_v = 0;
rms_f = 1 - exp(-1 / (0.050 * srate));

@slider
att = exp(-1 / (slider11 * srate / 1000));
rel = (slider12 == 0) ? 0 : exp(-1 / (slider12 * srate / 1000));

@sample
s0 = spl0;
slider18 ? (hp_f=40*2*$pi/srate; hp_in+=(s0-hp_in)*hp_f; s0-=hp_in;);
slider19 ? (lp_f=18000*2*$pi/srate; lp_in+=(s0-lp_in)*lp_f; s0=lp_in;);

f = 450/srate;
lp1+=(s0-lp1)*f; b1=lp1;
lp2+=(s0-lp2)*f*2.2; b2=lp2-lp1;
lp3+=(s0-lp3)*f*4.5; b3=lp3-lp2;
lp4+=(s0-lp4)*f*9.0; b4=lp4-lp3;
lp5+=(s0-lp5)*f*18.0; b5=lp5-lp4;
lp6+=(s0-lp6)*f*36.0; b6=lp6-lp5;
lp7+=(s0-lp7)*f*72.0; b7=lp7-lp6;
lp8+=(s0-lp8)*f*144.0; b8=lp8-lp7;
lp9+=(s0-lp9)*f*281.0; b9=lp9-lp8;
b10=s0-lp9;

slider17 ? (
e1+=(b1*b1-e1)*rms_f; r1=sqrt(max(0,e1)); e2+=(b2*b2-e2)*rms_f; r2=sqrt(max(0,e2));
e3+=(b3*b3-e3)*rms_f; r3=sqrt(max(0,e3)); e4+=(b4*b4-e4)*rms_f; r4=sqrt(max(0,e4));
e5+=(b5*b5-e5)*rms_f; r5=sqrt(max(0,e5)); e6+=(b6*b6-e6)*rms_f; r6=sqrt(max(0,e6));
e7+=(b7*b7-e7)*rms_f; r7=sqrt(max(0,e7)); e8+=(b8*b8-e8)*rms_f; r8=sqrt(max(0,e8));
e9+=(b9*b9-e9)*rms_f; r9=sqrt(max(0,e9)); e10+=(b10*b10-e10)*rms_f; r10=sqrt(max(0,e10));
) : (
r1=r1*rel+abs(b1)*(1-rel); r2=r2*rel+abs(b2)*(1-rel); r3=r3*rel+abs(b3)*(1-rel);
r4=r4*rel+abs(b4)*(1-rel); r5=r5*rel+abs(b5)*(1-rel); r6=r6*rel+abs(b6)*(1-rel);
r7=r7*rel+abs(b7)*(1-rel); r8=r8*rel+abs(b8)*(1-rel); r9=r9*rel+abs(b9)*(1-rel); r10=r10*rel+abs(b10)*(1-rel);
);

function calc_g(r_in, t_db, gn, f_lv) (
r_db = 20*log10(r_in+0.000001); diff = r_db - t_db;
diff >= 0 ? 1 : (diff <= -gn ? f_lv : f_lv + (1-f_lv) * ((diff + gn) / gn));
);

gn = slider15; f_v = slider13;
g1=g1*att + calc_g(r1, slider1, gn, f_v)*(1-att);
g2=g2*att + calc_g(r2, slider2, gn, f_v)*(1-att);
g3=g3*att + calc_g(r3, slider3, gn, f_v)*(1-att);
g4=g4*att + calc_g(r4, slider4, gn, f_v)*(1-att);
g5=g5*att + calc_g(r5, slider5, gn, f_v)*(1-att);
g6=g6*att + calc_g(r6, slider6, gn, f_v)*(1-att);
g7=g7*att + calc_g(r7, slider7, gn, f_v)*(1-att);
g8=g8*att + calc_g(r8, slider8, gn, f_v)*(1-att);
g9=g9*att + calc_g(r9, slider9, gn, f_v)*(1-att);
g10=g10*att + calc_g(r10, slider10, gn, f_v)*(1-att);

out_sum = b1*g1+b2*g2+b3*g3+b4*g4+b5*g5+b6*g6+b7*g7+b8*g8+b9*g9+b10*g10;
slider20 ? (spl0=spl1=(s0 - out_sum);) : (spl0=spl1=out_sum;);

learn_start > 0 ? (
elap = time_precise() - learn_start;
elap < slider14 ? (
p1=max(p1,r1); p2=max(p2,r2); p3=max(p3,r3); p4=max(p4,r4); p5=max(p5,r5);
p6=max(p6,r6); p7=max(p7,r7); p8=max(p8,r8); p9=max(p9,r9); p10=max(p10,r10);
) : (
slider1=20*log10(p1)+3; slider2=20*log10(p2)+3; slider3=20*log10(p3)+3;
slider4=20*log10(p4)+3; slider5=20*log10(p5)+3; slider6=20*log10(p6)+3;
slider7=20*log10(p7)+3; slider8=20*log10(p8)+3; slider9=20*log10(p9)+3; slider10=20*log10(p10)+3;
slider_automate(1023); learn_start = -1;
);
);

(time_precise() - last_v > 0.04) ? (
gmem[0]=r1; gmem[1]=r2; gmem[2]=r3; gmem[3]=r4; gmem[4]=r5;
gmem[5]=r6; gmem[6]=r7; gmem[7]=r8; gmem[8]=r9; gmem[9]=r10;
gmem[10]=g1; gmem[11]=g2; gmem[12]=g3; gmem[13]=g4; gmem[14]=g5;
gmem[15]=g6; gmem[16]=g7; gmem[17]=g8; gmem[18]=g9; gmem[19]=g10;
last_v = time_precise();
);

@gfx 840 640
gfx_r=0.01; gfx_g=0.01; gfx_b=0.015; gfx_rect(0,0,gfx_w,gfx_h);
m_w = gfx_w / 10; v_h = gfx_h * 0.48; btn_y = v_h + 80; sld_y = btn_y + 80; pad = m_w * 0.2;
click=(mouse_cap==1 && m_latch==0); m_latch=(mouse_cap==1);
mouse_cap == 1 ? (
mouse_y < v_h ? (
idx=floor(mouse_x/m_w); idx>=0 && idx<10 ? (slider(idx+1)=max(-100, min(0, (1-mouse_y/v_h)*100-100)););
) : (
mouse_y > sld_y ? (
pct = max(0, min(1, (mouse_x - (gfx_w*0.35)) / (gfx_w*0.5)));
mouse_y < sld_y + 25 ? slider11=pct*100 : mouse_y < sld_y + 50 ? slider12=pct*1000 : mouse_y < sld_y + 75 ? slider13=pct : slider15=1 + pct*23;
);
);
);
click ? (
bw = gfx_w / 4.2;
mouse_y > btn_y && mouse_y < btn_y + 45 ? (
mouse_x > bw*0.6 && mouse_x < bw ? (
slider14 == 5 ? slider14 = 10 : slider14 == 10 ? slider14 = 20 : slider14 == 20 ? slider14 = 30 : slider14 == 30 ? slider14 = 60 : slider14 = 5;
slider_automate(slider14);
) :
mouse_x < bw*0.6 ? (learn_start=time_precise(); p1=p2=p3=p4=p5=p6=p7=p8=p9=p10=0.00001;) :
mouse_x < bw*2 ? slider17=!slider17 : mouse_x < bw*3 ? slider18=!slider18 : slider20=!slider20;
);
);
i=0; loop(10,
curr_t = slider(i+1); t_px = v_h-((curr_t+100)/100)*v_h;
f_l=(i==0?"60Hz":i==1?"150Hz":i==2?"400Hz":i==3?"800Hz":i==4?"1.5k":i==5?"3k":i==6?"5k":i==7?"8k":i==8?"12k":"16k");
gfx_r=0; gfx_g=0.7; gfx_b=0.9; gfx_a=0.8; gfx_x=i*m_w+(m_w/2)-18; gfx_y=v_h+15; gfx_drawstr(f_l);
rv=gmem[i]; gv=gmem[i+10]; h_m=((20*log10(rv+0.000001)+100)/100)*v_h; d_h=(1-gv)*h_m;
gfx_r=0.6; gfx_g=0; gfx_b=0.4; gfx_a=0.3; gfx_rect(i*m_w+pad, v_h-h_m, m_w-(pad*2), d_h);
gv < slider13+0.01?(gfx_r=0.08;gfx_g=0.08;gfx_b=0.15;gfx_a=0.4):(gfx_a=0.55; i<3?(gfx_r=0;gfx_g=0.8;gfx_b=0.9):i<6?(gfx_r=0;gfx_g=0.9;gfx_b=0.4):(gfx_r=0.8;gfx_g=0;gfx_b=0.8););
gfx_rect(i*m_w+pad, v_h-h_m+d_h, m_w-(pad*2), h_m-d_h);
gfx_a=1; gfx_r=0.6; gfx_g=0.1; gfx_b=0.1; gfx_roundrect(i*m_w+(pad/2), t_px-6, m_w-pad, 12, 2, 0);
i += 1;
);
bw = gfx_w / 4.2;
function draw_b(x,y,w,h,lbl,st) (
st?(gfx_r=0.9;gfx_g=0.1;gfx_b=0.4;):(gfx_r=0;gfx_g=0.3;gfx_b=0.3;);
gfx_roundrect(x+8,y,w-16,h,2,0); gfx_r=1; gfx_a=1; gfx_x=x+15; gfx_y=y+(h/2)-6; gfx_drawstr(lbl);
);
draw_b(0, btn_y, bw*0.6, 45, "LEARN", learn_start>0);
gfx_r=0; gfx_g=0.4; gfx_b=0.4;
gfx_roundrect(bw*0.6+5, btn_y, bw*0.4-10, 45, 2, 0);
gfx_r=1; gfx_x=bw*0.6+12; gfx_y=btn_y+16; gfx_drawstr(sprintf(#, "%ds", slider14));
draw_b(bw, btn_y, bw, 45, (slider17 ? "MODE: RMS" : "MODE: PEAK"), slider17);
draw_b(bw*2, btn_y, bw, 45, "LO-CUT", slider18);
draw_b(bw*3, btn_y, bw*1.2, 45, "LISTEN NOISE", slider20);
function draw_n(x,y,p,l,v,u) (
sw = gfx_w * 0.5; gfx_r=0; gfx_g=0.1; gfx_b=0.12; gfx_rect(x,y,sw,18);
gfx_gradrect(x,y,p*sw,18, 0,1,1,0.65, 0.001,0.003,0.005,0,0,0,0);
gfx_r=0; gfx_g=0.9; gfx_b=1; gfx_a=0.9; gfx_x=x-(gfx_w*0.18); gfx_y=y+3; gfx_drawstr(l);
gfx_x=x+sw+15; gfx_drawnumber(v,(u=="ms"?0:1)); gfx_drawstr(u);
);
sx = gfx_w * 0.35;
draw_n(sx, sld_y, slider11/100, "ATTACK", slider11, "ms");
draw_n(sx, sld_y+25, slider12/1000, "RELEASE", slider12, "ms");
draw_n(sx, sld_y+50, slider13, "FLOOR", slider13*100, "%");
draw_n(sx, sld_y+75, (slider15-1)/23, "GRADIENT", slider15, "dB");
learn_start > 0 ? (
gfx_r=0.05; gfx_g=0; gfx_b=0.05; gfx_a=0.98;
gfx_rect(gfx_w/2-140, v_h/2-60, 280, 100, 1);
gfx_r=1; gfx_g=0; gfx_b=0.5; gfx_a=1;
gfx_roundrect(gfx_w/2-140, v_h/2-60, 280, 100, 2, 0);
gfx_x=gfx_w/2-110; gfx_y=v_h/2-40; gfx_drawstr("ANALYZING ROOM...");
gfx_x=gfx_w/2-10; gfx_y=v_h/2; gfx_drawnumber(max(0, slider14-(time_precise()-learn_start)), 0);
);
151 changes: 151 additions & 0 deletions Dynamic/danmarshall_DE-Cyber-Denoise/New file 1.jsfx
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
noindex: true

desc: Cyber-Denoiser LITE (5-Band Forensic)
version: 1.0
author: Danny Marshall
changelog: Standardized streamlined dashboard with Neon Inferno palette.
Provides: cyber_denoiser_lite.jsfx
about:
# Cyber-Denoiser LITE
A high-efficiency, 5-band denoiser optimized for Forensic "Problem Zones" (Rumble, Mud, Presence, Hiss, Air).
Uses acid-neon colors to differentiate from the Pro version.

options:gmem=DenoiseLite

slider1:0<-100,0,1>-T1
slider2:0<-100,0,1>-T2
slider3:0<-100,0,1>-T3
slider4:0<-100,0,1>-T4
slider5:0<-100,0,1>-T5
slider11:5<1,100,1>-Att
slider12:0<0,1000,1>-Rel
slider13:0<0,1,0.001>-Floor
slider14:20<5,60,1>-LearnTime
slider15:6<1,24,0.5>-Gradient
slider17:0<0,1,1>-RMSMode
slider18:1<0,1,1>-LowCut
slider20:0<0,1,1>-ListenNoise

@init
i=1; loop(20, slider_show(i, 0); i+=1; );
r1=r2=r3=r4=r5=0;
g1=g2=g3=g4=g5=1;
p1=p2=p3=p4=p5=0.00001;
learn_start = -1; m_latch = 0; last_v = 0;
rms_f = 1 - exp(-1 / (0.050 * srate));

@slider
att = exp(-1 / (slider11 * srate / 1000));
rel = (slider12 == 0) ? 0 : exp(-1 / (slider12 * srate / 1000));

@sample
s0 = spl0;
slider18 ? (hp_f=40*2*$pi/srate; hp_in+=(s0-hp_in)*hp_f; s0-=hp_in;);
f = 150/srate;
lp1+=(s0-lp1)*f; b1=lp1;
lp2+=(s0-lp2)*f*4; b2=lp2-lp1;
lp3+=(s0-lp3)*f*20; b3=lp3-lp2;
lp4+=(s0-lp4)*f*53; b4=lp4-lp3;
b5=s0-lp4;
slider17 ? (
e1+=(b1*b1-e1)*rms_f; r1=sqrt(max(0,e1)); e2+=(b2*b2-e2)*rms_f; r2=sqrt(max(0,e2));
e3+=(b3*b3-e3)*rms_f; r3=sqrt(max(0,e3)); e4+=(b4*b4-e4)*rms_f; r4=sqrt(max(0,e4));
e5+=(b5*b5-e5)*rms_f; r5=sqrt(max(0,e5));
) : (
r1=r1*rel+abs(b1)*(1-rel); r2=r2*rel+abs(b2)*(1-rel); r3=r3*rel+abs(b3)*(1-rel);
r4=r4*rel+abs(b4)*(1-rel); r5=r5*rel+abs(b5)*(1-rel);
);
function calc_g(r_in, t_db, gn, f_lv) (
r_db = 20*log10(r_in+0.000001); diff = r_db - t_db;
diff >= 0 ? 1 : (diff <= -gn ? f_lv : f_lv + (1-f_lv) * ((diff + gn) / gn));
);
gn = slider15; f_v = slider13;
g1=g1*att + calc_g(r1, slider1, gn, f_v)*(1-att);
g2=g2*att + calc_g(r2, slider2, gn, f_v)*(1-att);
g3=g3*att + calc_g(r3, slider3, gn, f_v)*(1-att);
g4=g4*att + calc_g(r4, slider4, gn, f_v)*(1-att);
g5=g5*att + calc_g(r5, slider5, gn, f_v)*(1-att);
out_sum = b1*g1+b2*g2+b3*g3+b4*g4+b5*g5;
slider20 ? (spl0=spl1=(s0 - out_sum);) : (spl0=spl1=out_sum;);
learn_start > 0 ? (
elap = time_precise() - learn_start;
elap < slider14 ? (
p1=max(p1,r1); p2=max(p2,r2); p3=max(p3,r3); p4=max(p4,r4); p5=max(p5,r5);
) : (
slider1=20*log10(p1)+3; slider2=20*log10(p2)+3; slider3=20*log10(p3)+3;
slider4=20*log10(p4)+3; slider5=20*log10(p5)+3;
slider_automate(31); learn_start = -1;
);
);
(time_precise() - last_v > 0.04) ? (
gmem[0]=r1; gmem[1]=r2; gmem[2]=r3; gmem[3]=r4; gmem[4]=r5;
gmem[10]=g1; gmem[11]=g2; gmem[12]=g3; gmem[13]=g4; gmem[14]=g5;
last_v = time_precise();
);
@gfx 840 640
gfx_r=0.02; gfx_g=0.01; gfx_b=0.01; gfx_rect(0,0,gfx_w,gfx_h);
m_w = gfx_w / 5; v_h = gfx_h * 0.48; btn_y = v_h + 80; sld_y = btn_y + 80; pad = m_w * 0.25;
click=(mouse_cap==1 && m_latch==0); m_latch=(mouse_cap==1);
mouse_cap == 1 ? (
mouse_y < v_h ? (
idx=floor(mouse_x/m_w); idx>=0 && idx<5 ? (slider(idx+1)=max(-100, min(0, (1-mouse_y/v_h)*100-100)););
) : (
mouse_y > sld_y ? (
pct = max(0, min(1, (mouse_x - (gfx_w*0.35)) / (gfx_w*0.5)));
mouse_y < sld_y + 25 ? slider11=pct*100 : mouse_y < sld_y + 50 ? slider12=pct*1000 : mouse_y < sld_y + 75 ? slider13=pct : slider15=1 + pct*23;
);
);
);
click ? (
bw = gfx_w / 4.2;
mouse_y > btn_y && mouse_y < btn_y + 45 ? (
mouse_x > bw*0.6 && mouse_x < bw ? (
slider14 == 5 ? slider14 = 10 : slider14 == 10 ? slider14 = 20 : slider14 == 20 ? slider14 = 30 : slider14 == 30 ? slider14 = 60 : slider14 = 5;
slider_automate(slider14);
) :
mouse_x < bw*0.6 ? (learn_start=time_precise(); p1=p2=p3=p4=p5=0.00001;) :
mouse_x < bw*2 ? slider17=!slider17 : mouse_x < bw*3 ? slider18=!slider18 : slider20=!slider20;
);
);
i=0; loop(5,
curr_t = slider(i+1); t_px = v_h-((curr_t+100)/100)*v_h;
f_l=(i==0?"Rumble":i==1?"Mud":i==2?"Presence":i==3?"Hiss":"Air");
gfx_r=1; gfx_g=0.9; gfx_b=0.2; gfx_a=0.9; gfx_x=i*m_w+(m_w/2)-35; gfx_y=v_h+15; gfx_drawstr(f_l);
rv=gmem[i]; gv=gmem[i+10]; h_m=((20*log10(rv+0.000001)+100)/100)*v_h; d_h=(1-gv)*h_m;
gfx_r=1; gfx_g=0.2; gfx_b=0.5; gfx_a=0.4; gfx_rect(i*m_w+pad, v_h-h_m, m_w-(pad*2), d_h);
gv < slider13+0.01?(gfx_r=0.8;gfx_g=1;gfx_b=0.1;gfx_a=0.5):(gfx_a=0.6; i<2?(gfx_r=1;gfx_g=0.4;gfx_b=0.1):i<4?(gfx_r=1;gfx_g=0.1;gfx_b=0.3):(gfx_r=1;gfx_g=0.1;gfx_b=0.6););
gfx_rect(i*m_w+pad, v_h-h_m+d_h, m_w-(pad*2), h_m-d_h);
gfx_a=1; gfx_r=1; gfx_g=0.3; gfx_b=0.1; gfx_roundrect(i*m_w+(pad/2), t_px-6, m_w-pad, 12, 2, 0);
i += 1;
);
bw = gfx_w / 4.2;
function draw_b(x,y,w,h,lbl,st) (
st?(gfx_r=1;gfx_g=0.3;gfx_b=0.1;):(gfx_r=0.4;gfx_g=0.1;gfx_b=0.1;);
gfx_roundrect(x+8,y,w-16,h,2,0); gfx_r=1; gfx_a=1; gfx_x=x+15; gfx_y=y+(h/2)-6; gfx_drawstr(lbl);
);
draw_b(0, btn_y, bw*0.6, 45, "LEARN", learn_start>0);
gfx_r=0.4; gfx_g=0.1; gfx_b=0.1;
gfx_roundrect(bw*0.6+5, btn_y, bw*0.4-10, 45, 2, 0);
gfx_r=1; gfx_x=bw*0.6+12; gfx_y=btn_y+16; gfx_drawstr(sprintf(#, "%ds", slider14));
draw_b(bw, btn_y, bw, 45, (slider17 ? "MODE: RMS" : "MODE: PEAK"), slider17);
draw_b(bw*2, btn_y, bw, 45, "LO-CUT", slider18);
draw_b(bw*3, btn_y, bw*1.2, 45, "LISTEN NOISE", slider20);
function draw_n(x,y,p,l,v,u) (
sw = gfx_w * 0.5; gfx_r=0.2; gfx_g=0.1; gfx_b=0.1; gfx_rect(x,y,sw,18);
gfx_gradrect(x,y,p*sw,18, 1,0.2,0,0.7, 0.001,0.005,0.001,0,0,0,0);
gfx_r=1; gfx_g=0.9; gfx_b=0.8; gfx_a=0.9; gfx_x=x-(gfx_w*0.18); gfx_y=y+3; gfx_drawstr(l);
gfx_x=x+sw+15; gfx_drawnumber(v,(u=="ms"?0:1)); gfx_drawstr(u);
);
sx = gfx_w * 0.35;
draw_n(sx, sld_y, slider11/100, "ATTACK", slider11, "ms");
draw_n(sx, sld_y+25, slider12/1000, "RELEASE", slider12, "ms");
draw_n(sx, sld_y+50, slider13, "FLOOR", slider13*100, "%");
draw_n(sx, sld_y+75, (slider15-1)/23, "GRADIENT", slider15, "dB");
learn_start > 0 ? (
gfx_r=0.1; gfx_g=0.02; gfx_b=0.02; gfx_a=0.95;
gfx_rect(gfx_w/2-140, v_h/2-60, 280, 100, 1);
gfx_r=1; gfx_g=0.3; gfx_b=0.1; gfx_a=1;
gfx_roundrect(gfx_w/2-140, v_h/2-60, 280, 100, 2, 0);
gfx_x=gfx_w/2-110; gfx_y=v_h/2-40; gfx_drawstr("ANALYZING NOISE...");
gfx_x=gfx_w/2-15; gfx_y=v_h/2; gfx_drawnumber(max(0, slider14-(time_precise()-learn_start)), 0);
);
Loading