forked from dotmmb/mmb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcompressor.mmb~.pd
398 lines (398 loc) · 10.5 KB
/
compressor.mmb~.pd
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
#N canvas 148 228 896 521 10;
#X obj 168 107 inlet~;
#X obj 458 107 inlet;
#N canvas 784 22 560 580 level.detection 0;
#X obj 56 40 inlet~;
#X obj 56 158 peakenv~;
#X obj 203 156 *~;
#X text 215 177 running mean-square;
#X obj 56 331 *~ 1;
#X obj 203 332 *~ 0;
#X obj 77 306 == 0;
#X obj 224 305 == 1;
#X obj 96 521 outlet~;
#X obj 302 49 samplerate~;
#X obj 302 73 / 1000;
#X obj 302 122 /;
#X obj 302 21 loadbang;
#X text 222 447 convert to dB;
#X obj 56 212 *~;
#X obj 383 194 hilbert~;
#X obj 383 225 *~;
#X obj 423 225 *~;
#X obj 400 257 +~;
#X obj 400 332 *~ 0;
#X obj 421 305 == 2;
#X obj 224 270 r \$0-follower;
#X obj 96 446 expr~ 10*log10($v1);
#X obj 203 202 maverage~ 100 3;
#X msg 302 99 128 \$1;
#X connect 0 0 1 0;
#X connect 0 0 2 0;
#X connect 0 0 2 1;
#X connect 0 0 15 0;
#X connect 1 0 14 0;
#X connect 1 0 14 1;
#X connect 2 0 23 0;
#X connect 4 0 22 0;
#X connect 5 0 22 0;
#X connect 6 0 4 1;
#X connect 7 0 5 1;
#X connect 9 0 10 0;
#X connect 10 0 24 0;
#X connect 11 0 23 1;
#X connect 12 0 9 0;
#X connect 14 0 4 0;
#X connect 15 0 16 0;
#X connect 15 0 16 1;
#X connect 15 1 17 0;
#X connect 15 1 17 1;
#X connect 16 0 18 0;
#X connect 17 0 18 1;
#X connect 18 0 19 0;
#X connect 19 0 22 0;
#X connect 20 0 19 1;
#X connect 21 0 7 0;
#X connect 21 0 6 0;
#X connect 21 0 20 0;
#X connect 22 0 8 0;
#X connect 23 0 5 0;
#X connect 24 0 11 0;
#X restore 233 199 pd level.detection;
#N canvas 463 22 977 746 static.function 0;
#X obj 101 50 inlet~;
#X obj 367 206 +;
#X obj 307 205 -;
#X obj 409 98 t b b f;
#X obj 275 102 t f f;
#X obj 629 148 atan2;
#X msg 629 126 \$1 1;
#X obj 584 171 poltocar;
#X obj 550 297 s \$0-knee;
#X text 644 171 x \, y of knee/slope edge;
#X text 688 207 next point along slope;
#X text 688 217 to get interpolation right;
#X text 286 204 x0;
#X text 394 206 x1;
#X obj 584 147 f;
#X obj 584 98 t b f;
#X text 672 147 angle of slope;
#X obj 550 246 pack f f;
#X obj 550 209 expr 2*$f1*$f2 + $f3 \; $f3;
#X msg 550 270 2 \$2 \$1;
#X obj 603 329 table \$0-knee 4;
#X text 700 328 table used for calculating knee;
#X text 610 298 first and second point are always 0;
#X obj 275 77 r \$0-threshold;
#X obj 409 73 r \$0-knee.radius;
#X obj 557 75 t b f;
#X obj 557 53 r \$0-slope;
#X obj 241 424 r \$0-threshold;
#X obj 178 401 r \$0-slope;
#X obj 525 366 expr $f1 \; $f2-$f1;
#X obj 386 412 expr~ ($v2==1) * (($v1-$f3)/$f4 + 1);
#X obj 52 447 expr~ ($v2==2) * ($f3*($v1-$f4));
#X obj 386 443 tabread4~ \$0-knee;
#X text 497 442 use tabread4's interpolation to generate knee curve
;
#X obj 246 594 outlet~;
#X text 256 285 0 = no compression;
#X text 256 300 1 = in knee range;
#X text 256 315 2 = above knee range;
#X obj 436 234 s \$0-x1;
#X obj 207 232 s \$0-x0;
#X text 215 203 knee range;
#X obj 101 295 expr~ $v1 \; ($v1>=$f2) + ($v1>=$f3);
#X connect 0 0 41 0;
#X connect 1 0 29 1;
#X connect 1 0 38 0;
#X connect 1 0 41 2;
#X connect 2 0 29 0;
#X connect 2 0 39 0;
#X connect 2 0 41 1;
#X connect 3 0 2 0;
#X connect 3 1 1 0;
#X connect 3 2 2 1;
#X connect 3 2 14 0;
#X connect 4 0 2 0;
#X connect 4 1 1 0;
#X connect 5 0 7 1;
#X connect 6 0 5 0;
#X connect 7 0 1 1;
#X connect 7 0 18 0;
#X connect 7 1 18 2;
#X connect 14 0 7 0;
#X connect 15 0 14 0;
#X connect 15 1 6 0;
#X connect 15 1 18 1;
#X connect 17 0 19 0;
#X connect 18 0 17 0;
#X connect 18 1 17 1;
#X connect 19 0 8 0;
#X connect 23 0 4 0;
#X connect 24 0 3 0;
#X connect 25 0 1 0;
#X connect 25 1 15 0;
#X connect 26 0 25 0;
#X connect 27 0 31 3;
#X connect 28 0 31 2;
#X connect 29 0 30 2;
#X connect 29 1 30 3;
#X connect 30 0 32 0;
#X connect 31 0 34 0;
#X connect 32 0 34 0;
#X connect 41 0 31 0;
#X connect 41 0 30 0;
#X connect 41 1 31 1;
#X connect 41 1 30 1;
#X restore 233 251 pd static.function;
#N canvas 77 22 942 771 draw.transfer.function 0;
#X obj 61 108 until;
#X obj 61 79 t f b;
#X msg 61 53 200;
#X obj 61 157 f 0;
#X obj 86 157 + 1;
#X msg 77 135 0;
#X obj 102 467 spigot;
#X obj 61 198 - 199;
#X obj 415 473 spigot;
#X obj 243 307 t f f;
#X obj 243 343 >= 0;
#X obj 243 391 +;
#X obj 135 442 == 0;
#X obj 448 448 == 1;
#X obj 197 471 spigot;
#X obj 230 446 == 2;
#X obj 283 343 >= 0;
#X obj 61 225 / 4;
#X obj 61 177 trigger f f;
#X obj 302 505 r \$0-threshold;
#X obj 197 529 expr $f2*($f1-$f3);
#X msg 102 536 0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array \$0-transfer.function 200 float 3;
#A 0 0 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 39.0455 39.0909 39.1364
39.1818 39.2273 39.2727 39.3182 39.3636 39.4091 39.4545 39.5 39.5455
39.5909 39.6364 39.6818 39.7273 39.7727 39.8182 39.8636 39.9091 39.9545
40 40.0455 40.0909 40.1364 40.1818 40.2273 40.2727 40.3182 40.3636
40.4091 40.4545 40.5 40.5455 40.5909 40.6364 40.6818 40.7273 40.7727
40.8182 40.8636 40.9091 40.9545 41 41.0455 41.0909 41.1364 41.1818
41.2273 41.2727 41.3182 41.3636 41.4091 41.4545 41.5 41.5455 41.5909
41.6364 41.6818 41.7273 41.7727 41.8182 41.8636 41.9091 41.9545 42
42.0455 42.0909 42.1364 42.1818 42.2273 42.2727 42.3182 42.3636 42.4091
42.4545 42.5 42.5455 42.5909 42.6364 42.6818 42.7273 42.7727 42.8182
42.8636 42.9091 42.9545 43 43.0455 43.0909 43.1364 43.1818 43.2273
43.2727 43.3182 43.3636 43.4091 43.4545 43.5 43.5455 43.5909 43.6364
43.6818 43.7273 43.7727 43.8182 43.8636 43.9091 43.9545 44 44.0455
44.0909 44.1364 44.1818 44.2273 44.2727 44.3182 44.3636 44.4091 44.4545
44.5 44.5455 44.5909 44.6364 44.6818 44.7273 44.7727 44.8182 44.8636
44.9091 44.9545 45 45.0455 45.0909 45.1364 45.1818 45.2273 45.2727
45.3182 45.3636 45.4091 45.4545 45.5 45.5455 45.5909 45.6364 45.6818
45.7273 45.7727 45.8182 45.8636 45.9091 45.9545 46 46.0455 46.0909
46.1364 46.1818 46.2273 46.2727;
#X coords 0 199 199 0 200 200 1;
#X restore 678 367 graph;
#X obj 61 248 t f f f;
#X obj 61 655 +;
#X obj 61 681 * 4;
#X obj 61 704 + 199;
#X obj 61 731 tabwrite \$0-transfer.function;
#X obj 249 482 r \$0-slope;
#X obj 492 448 swap;
#X obj 497 474 -;
#X obj 415 500 -;
#X obj 415 532 /;
#X obj 415 557 + 1;
#X obj 415 584 tabread4 \$0-knee;
#X obj 114 204 s \$0-tf.index;
#X obj 232 706 r \$0-tf.index;
#X obj 541 179 r \$0-x1;
#X obj 481 179 r \$0-x0;
#X obj 61 23 r \$0-draw.it;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 5 0;
#X connect 2 0 1 0;
#X connect 3 0 4 0;
#X connect 3 0 18 0;
#X connect 4 0 3 1;
#X connect 5 0 3 1;
#X connect 6 0 21 0;
#X connect 7 0 17 0;
#X connect 8 0 31 0;
#X connect 9 0 10 0;
#X connect 9 1 16 0;
#X connect 10 0 11 0;
#X connect 11 0 15 0;
#X connect 11 0 13 0;
#X connect 11 0 12 0;
#X connect 12 0 6 1;
#X connect 13 0 8 1;
#X connect 14 0 20 0;
#X connect 15 0 14 1;
#X connect 16 0 11 1;
#X connect 17 0 23 0;
#X connect 18 0 7 0;
#X connect 18 1 35 0;
#X connect 19 0 20 2;
#X connect 20 0 24 1;
#X connect 21 0 24 1;
#X connect 23 0 24 0;
#X connect 23 1 8 0;
#X connect 23 1 14 0;
#X connect 23 1 6 0;
#X connect 23 2 9 0;
#X connect 24 0 25 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 28 0 20 1;
#X connect 29 0 30 0;
#X connect 29 1 30 1;
#X connect 30 0 32 1;
#X connect 31 0 32 0;
#X connect 32 0 33 0;
#X connect 33 0 34 0;
#X connect 34 0 24 1;
#X connect 36 0 27 1;
#X connect 37 0 29 1;
#X connect 37 0 16 1;
#X connect 38 0 29 0;
#X connect 38 0 31 1;
#X connect 38 0 10 1;
#X connect 39 0 2 0;
#X restore 679 170 pd draw.transfer.function;
#N canvas 630 22 601 549 attack.release 0;
#X obj 84 59 inlet~;
#X obj 84 114 expr~ pow(10. \, ($v1/20));
#X text 239 115 dB to amp;
#X obj 84 260 rampsmooth~ 0 0;
#X msg 138 196 rampup \$1;
#X msg 225 214 rampdown \$1;
#X obj 84 301 outlet~;
#X obj 139 168 r \$0-release;
#X obj 225 186 r \$0-attack;
#X text 148 355 It might be worth seeing if you can build a linear
[rampsmooth~] using [rpole~] or something so that the ramping can be
done in the logarithmic domain;
#X connect 0 0 1 0;
#X connect 1 0 3 0;
#X connect 3 0 6 0;
#X connect 4 0 3 0;
#X connect 5 0 3 0;
#X connect 7 0 4 0;
#X connect 8 0 5 0;
#X restore 233 299 pd attack.release;
#N canvas 369 22 843 604 params 0;
#X obj 136 308 expr -1*(1-1/$f1);
#X obj 136 334 s \$0-slope;
#X obj 187 280 s \$0-knee.radius;
#X obj 67 283 s \$0-threshold;
#X obj 78 36 inlet;
#X obj 231 392 * 44.1;
#X obj 415 313 samplerate~;
#X obj 414 339 / 1000;
#X obj 310 391 * 44.1;
#X obj 228 423 s \$0-attack;
#X obj 313 424 s \$0-release;
#X obj 398 38 loadbang;
#X obj 397 62 t b b;
#X obj 47 206 clip -100 10;
#X obj 133 206 max 1;
#X obj 181 206 max 0;
#X obj 230 205 max 0;
#X obj 292 206 max 0;
#X obj 346 211 s \$0-lookahead;
#X obj 374 173 s \$0-follower;
#X obj 78 132 route threshold ratio knee attack release lookahead follower
;
#X msg 91 93 threshold 0 \, ratio 1 \, knee 0 \, attack 0 \, release
0 \, follow 0 \, lookahead 0;
#X connect 0 0 1 0;
#X connect 4 0 20 0;
#X connect 5 0 9 0;
#X connect 6 0 7 0;
#X connect 7 0 5 1;
#X connect 7 0 8 1;
#X connect 8 0 10 0;
#X connect 11 0 12 0;
#X connect 12 0 21 0;
#X connect 12 1 6 0;
#X connect 13 0 3 0;
#X connect 14 0 0 0;
#X connect 15 0 2 0;
#X connect 16 0 5 0;
#X connect 17 0 8 0;
#X connect 20 0 13 0;
#X connect 20 1 14 0;
#X connect 20 2 15 0;
#X connect 20 3 16 0;
#X connect 20 4 17 0;
#X connect 20 5 18 0;
#X connect 20 6 19 0;
#X connect 21 0 20 0;
#X restore 458 146 pd params;
#N canvas 45 357 474 401 delay 0;
#X obj 117 67 inlet~;
#N canvas 0 22 450 300 delaywriter 0;
#X obj 68 62 inlet~;
#X obj 68 122 delwrite~ \$0-lookahead 10;
#X obj 77 227 outlet~;
#X connect 0 0 1 0;
#X restore 168 131 pd delaywriter;
#N canvas 0 22 450 300 delayreader 0;
#X obj 56 59 inlet~;
#X obj 60 196 delread~ \$0-lookahead 1.4;
#X obj 156 69 samplerate~;
#X obj 155 153 /;
#X obj 156 45 loadbang;
#X obj 60 241 outlet~;
#X obj 155 100 / 1000;
#X msg 233 42 bang;
#X msg 155 127 128 \$1;
#X connect 1 0 5 0;
#X connect 2 0 6 0;
#X connect 3 0 1 0;
#X connect 4 0 2 0;
#X connect 6 0 8 0;
#X connect 7 0 2 0;
#X connect 8 0 3 0;
#X restore 168 167 pd delayreader;
#X obj 260 194 r \$0-lookahead;
#X obj 114 266 *~ 1;
#X obj 164 266 *~ 0;
#X obj 135 241 == 0;
#X obj 134 314 outlet~;
#X obj 185 241 != 0;
#X connect 0 0 1 0;
#X connect 0 0 4 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 3 0 6 0;
#X connect 3 0 8 0;
#X connect 4 0 7 0;
#X connect 5 0 7 0;
#X connect 6 0 4 1;
#X connect 8 0 5 1;
#X restore 133 232 pd delay;
#X obj 156 353 *~;
#X obj 209 445 outlet~;
#X text 677 423 .mmb;
#X obj 285 72 loadbang;
#X msg 284 97 1;
#X obj 283 119 dbtorms;
#X obj 233 169 expr~ if($v1==0 \, $f2 \, $v1);
#X obj 269 445 outlet~;
#X connect 0 0 7 0;
#X connect 0 0 14 0;
#X connect 1 0 6 0;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 5 0 8 1;
#X connect 5 0 15 0;
#X connect 7 0 8 0;
#X connect 8 0 9 0;
#X connect 11 0 12 0;
#X connect 12 0 13 0;
#X connect 13 0 14 1;
#X connect 14 0 2 0;