Envelope Detector 3

Download

     Disclaimer...

27   desc:Envelope Detector 3, v1.0.0
28  
29   slider1:0<0,1,1{OFF,ON}>HP
30   slider2:100<200,10000,1>Frequency
31   slider14:100<3,1571,1>Attack
32   slider15:100<3,1571,1>Release
33  
34  
35   @init
36   x = 0;
37   x1 = 0;
38   x2 = 0;
39   y = 0;
40   y1 = 0;
41   y2 = 0;
42   d = sqrt(2);
43  
44  
45   @slider
46   att = 1 - pow(10, -301030.1 / (slider14*srate));
47   rel = 1 - pow(10, -301.0301 / (slider15*srate));
48  
49   slider1 == 1 ? (
50   slider2 > 199 ? (
51   w = 2.0 * $pi * slider2 / srate;
52   beta = 0.5 * (( 1.0 - d / 2.0 * sin(w) ) / ( 1.0 + d / 2.0 * sin(w) ));
53   gamma = ( 0.5 + beta ) * cos(w);
54   alpha = ( 0.5 + beta - gamma ) / 4.0;
55   );
56   );
57  
58   @sample
59   e = env;
60   re = ( 1 - rel );
61   at = att;
62  
63   a = spl0;
64   b = spl1;
65  
66   a < 0 ? i = -a : i = a;
67   b < 0 ? j = -b : j = b;
68   j > i ? i = j : i = i; // find max
69  
70   i > e ? e = e + at * (i - e) : e = e * re; // envelope
71  
72   slider1 == 1 ? (
73   x = e*2 - 1;
74   y = 2.0 * ( alpha * ( x + 2.0 * x1 + x2 ) + gamma * y1 - beta * y2 );
75   x2 = x1;
76   x1 = x;
77   y2 = y1;
78   y1 = y;
79   e = (y + 1) / 2;
80   );
81  
82   gDB = abs(20 * log10(e));
83  
84   e < 0.00000000001 ? env = 0 : env = e;
85  
86   spl0 = e;
87   spl1 = e;
88  

     Graphics...

90   @gfx 100 70
91   gfx_x=gfx_y=5;
92   gfx_r=0.7;
93   gfx_g=1;
94   gfx_b=0.1;
95   gfx_a=1;
96   gfx_drawchar($'E');
97   gfx_drawchar($'N');
98   gfx_drawchar($'V');
99   gfx_drawchar($' ');
100   gfx_drawchar($'3');
101   gfx_drawchar($':');
102   gfx_drawchar($' ');
103   gfx_drawchar($'-');
104   gfx_drawnumber(gDB,1);
105  
106   gfx_x=gfx_y=25;
107   gfx_rect(5, 25, gDB*10, 25);

Download