-
Notifications
You must be signed in to change notification settings - Fork 4
/
evilst.pd
945 lines (945 loc) · 25.3 KB
/
evilst.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
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
#N struct 3516.rectangle float id float x float y float w float h float txtclr float boxclr float bgclr symbol label;
#N canvas 939 459 560 521 10;
#N canvas 624 71 293 96 NETPD 0;
#N canvas 483 312 318 115 abslist 0;
#X msg 12 89 i2mx;
#X msg 11 65 untik-clock-consumer;
#X restore 12 34 pd abslist;
#X msg 10 10 version 0 2 0;
#X restore 10 14 pd NETPD 2 0;
#X obj 9 69 netpd_head \$1 evilst;
#N canvas 941 220 167 186 \$1-evilst 1;
#X obj 6 4 cnv 15 145 93 empty empty send 3 8 0 14 #b8b8b8 #000000 0;
#X obj 6 105 cnv 15 145 67 empty empty receive 2 8 0 14 #b8b8b8 #000000 0;
#X obj 12 122 hsl 134 22 0 127 0 0 empty empty buffer 0 8 0 14 #000000 #000000 #b8b8b8 0 1;
#X obj 9 140 cnv 4 4 4 empty \$0.buffer.meter empty 20 12 0 14 #14e814 #000000 0;
#X obj 12 147 hsl 134 22 0 127 0 0 empty \$0.playback.display playback 0 8 0 14 #000000 #000000 #bcbcbc 0 1;
#X obj 9 165 cnv 4 4 4 empty \$0.playback.meter empty 20 12 0 14 #fc8000 #404040 0;
#X obj 9 22 vsl 35 30 0 127 0 0 \$0.switch.button empty empty 0 -9 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 9 20 cnv 15 35 35 empty \$0.switch.display empty 20 12 0 14 #285014 #000000 0;
#X obj 47 20 netpd-gui-dropdown \$0.clock.select 62 16 12 666 0 0 0 555 887;
#X obj 115 20 hsl 31 16 0 127 0 0 empty \$0.dsp.display dsp 2 8 0 14 #000000 #000000 #14e814 0 1;
#X obj 50 39 hsl 96 16 0 127 0 0 \$0.owner.button \$0.owner.display owner:you 2 8 0 14 #000000 #000000 #14e814 0 1;
#X obj 8 58 nbx 7 16 8 128 0 0 \$1-delay \$1-delay empty 0 -8 0 10 #fcfcfc #000000 #b8b8b8 0 256;
#X obj 12 58 hsl 73 16 0 127 0 0 empty \$0.delay.display delay:16 2 8 0 14 #000000 #000000 #b8b8b8 0 1;
#X obj 9 77 nbx 5 16 1 64 0 0 \$1-adc/1 \$1-adc/1 empty 0 -8 0 10 #fcfcfc #000000 #b8b8b8 0 256;
#X obj 11 77 hsl 53 16 0 127 0 0 empty \$0.adc1.display adc:1 2 8 0 14 #000000 #000000 #b8b8b8 0 1;
#X obj 69 77 cnv 10 18 16 empty \$0.peak.display empty 20 12 0 14 #000000 #000000 0;
#X obj 93 58 hsl 53 16 0 127 0 0 \$0.help.button empty empty -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
#X obj 93 58 hsl 53 16 0 127 0 0 empty \$0.help.label help 2 8 0 14 #000000 #000000 #b8b8b8 0 1;
#X obj 91 77 nbx 5 16 1 64 0 0 \$1-adc/2 \$1-adc/2 empty 0 -8 0 10 #fcfcfc #000000 #b8b8b8 0 256;
#X obj 93 77 hsl 53 16 0 127 0 0 empty \$0.adc2.display adc:2 2 8 0 14 #000000 #000000 #b8b8b8 0 1;
#X restore 10 42 pd \$1-evilst;
#N canvas 524 50 665 490 send-signal 0;
#X obj 29 358 list append;
#X obj 19 37 inlet~;
#X obj 459 108 inlet;
#X obj 414 142 spigot 0;
#X obj 414 109 bang~;
#X obj 29 467 s \$1.NETPD;
#X obj 29 422 list prepend sendtyped /audio b;
#X obj 29 444 list trim;
#X obj 20 115 netpd-sig-to-16bit~;
#X obj 195 39 inlet~;
#X obj 196 117 netpd-sig-to-16bit~;
#X obj 465 402 table \$0.msb.send.l 1024;
#X obj 465 423 table \$0.lsb.send.l 1024;
#X obj 465 442 table \$0.msb.send.r 1024;
#X obj 465 462 table \$0.lsb.send.r 1024;
#X obj 29 314 array get \$0.msb.send.l;
#X obj 182 314 array get \$0.lsb.send.l;
#X obj 29 378 list append;
#X obj 29 398 list append;
#X obj 414 243 t b b b b;
#X obj 329 314 array get \$0.msb.send.r;
#X obj 482 314 array get \$0.lsb.send.r;
#X obj 370 33 block~ 1024 1 1;
#X obj 31 157 tabsend~ \$0.lsb.send.l;
#X obj 21 181 tabsend~ \$0.msb.send.l;
#X obj 229 159 tabsend~ \$0.lsb.send.r;
#X obj 195 183 tabsend~ \$0.msb.send.r;
#X connect 0 0 17 0;
#X connect 1 0 8 0;
#X connect 2 0 3 1;
#X connect 3 0 19 0;
#X connect 4 0 3 0;
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X connect 8 0 24 0;
#X connect 8 1 23 0;
#X connect 9 0 10 0;
#X connect 10 0 26 0;
#X connect 10 1 25 0;
#X connect 15 0 0 0;
#X connect 16 0 0 1;
#X connect 17 0 18 0;
#X connect 18 0 6 0;
#X connect 19 0 15 0;
#X connect 19 1 16 0;
#X connect 19 2 20 0;
#X connect 19 3 21 0;
#X connect 20 0 17 1;
#X connect 21 0 18 1;
#X restore 14 314 pd send-signal;
#N canvas 242 412 841 478 receive-signal 0;
#X obj 15 17 netpd_r \$1 audio;
#X obj 15 430 list prepend 0;
#X obj 58 386 list prepend 0;
#X obj 15 96 t a b;
#X obj 42 119 f;
#X msg 147 109 0;
#X obj 42 141 + 1;
#X obj 541 285 t b;
#X obj 509 243 t b;
#X obj 362 95 sel 0 1;
#X msg 362 136 stop;
#X obj 363 346 *~;
#X obj 15 223 list split 1024;
#X obj 42 189 * 1024;
#X obj 147 11 inlet;
#X obj 42 163 mod 976;
#X obj 147 87 sel 0;
#X obj 363 375 outlet~;
#X obj 147 64 t a a;
#X obj 362 116 delay 50;
#X obj 434 378 s~ \$0.out.signal;
#X obj 363 298 netpd-16bit-to-sig~;
#X obj 362 156 t a;
#X obj 487 16 table \$0.msb.receive.l 999424;
#X obj 487 36 table \$0.lsb.receive.l 999424;
#X obj 487 56 table \$0.msb.receive.r 999424;
#X obj 487 76 table \$0.lsb.receive.r 999424;
#X obj 15 453 s \$0.msb.receive.l;
#X obj 58 408 s \$0.lsb.receive.l;
#X obj 58 248 list split 1024;
#X obj 101 270 list split 1024;
#X obj 101 342 list prepend 0;
#X obj 144 298 list prepend 0;
#X obj 101 365 s \$0.msb.receive.r;
#X obj 144 320 s \$0.lsb.receive.r;
#X obj 751 285 t b;
#X obj 719 243 t b;
#X obj 573 346 *~;
#X obj 573 375 outlet~;
#X obj 573 298 netpd-16bit-to-sig~;
#X obj 362 222 tabplay~ \$0.msb.receive.l;
#X obj 394 264 tabplay~ \$0.lsb.receive.l;
#X obj 572 222 tabplay~ \$0.msb.receive.r;
#X obj 604 264 tabplay~ \$0.lsb.receive.r;
#N canvas 875 359 446 526 latency_checker 0;
#X obj 6 15 inlet;
#X obj 7 492 outlet;
#X obj 153 6 inlet;
#X obj 33 237 timer;
#X obj 33 61 f;
#X obj 33 83 + 1;
#N canvas 761 287 168 268 block_length_in_ms 0;
#X obj 13 18 inlet;
#X obj 13 213 outlet;
#X obj 70 73 samplerate~;
#X msg 70 95 1000 \$1;
#X obj 70 117 /;
#X obj 70 139 * 1024;
#X obj 70 42 loadbang;
#X obj 13 187 *;
#X connect 0 0 7 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 7 1;
#X connect 6 0 2 0;
#X connect 7 0 1 0;
#X restore 78 266 pd block_length_in_ms;
#X obj 33 345 -;
#X obj 33 465 s \$0.receive.buffer.ms;
#X text 79 238 reset timer when receiving starts;
#X obj 33 291 pack f f;
#X msg 33 322 \$2 \$1;
#X obj 6 37 t a b;
#X obj 33 107 t a a;
#X obj 33 129 sel 1;
#X msg 153 81 0;
#X obj 153 175 f;
#X obj 35 200 t b b;
#X obj 35 178 select 0 1;
#X obj 153 56 sel 0;
#X obj 153 28 t a a a;
#X obj 192 112 sel 1;
#X obj 153 153 metro 100;
#X obj 33 379 t a a;
#X obj 222 313 > 100;
#X obj 268 314 t b a;
#X obj 222 342 &&;
#X obj 222 366 change 0;
#X obj 222 411 line~;
#X obj 222 433 outlet~;
#X msg 222 389 \$1 50;
#N canvas 957 173 299 233 buffer_underrun_detected 0;
#X obj 90 24 inlet;
#X obj 16 18 inlet;
#X obj 90 50 sel 0;
#X msg 90 72 stop;
#X obj 16 144 delay;
#X obj 16 193 netpd-s /\$1/evil/rxmeta;
#X msg 16 169 BUFFERUNDERRUN;
#X obj 151 164 netpd_r \$1 owner;
#X obj 16 70 spigot;
#X msg 90 114 0;
#X connect 0 0 2 0;
#X connect 0 0 8 1;
#X connect 1 0 8 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 6 0;
#X connect 4 0 9 0;
#X connect 6 0 5 0;
#X connect 7 0 5 1;
#X connect 8 0 4 0;
#X connect 9 0 8 1;
#X restore 253 171 pd buffer_underrun_detected;
#X connect 0 0 12 0;
#X connect 2 0 20 0;
#X connect 3 0 10 0;
#X connect 4 0 5 0;
#X connect 5 0 4 1;
#X connect 5 0 13 0;
#X connect 6 0 10 1;
#X connect 7 0 23 0;
#X connect 10 0 11 0;
#X connect 11 0 7 0;
#X connect 12 0 1 0;
#X connect 12 1 4 0;
#X connect 13 0 14 0;
#X connect 13 1 6 0;
#X connect 14 0 22 0;
#X connect 15 0 22 0;
#X connect 15 0 4 1;
#X connect 15 0 23 0;
#X connect 16 0 18 0;
#X connect 17 0 3 1;
#X connect 17 1 3 0;
#X connect 18 0 17 0;
#X connect 18 1 3 1;
#X connect 19 0 15 0;
#X connect 20 0 19 0;
#X connect 20 1 16 1;
#X connect 20 2 21 0;
#X connect 20 2 25 0;
#X connect 20 2 31 1;
#X connect 21 0 3 0;
#X connect 22 0 16 0;
#X connect 23 0 8 0;
#X connect 23 1 24 0;
#X connect 23 1 31 0;
#X connect 24 0 26 0;
#X connect 25 0 26 0;
#X connect 25 1 26 1;
#X connect 26 0 27 0;
#X connect 27 0 30 0;
#X connect 28 0 29 0;
#X connect 30 0 28 0;
#X restore 15 52 pd latency_checker;
#X connect 0 0 44 0;
#X connect 1 0 27 0;
#X connect 2 0 28 0;
#X connect 3 0 12 0;
#X connect 3 1 4 0;
#X connect 4 0 6 0;
#X connect 5 0 4 1;
#X connect 6 0 15 0;
#X connect 7 0 41 0;
#X connect 8 0 40 0;
#X connect 9 0 19 0;
#X connect 9 1 22 0;
#X connect 10 0 22 0;
#X connect 11 0 17 0;
#X connect 11 0 20 0;
#X connect 12 0 1 0;
#X connect 12 1 29 0;
#X connect 13 0 2 1;
#X connect 13 0 1 1;
#X connect 13 0 31 1;
#X connect 13 0 32 1;
#X connect 14 0 18 0;
#X connect 14 0 44 1;
#X connect 15 0 4 1;
#X connect 15 0 13 0;
#X connect 16 0 5 0;
#X connect 18 0 16 0;
#X connect 18 1 9 0;
#X connect 19 0 10 0;
#X connect 21 0 11 0;
#X connect 22 0 40 0;
#X connect 22 0 41 0;
#X connect 22 0 42 0;
#X connect 22 0 43 0;
#X connect 29 0 2 0;
#X connect 29 1 30 0;
#X connect 30 0 31 0;
#X connect 30 1 32 0;
#X connect 31 0 33 0;
#X connect 32 0 34 0;
#X connect 35 0 43 0;
#X connect 36 0 42 0;
#X connect 37 0 38 0;
#X connect 37 0 20 0;
#X connect 39 0 37 0;
#X connect 40 0 21 0;
#X connect 40 1 8 0;
#X connect 41 0 21 1;
#X connect 41 1 7 0;
#X connect 42 0 39 0;
#X connect 42 1 36 0;
#X connect 43 0 39 1;
#X connect 43 1 35 0;
#X connect 44 0 3 0;
#X connect 44 1 11 1;
#X connect 44 1 37 1;
#X restore 14 416 pd receive-signal;
#N canvas 900 148 427 221 ownership 0;
#X obj 25 82 f;
#X obj 52 64 netpd-status-get socket 1;
#X obj 25 152 ==;
#X obj 25 174 s \$0.ownership;
#X obj 25 130 t a a;
#X obj 52 152 s \$0.owner;
#X obj 25 105 netpd_f \$1 owner 0;
#X msg 234 129 label owner:\$1;
#X obj 288 49 r \$0.owner;
#X obj 234 16 r \$0.ownership;
#X obj 234 48 sel 1 0;
#X obj 273 74 f;
#X msg 234 97 symbol you;
#X obj 234 156 s \$0.owner.display;
#X obj 25 14 r \$0.owner.button;
#X obj 25 37 sel 0;
#X obj 70 36 t a;
#X msg 170 102 0;
#X connect 0 0 6 0;
#X connect 1 0 0 1;
#X connect 1 0 2 1;
#X connect 2 0 3 0;
#X connect 4 0 2 0;
#X connect 4 1 5 0;
#X connect 6 0 4 0;
#X connect 7 0 13 0;
#X connect 8 0 11 1;
#X connect 9 0 10 0;
#X connect 10 0 12 0;
#X connect 10 1 11 0;
#X connect 11 0 7 0;
#X connect 12 0 7 0;
#X connect 14 0 15 0;
#X connect 15 0 0 0;
#X connect 15 1 16 0;
#X connect 16 0 15 1;
#X connect 17 0 7 0;
#X restore 160 36 pd ownership;
#X obj 14 139 adc~ 1;
#X obj 13 454 i2mx \$1 evilst;
#X obj 14 371 t a a;
#X obj 67 376 s \$0.playback;
#N canvas 959 426 225 240 gui.stuff 0;
#N canvas 0 50 300 209 buffer.meter 0;
#X obj 40 128 s \$0.buffer.meter;
#X msg 40 105 vis_size \$1 4;
#X obj 40 58 max 4;
#X obj 40 80 min 139;
#X obj 40 13 r \$0.receive.buffer.percent;
#X obj 40 35 * 1.39;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
#X connect 3 0 1 0;
#X connect 4 0 5 0;
#X connect 5 0 2 0;
#X restore 14 16 pd buffer.meter;
#N canvas 790 258 452 312 playback.meter.display 0;
#X obj 9 100 s \$0.playback.display;
#X msg 9 76 color -1 -1 \$1;
#X obj 9 9 r \$0.playback;
#X obj 9 31 sel 0 1;
#X msg 9 53 20;
#X msg 168 151 vis_size \$1 4;
#X obj 168 104 max 4;
#X obj 168 126 min 139;
#X obj 168 174 s \$0.playback.meter;
#X obj 168 9 r~ \$0.out.signal;
#X obj 168 32 env~ 2048;
#X obj 168 54 - 40;
#X obj 168 81 * 2.31;
#X msg 37 53 14;
#X connect 1 0 0 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 3 1 13 0;
#X connect 4 0 1 0;
#X connect 5 0 8 0;
#X connect 6 0 7 0;
#X connect 7 0 5 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 6 0;
#X connect 13 0 1 0;
#X restore 14 42 pd playback.meter.display;
#N canvas 761 137 380 366 \$1-evilst-help 0;
#X text 11 8 evilst - send live audio with netpd;
#X text 11 20 ---------------------------------;
#X text 11 37 evilst broadcasts an uncompressed 16-bit audio stream to all clients. By pre-defining a desired delay \, live audio is in time with generated sound.;
#X text 22 139 * DSP needs to be turned on;
#X text 23 157 * You are owner of this evilst instance (click on owner);
#X text 22 121 * master needs to be loaded and running (for time sync);
#X text 12 87 Three conditions need to be met before you can stream audio and the corresponding labels need to be green:;
#X text 14 181 If two or more clients desire to send live audio \, more instances of evilst need to be loaded. Beware that each instance requires 100kB/s download bandwidth for each client.;
#X text 14 246 NOTE: If a buffer underrun is detected on any receiving client \, the sending instance immediately stops sending.;
#X text 14 289 TIP: Make sure you configured a correct value for pd-audio-latency in netpd-preferences. This allows for precise timing.;
#X restore 15 171 pd \$1-evilst-help;
#X obj 16 74 r \$0.help.button;
#X obj 16 94 sel 0;
#X obj 58 95 t a;
#X msg 16 117 vis 1;
#X obj 16 137 s pd-\$1-evilst-help;
#X connect 3 0 4 0;
#X connect 4 0 6 0;
#X connect 4 1 5 0;
#X connect 5 0 4 1;
#X connect 6 0 7 0;
#X restore 162 77 pd gui.stuff;
#N canvas 232 98 595 175 set.adc 0;
#X msg 14 38 set \$1;
#X obj 349 51 route set;
#X msg 349 74 label adc:\$1;
#X obj 14 97 outlet;
#X obj 169 93 outlet;
#X obj 349 96 s \$0.adc1.display;
#X obj 349 29 r \$1-adc/1;
#X msg 169 44 set \$1;
#X obj 14 16 netpd_f \$1 adc/1 1 300;
#X obj 459 51 route set;
#X msg 459 74 label adc:\$1;
#X obj 459 29 r \$1-adc/2;
#X obj 459 96 s \$0.adc2.display;
#X obj 169 22 netpd_f \$1 adc/2 2 300;
#X connect 0 0 3 0;
#X connect 1 0 2 0;
#X connect 1 1 2 0;
#X connect 2 0 5 0;
#X connect 6 0 1 0;
#X connect 7 0 4 0;
#X connect 8 0 0 0;
#X connect 9 0 10 0;
#X connect 9 1 10 0;
#X connect 10 0 12 0;
#X connect 11 0 9 0;
#X connect 13 0 7 0;
#X restore 14 109 pd set.adc;
#N canvas 144 263 440 262 input.level 0;
#X obj 30 23 inlet~;
#X obj 29 50 env~ 2048;
#X obj 29 130 max 0;
#X obj 83 137 << 8;
#X obj 83 163 * -1;
#X obj 83 188 - 1;
#X obj 29 198 * 255;
#X obj 29 152 min 40;
#X obj 29 174 / 40;
#X msg 83 208 color \$1 -1;
#X obj 83 232 s \$0.peak.display;
#X obj 29 108 - 45;
#X obj 160 25 r \$0.conditions.met;
#X obj 160 47 t a a;
#X obj 29 76 spigot;
#X msg 160 110 -1;
#X text 152 3 only show signal when we're ready;
#X connect 0 0 1 0;
#X connect 1 0 14 0;
#X connect 2 0 7 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 9 0;
#X connect 6 0 3 0;
#X connect 7 0 8 0;
#X connect 8 0 6 0;
#X connect 9 0 10 0;
#X connect 11 0 2 0;
#X connect 12 0 13 0;
#X connect 13 0 15 0;
#X connect 13 1 14 1;
#X connect 14 0 11 0;
#X connect 15 0 9 0;
#X restore 102 176 pd input.level;
#X obj 71 140 adc~ 2;
#X obj 328 97 s \$0.untik;
#X obj 265 75 route tempo;
#N canvas 1181 237 299 195 tempo2ms 0;
#X obj 28 130 outlet;
#X msg 28 36 \$2 \$1;
#X obj 28 60 route permin;
#X msg 28 83 60000 \$1;
#X obj 28 106 /;
#X obj 28 11 inlet;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 0 0;
#X connect 5 0 1 0;
#X restore 265 118 pd tempo2ms;
#X obj 265 141 s \$0.interval;
#X obj 265 51 untik-clock-consumer \$1 clock \$0.clock.select;
#X obj 265 27 r \$0.to.untik;
#N canvas 900 129 638 487 switch 0;
#X obj 17 443 outlet;
#X obj 86 123 netpd-status-get dsp 1;
#X obj 17 190 &&;
#X obj 39 169 t b a a;
#X obj 78 287 sel 0;
#X text 7 4 Following conditions must be met before starting:;
#X text 23 26 * master is running;
#X text 22 43 * DSP is turned on;
#X obj 35 211 r \$0.ownership;
#X obj 17 255 &&;
#X text 22 61 * ownership is taken;
#X obj 35 233 t b a a;
#N canvas 553 138 441 385 buffer_underrun_or_overflow 0;
#X obj 37 30 route BUFFERUNDERRUN;
#X obj 37 8 netpd-r /\$1/evil/rxmeta;
#X obj 37 85 f;
#X obj 37 54 t b b;
#X obj 149 258 outlet;
#X msg 37 108 buffer underrun detected on client \$1;
#X obj 37 142 netpd-error evil;
#X obj 211 17 r \$0.buffer.overflow;
#X obj 211 39 t b b;
#X msg 238 63 send buffer overflow detected;
#X obj 149 209 t b;
#X connect 0 0 3 0;
#X connect 1 0 0 0;
#X connect 1 1 2 1;
#X connect 2 0 5 0;
#X connect 3 0 2 0;
#X connect 3 1 10 0;
#X connect 5 0 6 0;
#X connect 7 0 8 0;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 9 0 6 0;
#X connect 10 0 4 0;
#X restore 154 406 pd buffer_underrun_or_overflow;
#X obj 226 234 s \$0.dsp.display;
#X obj 235 57 sel 0 1, f 34;
#X obj 17 130 t a a;
#X msg 226 212 color -1 -1 \$1;
#X msg 256 188 16;
#X obj 226 167 sel 0 1;
#X msg 172 321 color -1 -1 \$1;
#X msg 202 297 16;
#X obj 172 276 sel 0 1;
#X obj 172 343 s \$0.owner.display;
#X msg 226 189 20;
#X msg 172 298 20;
#N canvas 597 416 448 328 switch.widget 0;
#X obj 12 280 outlet;
#X obj 204 62 inlet;
#X obj 170 290 s \$0.switch.display;
#X msg 283 236 16;
#X msg 170 265 color \$1 -1;
#X msg 170 235 22;
#X msg 220 236 26;
#X obj 12 14 r \$0.switch.button;
#X obj 12 36 sel 0;
#X obj 55 36 t a;
#X obj 12 131 == 0;
#X obj 266 10 inlet;
#X obj 30 78 t b b;
#X msg 57 101 1;
#X text 310 10 stop;
#X obj 12 163 &&;
#X obj 204 97 t a a a a;
#X obj 283 178 &&;
#X obj 283 200 sel 1;
#X obj 266 32 t b b;
#X msg 293 60 0;
#X obj 12 185 t a a a;
#N canvas 0 44 450 300 logic 0;
#X obj 21 69 sel 0;
#X obj 21 91 f;
#X obj 21 113 sel 1;
#X obj 21 19 inlet;
#X obj 240 23 inlet;
#X obj 21 214 outlet;
#X obj 240 85 sel 1;
#X obj 240 107 f;
#X obj 240 129 sel 0;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 3 0 0 0;
#X connect 3 0 7 1;
#X connect 4 0 1 1;
#X connect 4 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 8 0 5 0;
#X restore 220 179 pd logic;
#X obj 143 142 t a a a;
#N canvas 0 44 450 300 logic 0;
#X obj 21 19 inlet;
#X obj 240 23 inlet;
#X obj 21 214 outlet;
#X obj 21 97 ||;
#X obj 21 119 sel 0;
#X obj 240 85 sel 0;
#X obj 240 107 f;
#X obj 240 129 sel 0;
#X connect 0 0 3 0;
#X connect 0 0 6 1;
#X connect 1 0 3 1;
#X connect 1 0 5 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 6 0;
#X connect 6 0 7 0;
#X connect 7 0 2 0;
#X restore 143 179 pd logic;
#X obj 12 227 change -1;
#X connect 1 0 16 0;
#X connect 3 0 4 0;
#X connect 4 0 2 0;
#X connect 5 0 4 0;
#X connect 6 0 4 0;
#X connect 7 0 8 0;
#X connect 8 0 10 0;
#X connect 8 1 9 0;
#X connect 9 0 8 1;
#X connect 10 0 15 0;
#X connect 11 0 19 0;
#X connect 12 0 10 0;
#X connect 12 1 13 0;
#X connect 13 0 10 1;
#X connect 15 0 21 0;
#X connect 16 0 15 1;
#X connect 16 1 24 1;
#X connect 16 2 22 1;
#X connect 16 3 17 1;
#X connect 17 0 18 0;
#X connect 18 0 3 0;
#X connect 19 0 12 0;
#X connect 19 1 20 0;
#X connect 20 0 16 0;
#X connect 21 0 25 0;
#X connect 21 1 10 1;
#X connect 21 2 23 0;
#X connect 22 0 6 0;
#X connect 23 0 24 0;
#X connect 23 1 22 0;
#X connect 23 2 17 0;
#X connect 24 0 5 0;
#X connect 25 0 0 0;
#X restore 17 379 pd switch.widget;
#X msg 78 309 stop;
#X obj 17 300 t a a;
#X obj 33 344 s \$0.conditions.met;
#N canvas 0 0 507 179 delay_check 0;
#X obj 14 42 t b a;
#X obj 14 66 del 0;
#X obj 14 90 f, f 5;
#X obj 14 114 change -1;
#X obj 14 17 inlet, f 6;
#X obj 14 137 outlet;
#X text 93 24 Let's delay the DSP check so that evil is not turned off on a DSP 0 \, 1 toggly cycle. Otherwise loading instruments or effects turns evil off.;
#X msg 113 92 browse https://github.com/reduzent/netpd-instruments/issues/39;
#X obj 113 128 pdcontrol;
#X connect 0 0 1 0;
#X connect 0 1 2 1;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 5 0;
#X connect 4 0 0 0;
#X connect 7 0 8 0;
#X restore 86 147 pd delay_check;
#X obj 17 83 r \$0.untik;
#X obj 17 106 route run;
#X obj 235 135 s \$0.clock.select;
#X msg 235 112 selected_text_color \$1;
#X msg 335 82 80;
#X msg 235 81 666;
#X connect 1 0 29 0;
#X connect 2 0 9 0;
#X connect 3 0 2 0;
#X connect 3 1 2 1;
#X connect 3 2 4 0;
#X connect 3 2 18 0;
#X connect 4 0 26 0;
#X connect 8 0 11 0;
#X connect 9 0 27 0;
#X connect 11 0 9 0;
#X connect 11 1 9 1;
#X connect 11 2 4 0;
#X connect 11 2 21 0;
#X connect 12 0 25 1;
#X connect 14 0 35 0;
#X connect 14 1 34 0;
#X connect 15 0 2 0;
#X connect 15 1 14 0;
#X connect 16 0 13 0;
#X connect 17 0 16 0;
#X connect 18 0 23 0;
#X connect 18 1 17 0;
#X connect 19 0 22 0;
#X connect 20 0 19 0;
#X connect 21 0 24 0;
#X connect 21 1 20 0;
#X connect 23 0 16 0;
#X connect 24 0 19 0;
#X connect 25 0 0 0;
#X connect 26 0 25 1;
#X connect 27 0 25 0;
#X connect 27 1 28 0;
#X connect 29 0 3 0;
#X connect 30 0 31 0;
#X connect 31 0 15 0;
#X connect 33 0 32 0;
#X connect 34 0 33 0;
#X connect 35 0 33 0;
#X restore 124 212 pd switch;
#N canvas 431 82 392 569 calculate_start_time 0;
#X obj 12 12 inlet;
#N canvas 572 347 298 242 calculate_real_latency 0;
#X obj 16 199 outlet;
#X obj 68 200 s \$0.latency.compensation;
#X obj 16 134 t a a;
#N canvas 423 209 301 243 add_latency_introduced_by_tx/rx_buffers 0;
#X obj 111 27 loadbang;
#X msg 111 49 1024;
#X obj 111 71 * 2;
#X text 142 49 <- evil frame length;
#X obj 138 149 samplerate~;
#X obj 111 126 t a b;
#X obj 111 172 /;
#X obj 111 194 * 1000;
#X obj 13 182 outlet;
#X obj 13 119 +;
#X obj 13 48 inlet;
#X text 147 71 <- why?;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 4 0 6 1;
#X connect 5 0 6 0;
#X connect 5 1 4 0;
#X connect 6 0 7 0;
#X connect 7 0 9 1;
#X connect 9 0 8 0;
#X connect 10 0 9 0;
#X restore 16 87 pd add_latency_introduced_by_tx/rx_buffers;
#X msg 68 165 label \$1ms;
#X obj 16 45 netpd-pref-get pd-audio-latency 1;
#X obj 16 13 loadbang;
#X connect 2 0 0 0;
#X connect 2 1 4 0;
#X connect 3 0 2 0;
#X connect 4 0 1 0;
#X connect 5 0 3 0;
#X connect 6 0 5 0;
#X restore 180 56 pd calculate_real_latency;
#X obj 150 196 *;
#X obj 150 218 -;
#X obj 150 281 /;
#X obj 150 145 f;
#X obj 180 78 t b a;
#X obj 236 149 t b a;
#X obj 39 423 netpd_s \$1 txmeta;
#X text 91 366 start at tick and after ms delay;
#X text 89 378 (running master mandatory);
#X msg 12 503 1;
#X obj 12 538 outlet;
#X obj 12 41 sel 1 0;
#X obj 12 397 t a a;
#X obj 12 472 route start stop;
#X msg 58 503 0;
#X msg 99 337 stop;
#X obj 150 27 netpd_f \$1 delay 16;
#X obj 229 206 r \$1-delay;
#X obj 229 228 route set;
#X msg 229 265 label delay:\$1;
#X obj 229 287 s \$0.delay.display;
#X obj 236 107 r \$0.interval;
#X msg 12 341 start \$1;
#X obj 39 164 s \$0.to.untik;
#X obj 27 188 r \$0.untik;
#X obj 27 211 route timestamp;
#X obj 12 236 f;
#X msg 39 142 get timestamp;
#X obj 12 117 t b b;
#X obj 12 305 +;
#X connect 0 0 13 0;
#X connect 1 0 6 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 31 1;
#X connect 5 0 2 0;
#X connect 6 0 5 0;
#X connect 6 1 3 1;
#X connect 7 0 5 0;
#X connect 7 1 4 1;
#X connect 7 1 2 1;
#X connect 11 0 12 0;
#X connect 13 0 30 0;
#X connect 13 1 17 0;
#X connect 14 0 15 0;
#X connect 14 1 8 0;
#X connect 15 0 11 0;
#X connect 15 1 16 0;
#X connect 16 0 12 0;
#X connect 17 0 14 0;
#X connect 18 0 5 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 20 1 21 0;
#X connect 21 0 22 0;
#X connect 23 0 7 0;
#X connect 24 0 14 0;
#X connect 26 0 27 0;
#X connect 27 0 28 1;
#X connect 28 0 31 0;
#X connect 29 0 25 0;
#X connect 30 0 28 0;
#X connect 30 1 29 0;
#X connect 31 0 24 0;
#X restore 124 243 pd calculate_start_time;
#N canvas 692 213 400 373 playback_control 0;
#X obj 176 29 netpd_r \$1 txmeta;
#X obj 28 316 outlet;
#X obj 176 53 route start stop;
#X msg 222 215 0;
#X obj 28 37 r \$0.untik;
#X obj 28 60 route event;
#X obj 28 83 route start_playback;
#X msg 176 190 1;
#X msg 203 119 schedule \$1 start_playback;
#X obj 203 144 s \$0.to.untik;
#X obj 28 252 f;
#X obj 28 182 b;
#X text 257 216 stop immediately;
#X text 61 250 start at scheduled time;
#X obj 176 76 t b a;
#X connect 0 0 2 0;
#X connect 2 0 14 0;
#X connect 2 1 3 0;
#X connect 3 0 1 0;
#X connect 3 0 10 1;
#X connect 4 0 5 0;
#X connect 5 0 6 0;
#X connect 6 0 11 0;
#X connect 7 0 10 1;
#X connect 8 0 9 0;
#X connect 10 0 1 0;
#X connect 11 0 10 0;
#X connect 14 0 7 0;
#X connect 14 1 8 0;
#X restore 14 349 pd playback_control;
#N canvas 745 137 484 482 monitor_network_send_buffer 0;
#X obj 4 84 inlet;
#X obj 4 143 t a a;
#X obj 4 404 outlet;
#X obj 63 95 r NETPD;
#X obj 63 117 route status;
#X obj 63 139 route sendbuffersize;
#X obj 246 104 netpd_r \$1 delay;
#X obj 246 126 t b a;
#X obj 222 152 *;
#N canvas 384 216 327 182 ms2samps 0;
#X obj 18 25 inlet;
#X obj 18 148 outlet;
#X obj 45 76 samplerate~;
#X obj 18 47 t a b;
#X obj 18 100 *;
#X obj 18 122 / 1000;
#X connect 0 0 3 0;
#X connect 2 0 4 1;
#X connect 3 0 4 0;
#X connect 3 1 2 0;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
#X restore 100 301 pd ms2samps;
#X obj 100 323 * 2;
#X text 128 323 samps * 2 -> bytes;
#X obj 100 350 * 0.8;
#X text 10 8 We monitor the send buffer to check whether we have a fast enough uplink for sending live audio. If the network send buffer exceeds 80% of the audio buffer \, we stop sending audio.;
#X text 143 351 80% buffer fill;
#X obj 63 205 spigot 0;
#X obj 63 380 >;
#X obj 63 407 sel 1;
#X text 224 65 calculate audio buffer in bytes;
#X obj 63 438 s \$0.buffer.overflow;
#X obj 135 227 f;
#X obj 108 179 t a a;
#X obj 135 205 sel 1;
#X obj 135 249 t a a;
#X obj 260 201 netpd_s \$1 audiobuffer;
#X obj 262 226 r \$0.receive.buffer.ms;
#X obj 262 275 /;
#X obj 262 297 * 100;
#X obj 262 319 int;
#X obj 262 384 s \$0.receive.buffer.percent;
#X obj 262 340 max 0;
#X obj 262 362 change;
#X obj 277 250 netpd_r \$1 audiobuffer;
#X obj 222 84 r \$0.interval;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 1 1 21 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
#X connect 5 0 15 0;
#X connect 6 0 7 0;
#X connect 7 0 8 0;
#X connect 7 1 8 1;
#X connect 8 0 20 1;
#X connect 9 0 10 0;
#X connect 10 0 12 0;
#X connect 12 0 16 1;
#X connect 15 0 16 0;
#X connect 16 0 17 0;
#X connect 17 0 19 0;
#X connect 20 0 23 0;
#X connect 21 0 15 1;
#X connect 21 1 22 0;
#X connect 22 0 20 0;
#X connect 23 0 9 0;
#X connect 23 1 24 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 27 0 28 0;
#X connect 28 0 30 0;
#X connect 30 0 31 0;
#X connect 31 0 29 0;
#X connect 32 0 26 1;
#X connect 33 0 8 0;
#X restore 124 271 pd monitor_network_send_buffer;
#X obj 281 337 loadbang;
#X msg 281 394 get tempo \, get pos \, get run;
#X obj 281 417 s \$0.to.untik;
#X obj 281 366 del 0;
#X connect 4 0 7 0;
#X connect 4 1 7 1;
#X connect 6 0 12 0;
#X connect 6 0 3 0;
#X connect 8 0 4 0;
#X connect 8 1 9 0;
#X connect 11 0 6 0;
#X connect 11 1 13 0;
#X connect 13 0 3 1;
#X connect 13 0 12 0;
#X connect 15 0 16 0;
#X connect 15 1 14 0;
#X connect 16 0 17 0;
#X connect 18 0 15 0;
#X connect 19 0 18 0;
#X connect 20 0 21 0;
#X connect 21 0 23 0;
#X connect 22 0 8 0;
#X connect 23 0 3 2;
#X connect 24 0 27 0;
#X connect 25 0 26 0;
#X connect 27 0 25 0;