aboutsummaryrefslogtreecommitdiff
path: root/s-autocompressor~.pd
blob: 64c3162403fb2090ac5841afa1f69037f77b9ae6 (plain)
1
2
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#N canvas 255 105 459 100 10;
#X obj 5 41 nbx 5 14 0 127 0 1 \$0/squelch \$1/squelch squelch 0 -8
0 8 -260818 -1 -1 1 256;
#N canvas 177 92 646 523 fft-analysis 0;
#X obj 115 409 *~;
#X obj 75 409 *~;
#X obj 76 114 *~;
#X obj 77 88 inlet~;
#X obj 76 137 rfft~;
#X obj 75 466 *~;
#X obj 171 177 *~;
#X obj 75 432 rifft~;
#X obj 75 504 outlet~;
#X obj 137 177 *~;
#X obj 137 200 +~;
#X obj 461 85 block~ 1024 4;
#X obj 137 351 clip~;
#X obj 110 114 tabreceive~ \$0-hann;
#X obj 177 329 expr 0.01*$f1*$f1;
#X obj 137 381 *~ 0.00065;
#X obj 137 225 +~ 1e-20;
#X obj 136 262 q8_rsqrt~;
#X obj 109 466 tabreceive~ \$0-hann;
#X text 211 174 squared magnitude;
#X text 219 225 protect against divide-by-zero;
#X text 223 261 quick 8-bit-accurate reciprocal square root;
#X text 222 277 (done by table lookup - about 0.25% accurate);
#X text 193 351 limit the gain to squelch*squelch/100;
#X text 238 381 normalize for 1024-point \, overlap-4 Hann;
#X text 151 409 multiply gain by real and complex part;
#X text 152 429 of the amplitude;
#X text 130 137 outputs complex amplitudes;
#X text 31 5 This is Miller's compressor. Any mistakes are my own.
;
#X obj 177 306 r \$0/squelch;
#X msg 461 129 \; window-size 1024 \;;
#X obj 461 107 loadbang;
#X obj 75 485 *~ 32;
#X connect 0 0 7 1;
#X connect 1 0 7 0;
#X connect 2 0 4 0;
#X connect 3 0 2 0;
#X connect 4 0 9 0;
#X connect 4 0 9 1;
#X connect 4 0 1 0;
#X connect 4 1 6 0;
#X connect 4 1 6 1;
#X connect 4 1 0 0;
#X connect 5 0 32 0;
#X connect 6 0 10 1;
#X connect 7 0 5 0;
#X connect 9 0 10 0;
#X connect 10 0 16 0;
#X connect 12 0 15 0;
#X connect 13 0 2 1;
#X connect 14 0 12 2;
#X connect 15 0 0 1;
#X connect 15 0 1 1;
#X connect 16 0 17 0;
#X connect 17 0 12 0;
#X connect 18 0 5 1;
#X connect 29 0 14 0;
#X connect 31 0 30 0;
#X connect 32 0 8 0;
#X restore 92 22 pd fft-analysis;
#N canvas 0 110 565 454 hann-window 0;
#N canvas 0 0 450 300 (subpatch) 0;
#X array \$0-hann 1024 float 0;
#X coords 0 1 1023 0 300 100 1;
#X restore 82 311 graph;
#X obj 378 165 osc~;
#X obj 378 190 *~ -0.5;
#X obj 378 214 +~ 0.5;
#X obj 331 247 tabwrite~ \$0-hann;
#X obj 37 88 r window-size;
#X obj 38 173 /;
#X obj 127 142 samplerate~;
#X obj 38 251 s window-sec;
#X obj 177 204 swap;
#X obj 177 228 /;
#X obj 177 252 s window-hz;
#X obj 49 201 * 1000;
#X obj 49 228 s window-msec;
#X obj 38 115 t f b f;
#X msg 173 92 resize \$1;
#X obj 173 116 s \$0-hann;
#X obj 330 105 r window-hz;
#X msg 382 130 0;
#X obj 330 131 t f b;
#X text 15 8 calculate Hann window table (variable window size) and
constants window-hz (fundamental frequency of analysis) \, window-sec
and window-msec (analysis window size in seconds and msec).;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 5 0 14 0;
#X connect 6 0 8 0;
#X connect 6 0 12 0;
#X connect 7 0 6 1;
#X connect 7 0 9 1;
#X connect 9 0 10 0;
#X connect 9 1 10 1;
#X connect 10 0 11 0;
#X connect 12 0 13 0;
#X connect 14 0 6 0;
#X connect 14 0 9 0;
#X connect 14 1 7 0;
#X connect 14 2 15 0;
#X connect 15 0 16 0;
#X connect 17 0 19 0;
#X connect 18 0 1 1;
#X connect 19 0 1 0;
#X connect 19 1 4 0;
#X connect 19 1 18 0;
#X restore 335 44 pd hann-window;
#X obj 92 1 inlet~;
#X obj 92 43 outlet~;
#X obj 209 22 sssad/auto \$0/squelch \$1/squelch;
#X connect 1 0 4 0;
#X connect 3 0 1 0;
#X coords 0 -1 1 1 85 60 1 0 0;