-
Notifications
You must be signed in to change notification settings - Fork 0
/
MobileDenoiser.pd
executable file
·559 lines (559 loc) · 17.4 KB
/
MobileDenoiser.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
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
#N canvas 0 23 1280 697 10;
#X text 637 -72 -- RTAP FINAL PROJECT: MOBILE DENOISER --;
#X obj 86 22 receive fromGUI;
#X obj 86 48 list trim;
#X obj 41 55 print;
#X obj 39 177 s recordMASK;
#X floatatom 166 108 5 0 0 0 - - -;
#X floatatom 421 109 5 0 0 0 - - -;
#X obj 421 177 s MASKslider;
#X floatatom 499 115 5 0 0 0 - - -;
#X obj 499 177 s VOLUMEslider;
#X text 120 -11 -- Receive Parameters from Graphical User Interface
--;
#N canvas 0 22 450 278 (subpatch) 0;
#X array soundwave 300 float 1;
#A 0 0.000409479 0.00114041 0.00213426 0.00280067 0.00283589 0.00225797
0.00168245 0.00143234 0.00163763 0.00189533 0.00172047 0.00123888 0.000542105
-0.000128736 -0.000547757 -0.000683972 -0.000504842 -0.000225975 -0.000242387
-0.000437897 -0.000526406 -0.000394156 9.62232e-05 0.000745767 0.00119746
0.00133119 0.00136308 0.00137901 0.00151383 0.00168321 0.00140923 0.000763356
5.82077e-05 -0.000351401 -0.000199677 0.000322169 0.000624138 0.000364682
-6.8792e-05 -0.000383018 -0.000411897 -0.000145149 -0.00014838 -0.000485647
-0.000966069 -0.00142693 -0.00143242 -0.00113103 -0.000896121 -0.000801736
-0.000790712 -0.000597096 -4.04701e-05 0.000755249 0.00151846 0.00180302
0.00158638 0.00144277 0.001664 0.00202909 0.00230276 0.00232274 0.0019386
0.00137533 0.00105817 0.00104088 0.00123015 0.00122981 0.000500174
-0.000524597 -0.00132693 -0.00172044 -0.00155591 -0.00105976 -0.000631536
-0.000566377 -0.00062555 -0.000480967 -8.6466e-05 0.000553065 0.00121982
0.00145127 0.00135704 0.00117667 0.00101904 0.00124319 0.0017481 0.00244301
0.00313337 0.00354625 0.00383388 0.00392867 0.00391027 0.0040092 0.00408087
0.00404973 0.00390606 0.00359846 0.00315367 0.00254019 0.0017484 0.000955989
0.000352213 -5.24156e-05 -7.02403e-05 8.47305e-06 -0.000133977 -0.000333761
-0.000741385 -0.000896892 -0.000744176 -0.000499771 -3.07781e-05 0.000491148
0.000980388 0.00123518 0.00141797 0.00156465 0.00184348 0.00221863
0.00241734 0.00261821 0.00276557 0.00288487 0.00292179 0.00300066 0.00317572
0.00326122 0.00309949 0.00285669 0.00261599 0.00212655 0.00166186 0.00115399
0.000549706 5.85474e-05 -0.000276015 -0.000384041 -0.000590327 -0.00120074
-0.00190633 -0.00236893 -0.00245792 -0.00211526 -0.00160674 -0.00126749
-0.00118554 -0.000971902 -0.000309965 0.000723649 0.00181267 0.00260569
0.00283342 0.00240719 0.00189284 0.00169331 0.00198721 0.00248529 0.00246017
0.00188373 0.000836198 -8.50964e-05 -0.000455425 -0.000590373 -0.000759864
-0.00130835 -0.00218387 -0.00312 -0.00366747 -0.0037641 -0.00368323
-0.00342495 -0.00326229 -0.00327089 -0.0030443 -0.00233815 -0.00128158
-0.000333639 0.000173344 0.000310904 0.000340099 0.000673184 0.00130583
0.00198752 0.00256166 0.00290469 0.00292656 0.00251567 0.00201051 0.00139654
0.000617704 2.34713e-05 -0.000599727 -0.00116314 -0.00156867 -0.00209999
-0.00253741 -0.00275694 -0.00288704 -0.0028861 -0.00264202 -0.00229031
-0.00210779 -0.00208146 -0.00205784 -0.00194951 -0.00186793 -0.00164382
-0.00116823 -0.00046962 0.000419441 0.00107963 0.00148068 0.00152993
0.0014497 0.001707 0.00214072 0.00251384 0.00263125 0.00236874 0.00179455
0.00118262 0.000554331 3.13024e-05 -0.000389159 -0.000886881 -0.00137279
-0.00178767 -0.00201388 -0.0021236 -0.00217928 -0.00223021 -0.00213852
-0.00180865 -0.00125952 -0.000723056 -0.000511781 -0.000430247 -0.000469749
-0.000415338 -0.000251224 -0.000106517 -9.77647e-05 -0.000209679 -5.30879e-05
0.000353981 0.00106701 0.0016906 0.00193389 0.00201377 0.00202924 0.00222057
0.00254476 0.00269631 0.00242808 0.00159818 0.000468386 -0.000363623
-0.000822648 -0.00100343 -0.00127096 -0.00200834 -0.002926 -0.00366159
-0.00385735 -0.00370432 -0.00340875 -0.00298436 -0.00261344 -0.00219785
-0.00158683 -0.00103602 -0.000714862 -0.000438395 -0.000112473 0.00044678
0.00107469 0.00158645 0.00171422 0.00142714 0.00115036 0.00090808 0.000945905
0.00123279 0.0013522 0.000947631 -1.28412e-05 -0.000982966 -0.00162015
-0.00183644 -0.00176506 -0.00183963 -0.00226171 -0.0029288 -0.00365308
-0.00413048 -0.00429135 -0.00419042 -0.00409581 -0.00424202;
#X coords 0 1 299 -1 200 140 1 0 0;
#X restore 682 40 graph;
#X obj 683 204 metro 100;
#X obj 743 204 adc~;
#X msg 1007 209 stop, f 5;
#N canvas 0 22 450 278 (subpatch) 0;
#X array recorded_sound 999999 float 2;
#X coords 0 1 999999 -1 200 140 1 0 0;
#X restore 905 42 graph;
#X text 908 7 SOUNDWAVE OF THE RECORDING;
#X obj 683 184 loadbang;
#X obj 684 222 tabwrite~ soundwave;
#X floatatom 86 107 5 0 0 0 - - -;
#X obj 166 134 sel 0 1;
#X obj 166 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 185 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 118 177 s startREC;
#X obj 185 177 s stopREC;
#X obj 86 156 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 904 192 r startREC;
#X obj 1007 191 r stopREC;
#X obj 934 245 tabwrite~ recorded_sound;
#X obj 1006 227 adc~;
#X text 1037 228 Audio input;
#X obj 124 307 timer;
#X floatatom 124 327 5 0 0 0 - - -;
#X obj 175 397 s recTime;
#X obj 87 292 r startREC;
#X obj 151 292 r stopREC;
#X msg 163 348 1000;
#X obj 124 362 /;
#X floatatom 124 384 5 0 0 0 - - -;
#X obj 163 329 r stopREC;
#X msg 905 268 \; recorded_sound const 0;
#X text 1049 268 Clear buffer;
#X text 1049 282 before recording;
#X obj 124 450 *;
#X obj 151 436 samplerate~;
#X obj 169 494 s filesize;
#X floatatom 151 457 5 0 0 0 - - -;
#X floatatom 124 481 5 0 0 0 - - -;
#X text 173 380 Send duration of recording in seconds;
#X text 168 476 Send size of recording in samples;
#X floatatom 269 108 5 0 0 0 - - -;
#X obj 269 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 288 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 246 177 s play;
#X obj 269 134 sel 1 0;
#X msg 685 477 \; make-mask 2000;
#X obj 1312 7 r play;
#X obj 685 456 r recordMASK;
#X obj 1316 333 dac~;
#X obj 1312 65 tabplay~ recorded_sound;
#X obj 288 177 s stop;
#X obj 1361 8 r stop;
#X msg 1361 32 stop;
#X obj 1327 177 s~ rawRecording;
#X obj 1316 266 *~;
#X obj 86 79 route /MASKtoggle /RECtoggle /PLAYtoggle /DENOISERtoggle
/MASKslider /VOLUMEslider;
#X floatatom 355 108 5 0 0 0 - - -;
#X obj 355 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 374 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 355 134 sel 1 0;
#X obj 331 177 s D_on;
#X obj 373 177 s D_off;
#X obj 1389 98 r D_off;
#X obj 1441 99 r D_on;
#X obj 1326 136 *~;
#X msg 1389 121 0;
#X msg 1441 121 1;
#N canvas 699 141 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 1375 446 pd hann-window;
#X text 1259 392 -- APPLY DENOISING to rawRecording --;
#N canvas 50 22 648 669 fft-analysis 0;
#X obj 35 589 *~;
#X obj 143 305 *~;
#X obj 158 150 *~;
#X obj 35 72 *~;
#X obj 76 527 *~;
#X obj 35 44 inlet~;
#X obj 35 528 *~;
#X obj 34 101 rfft~;
#X obj 35 558 rifft~;
#X obj 36 616 outlet~;
#X obj 119 149 *~;
#X obj 119 176 +~;
#X obj 165 278 r mask-level;
#X obj 100 422 /~;
#X obj 355 23 block~ 1024 4;
#X text 176 446 is signal power and "m" is mask.;
#X obj 131 332 -~;
#X obj 131 355 max~ 0;
#X obj 99 448 q8_sqrt~;
#X text 175 464 (zero if s < m).;
#X obj 76 72 tabreceive~ \$0-hann;
#X obj 69 590 tabreceive~ \$0-hann;
#X text 91 98 real Fourier transform;
#X obj 357 57 loadbang;
#X msg 357 80 \; pd dsp 1 \; window-size 1024;
#X text 193 355 ... but not less than zero;
#X text 101 561 real inverse Fourier transform;
#X text 196 498 normalize by 2/(3N) where N is window size;
#X text 168 332 current power ("s") minus level-adjusted mask ("m")
;
#X text 156 175 compute power (call it "s") in each channel;
#X obj 123 395 +~ 1e-20;
#X text 203 395 protect against division by zero;
#X text 179 426 compute sqrt((s-m)/s) where "s";
#X text 296 204 <- subwindow calculates noise mask;
#X obj 98 499 /~ 1536;
#X obj 144 256 tabreceive~ current-mask;
#X connect 0 0 9 0;
#X connect 1 0 16 1;
#X connect 2 0 11 1;
#X connect 3 0 7 0;
#X connect 4 0 8 1;
#X connect 5 0 3 0;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 7 0 10 0;
#X connect 7 0 10 1;
#X connect 7 1 4 0;
#X connect 7 1 2 0;
#X connect 7 1 2 1;
#X connect 8 0 0 0;
#X connect 10 0 11 0;
#X connect 11 0 16 0;
#X connect 11 0 30 0;
#X connect 12 0 1 1;
#X connect 13 0 18 0;
#X connect 16 0 17 0;
#X connect 17 0 13 0;
#X connect 18 0 34 0;
#X connect 20 0 3 1;
#X connect 21 0 0 1;
#X connect 23 0 24 0;
#X connect 30 0 13 1;
#X connect 34 0 6 1;
#X connect 34 0 4 1;
#X connect 35 0 1 0;
#X restore 1312 469 pd fft-analysis;
#X obj 1312 447 hip~ 5;
#X text 843 -17 -- Create recording --;
#X floatatom 1018 479 0 0 1000 0 - - -;
#X obj 1018 498 s mask-level;
#X obj 1018 429 r MASKslider;
#X text 1075 447 MASK max level;
#X obj 1018 460 *;
#X msg 1042 446 25;
#X obj 1333 99 loadbang;
#X obj 1381 227 r D_off;
#X obj 1433 228 r D_on;
#X obj 1325 228 loadbang;
#X msg 1381 250 1;
#X msg 1433 250 0;
#X obj 1312 419 r~ rawRecording;
#X obj 800 436 adc~;
#X obj 800 462 hip~ 5;
#N canvas 50 22 648 669 fft-analysis_mask 0;
#X obj 35 589 *~;
#X obj 143 305 *~;
#X obj 158 150 *~;
#X obj 35 72 *~;
#X obj 76 527 *~;
#X obj 35 44 inlet~;
#X obj 35 528 *~;
#X obj 34 101 rfft~;
#X obj 35 558 rifft~;
#X obj 119 149 *~;
#X obj 119 176 +~;
#X obj 165 278 r mask-level;
#X obj 100 422 /~;
#X obj 355 23 block~ 1024 4;
#X text 176 446 is signal power and "m" is mask.;
#X obj 131 332 -~;
#X obj 131 355 max~ 0;
#X obj 99 448 q8_sqrt~;
#X text 175 464 (zero if s < m).;
#X obj 76 72 tabreceive~ \$0-hann;
#X obj 69 590 tabreceive~ \$0-hann;
#N canvas 30 22 747 515 calculate-mask 0;
#X obj 125 379 inlet~;
#X msg 371 283 0;
#X msg 371 166 0;
#X obj 240 196 float;
#X obj 294 200 + 1;
#X obj 240 144 bang~;
#X obj 240 169 spigot;
#X floatatom 411 218 0 0 0 0 - - -;
#X obj 315 408 -~;
#X obj 371 258 sel 0;
#X obj 327 443 *~;
#X obj 293 443 +~;
#X floatatom 351 313 0 0 0 0 - - -;
#X obj 240 219 t f f;
#X obj 370 113 r make-mask;
#X obj 371 141 t b f;
#X obj 411 165 /;
#X text 483 212 number of;
#X text 491 227 frames;
#X floatatom 481 166 0 0 0 0 - - -;
#X obj 480 113 r window-msec;
#X obj 481 136 / 4;
#X text 521 133 hop size (analysis;
#X text 546 149 period) in msec;
#X obj 371 218 <;
#X obj 235 258 expr 1/($f1+1);
#X text 134 17 calculate a mask using N msec of background noise;
#X text 43 354 current power (for each channel);
#X text 367 430 average the current power into the last mask to get
the new mask. The new value is weighted 1/n on the nth iteration.;
#X text 390 312 weight to average in new power to mask;
#X text 11 203 loop counting to desired;
#X text 78 219 number of frames;
#X text 72 39 This loops for "make-mask" milliseconds \, averaging
power in each channel over that amount of time. This is done by a moving
average whose weight is adjusted to average each new value equally
with each of the accumulating ones.;
#X floatatom 327 142 5 0 0 0 - - -;
#X obj 292 468 tabsend~ current-mask;
#X obj 359 408 tabreceive~ current-mask;
#X connect 0 0 8 0;
#X connect 1 0 12 0;
#X connect 2 0 3 1;
#X connect 2 0 24 0;
#X connect 3 0 13 0;
#X connect 3 0 4 0;
#X connect 4 0 3 1;
#X connect 5 0 6 0;
#X connect 6 0 3 0;
#X connect 7 0 24 1;
#X connect 8 0 10 0;
#X connect 9 0 1 0;
#X connect 10 0 11 1;
#X connect 11 0 34 0;
#X connect 12 0 10 1;
#X connect 13 0 24 0;
#X connect 13 1 25 0;
#X connect 14 0 15 0;
#X connect 14 0 33 0;
#X connect 15 0 2 0;
#X connect 15 1 16 0;
#X connect 16 0 7 0;
#X connect 20 0 21 0;
#X connect 21 0 16 1;
#X connect 21 0 19 0;
#X connect 24 0 6 1;
#X connect 24 0 9 0;
#X connect 25 0 12 0;
#X connect 35 0 8 1;
#X connect 35 0 11 0;
#X restore 132 203 pd calculate-mask;
#X text 91 98 real Fourier transform;
#X obj 357 57 loadbang;
#X msg 357 80 \; pd dsp 1 \; window-size 1024;
#X text 193 355 ... but not less than zero;
#X text 101 561 real inverse Fourier transform;
#X text 196 498 normalize by 2/(3N) where N is window size;
#X text 168 332 current power ("s") minus level-adjusted mask ("m")
;
#X text 156 175 compute power (call it "s") in each channel;
#X obj 123 395 +~ 1e-20;
#X text 203 395 protect against division by zero;
#X text 179 426 compute sqrt((s-m)/s) where "s";
#X text 296 204 <- subwindow calculates noise mask;
#X obj 98 499 /~ 1536;
#X obj 144 256 tabreceive~ current-mask;
#X connect 1 0 15 1;
#X connect 2 0 10 1;
#X connect 3 0 7 0;
#X connect 4 0 8 1;
#X connect 5 0 3 0;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 7 0 9 0;
#X connect 7 0 9 1;
#X connect 7 1 4 0;
#X connect 7 1 2 0;
#X connect 7 1 2 1;
#X connect 8 0 0 0;
#X connect 9 0 10 0;
#X connect 10 0 15 0;
#X connect 10 0 21 0;
#X connect 10 0 30 0;
#X connect 11 0 1 1;
#X connect 12 0 17 0;
#X connect 15 0 16 0;
#X connect 16 0 12 0;
#X connect 17 0 34 0;
#X connect 19 0 3 1;
#X connect 20 0 0 1;
#X connect 23 0 24 0;
#X connect 30 0 12 1;
#X connect 34 0 6 1;
#X connect 34 0 4 1;
#X connect 35 0 1 0;
#X restore 800 488 pd fft-analysis_mask;
#N canvas 448 152 592 454 current-mask 0;
#N canvas 0 22 450 300 (subpatch) 0;
#X array current-mask 512 float 0;
#X coords 0 0.1 511 0 400 300 1 0 0;
#X restore 110 76 graph;
#X text 25 14 This table (1002-mask) is the average power measured
in each channel of the spectrum \, presumed to represent the noise
floor.;
#X restore 685 436 pd current-mask;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 400 -1 600 210 1 0 0;
#X restore 30 9 graph;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 400 250 1 0 0;
#X restore 53 286 graph;
#X text 712 10 PLOT LIVE SOUNDWAVE;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 490 350 1 0 0;
#X restore 663 5 graph;
#X text 246 264 startREC and stopSTOP (RECtime) --;
#X text 50 264 -- Register elapsed time between;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 260 100 1 0 0;
#X restore 678 420 graph;
#X text 656 397 -- Create a current mask whenever user wants to --
;
#X obj 151 418 loadbang;
#X obj 684 241 r filesize;
#X obj 684 261 array size recorded_sound;
#X obj 684 281 r startREC;
#X obj 684 322 array size recorded_sound;
#X text 982 398 -- Set range of MASK level --;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 200 100 1 0 0;
#X restore 978 420 graph;
#X text 1263 -18 -- PLAY ORIGINAL / DENOISED SOUND --;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 260 350 1 0 0;
#X restore 1248 3 graph;
#N canvas 0 22 450 278 (subpatch) 0;
#X coords 0 1 100 -1 230 140 1 0 0;
#X restore 1258 416 graph;
#X obj 1532 115;
#X obj 1316 310 *~;
#X obj 1316 289 hip~ 3;
#X obj 1363 306 r VOLUMEslider;
#X obj 1312 534 dac~;
#X obj 1312 511 *~;
#X obj 1312 490 hip~ 3;
#X obj 1359 507 r VOLUMEslider;
#X floatatom 1359 531 5 0 0 0 - - -;
#X text 752 300 Initial buffer size is 10min long;
#X msg 684 301 2.646e+07;
#X connect 1 0 3 0;
#X connect 1 0 2 0;
#X connect 2 0 65 0;
#X connect 5 0 20 0;
#X connect 6 0 7 0;
#X connect 8 0 9 0;
#X connect 12 0 18 0;
#X connect 13 0 18 0;
#X connect 14 0 28 0;
#X connect 17 0 12 0;
#X connect 19 0 25 0;
#X connect 20 0 21 0;
#X connect 20 1 22 0;
#X connect 21 0 23 0;
#X connect 22 0 24 0;
#X connect 25 0 4 0;
#X connect 26 0 28 0;
#X connect 26 0 40 0;
#X connect 27 0 14 0;
#X connect 29 0 28 0;
#X connect 31 0 32 0;
#X connect 32 0 37 0;
#X connect 34 0 31 0;
#X connect 35 0 31 1;
#X connect 36 0 37 1;
#X connect 37 0 38 0;
#X connect 38 0 33 0;
#X connect 38 0 43 0;
#X connect 39 0 36 0;
#X connect 43 0 47 0;
#X connect 44 0 43 1;
#X connect 44 0 46 0;
#X connect 47 0 45 0;
#X connect 50 0 54 0;
#X connect 51 0 53 0;
#X connect 52 0 60 0;
#X connect 54 0 51 0;
#X connect 54 1 52 0;
#X connect 56 0 59 0;
#X connect 57 0 55 0;
#X connect 59 0 64 0;
#X connect 59 0 74 0;
#X connect 61 0 62 0;
#X connect 62 0 59 0;
#X connect 64 0 119 0;
#X connect 65 0 19 0;
#X connect 65 1 5 0;
#X connect 65 2 50 0;
#X connect 65 3 66 0;
#X connect 65 4 6 0;
#X connect 65 5 8 0;
#X connect 66 0 69 0;
#X connect 67 0 70 0;
#X connect 68 0 71 0;
#X connect 69 0 67 0;
#X connect 69 1 68 0;
#X connect 72 0 75 0;
#X connect 73 0 76 0;
#X connect 74 0 63 0;
#X connect 75 0 74 1;
#X connect 76 0 74 1;
#X connect 79 0 123 0;
#X connect 80 0 79 0;
#X connect 82 0 83 0;
#X connect 84 0 87 0;
#X connect 84 0 86 0;
#X connect 86 0 82 0;
#X connect 87 0 86 1;
#X connect 88 0 75 0;
#X connect 89 0 92 0;
#X connect 90 0 93 0;
#X connect 91 0 92 0;
#X connect 92 0 64 1;
#X connect 93 0 64 1;
#X connect 94 0 80 0;
#X connect 95 0 96 0;
#X connect 96 0 97 0;
#X connect 107 0 44 0;
#X connect 108 0 109 0;
#X connect 110 0 127 0;
#X connect 118 0 58 0;
#X connect 118 0 58 1;
#X connect 119 0 118 0;
#X connect 120 0 118 1;
#X connect 122 0 121 0;
#X connect 122 0 121 1;
#X connect 123 0 122 0;
#X connect 124 0 122 1;
#X connect 124 0 125 0;
#X connect 127 0 111 0;