pure-data/doc/7.stuff/tools/latency.pd

#N canvas 420 112 707 484 12;
#X floatatom 211 98 4 0 0 0 - - adc-gain 0;
#X text 289 17 latency measurement;
#N canvas 196 23 928 723 guts 0;
#X obj 292 35 adc~ 1 2 3 4 5 6 7 8;
#X obj 318 102 == 1;
#X obj 293 126 *~ 0;
#X obj 355 128 *~ 0;
#X obj 418 129 *~ 0;
#X obj 480 131 *~ 0;
#X obj 541 134 *~ 0;
#X obj 603 136 *~ 0;
#X obj 666 137 *~ 0;
#X obj 728 139 *~ 0;
#X obj 380 104 == 2;
#X obj 443 105 == 3;
#X obj 505 107 == 4;
#X obj 566 110 == 5;
#X obj 628 112 == 6;
#X obj 691 113 == 7;
#X obj 753 115 == 8;
#X obj 46 34 loadbang;
#X obj 59 153 r inchannel;
#X msg 59 177 set \$1;
#X obj 59 201 s inchannel-set;
#N canvas 0 22 450 300 (subpatch) 0;
#X array pulse 120 float 1;
#A 0 0 0 0 0 0 0 0 0 0 0 -0 -6.19458e-05 -0.000494103 -0.00165937 -0.00390618 -0.00756153 -0.0129244 -0.0202596 -0.0297923 -0.0417031 -0.0561239 -0.0731343 -0.0927595 -0.114969 -0.139674 -0.166732 -0.195943 -0.227055 -0.259767 -0.293732 -0.328561 -0.363831 -0.39909 -0.433862 -0.467657 -0.499977 -0.530324 -0.558209 -0.583156 -0.604713 -0.622461 -0.636015 -0.645036 -0.649234 -0.648374 -0.642282 -0.630843 -0.614012 -0.591808 -0.564318 -0.531698 -0.494168 -0.452014 -0.405579 -0.355267 -0.301528 -0.244862 -0.185805 -0.124926 -0.0628189 -9.26574e-05 0.0626345 0.124745 0.185628 0.244691 0.301365 0.355113 0.405437 0.451883 0.494051 0.531595 0.56423 0.591735 0.613955 0.630802 0.642256 0.648364 0.649239 0.645055 0.636048 0.622507 0.604771 0.583224 0.558287 0.53041 0.500069 0.467754 0.433963 0.399193 0.363935 0.328665 0.293834 0.259866 0.22715 0.196032 0.166815 0.139751 0.115038 0.0928211 0.0731882 0.0561701 0.0417419 0.0298239 0.0202844 0.012943 0.00757468 0.00391473 0.00166424 0.000496283 6.24961e-05 0 0 0 0 0 0 0 0 0 0;
#X coords 0 1 119 -1 200 140 1;
#X restore 25 399 graph;
#X obj 52 587 t b b;
#X obj 123 648 f;
#X obj 161 648 + 1;
#X obj 52 616 until;
#X obj 123 676 t f f;
#X obj 46 780 tabwrite pulse;
#X obj 52 553 bng 17 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X msg 143 570 \; pulse const 0;
#X msg 141 620 0;
#X obj 44 676 sel 100;
#X obj 157 780 + 10;
#X obj 67 712 * 0.06283;
#X obj 615 264 metro 1000;
#X obj 615 218 r metro-on;
#X obj 614 243 tgl 15 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1;
#X obj 705 326 vline~;
#X obj 705 357 tabread4~ pulse;
#X obj 687 31 r inchannel;
#X obj 291 186 hip~ 20;
#X obj 290 472 *~ 1e+10;
#X obj 290 499 clip~ 0 1;
#X obj 290 523 *~ 1e+10;
#X obj 290 553 lop~ 3;
#X obj 291 577 clip~ 0 1;
#X msg 564 502 clear;
#X msg 705 295 0 \, 12000 10;
#X obj 754 424 osc~ 220;
#X obj 754 451 *~ 0.03;
#X obj 704 476 +~;
#X obj 650 581 dac~ 1 2 3 4 5 6 7 8;
#X obj 401 278 bp~ 220 0.7;
#X obj 810 532 env~ 65536;
#X floatatom 820 559 4 0 0 0 - - - 0;
#X floatatom 754 394 5 0 0 0 - - - 0;
#X obj 704 414 +~;
#X obj 401 302 rzero~ -1;
#X obj 401 327 rzero~ -1;
#X obj 401 353 *~ 0.15;
#X obj 290 316 rzero~ 1;
#X obj 290 341 rzero~ 1;
#X obj 45 747 expr -0.5 * (1-cos($f1)) * sin($f1);
#X obj 290 292 bp~ 2000 0.7;
#X obj 290 421 *~ 20;
#X obj 705 382 *~ 0.1;
#X obj 351 215 + 100;
#X obj 351 240 dbtorms;
#X obj 290 246 *~ 1;
#X obj 160 281 env~ 65536;
#X floatatom 171 309 7 0 0 0 - - - 0;
#X obj 401 380 bonk~;
#X obj 378 409 bng 17 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 290 445 -~ 0.1;
#X obj 291 602 -~ 1;
#X obj 291 629 *~ -1;
#X obj 449 713 phasor~;
#X msg 495 680 0;
#X obj 612 703 del 800;
#X obj 612 728 snapshot~;
#X floatatom 611 778 6 0 0 0 - - - 0;
#X obj 612 755 * 1000;
#X obj 160 335 s adc-db;
#X obj 810 583 s dac-db;
#X obj 674 773 s latency;
#X obj 351 191 r adc-gain;
#X msg 46 61 \; inchannel 1 \; metro-on 1 \; pd dsp 1;
#X obj 401 409 s discontinuity;
#X obj 410 542 *~ 1e+10;
#X obj 410 569 clip~ 0 1;
#X obj 410 593 *~ 1e+10;
#X obj 410 619 lop~ 3;
#X obj 411 643 clip~ 0 1;
#X obj 410 505 -~ 0.1;
#X obj 410 481 *~ 20;
#X obj 393 675 *~;
#X connect 0 0 2 0;
#X connect 0 1 3 0;
#X connect 0 2 4 0;
#X connect 0 3 5 0;
#X connect 0 4 6 0;
#X connect 0 5 7 0;
#X connect 0 6 8 0;
#X connect 0 7 9 0;
#X connect 1 0 2 1;
#X connect 2 0 40 0;
#X connect 3 0 40 0;
#X connect 4 0 40 0;
#X connect 5 0 40 0;
#X connect 6 0 40 0;
#X connect 7 0 40 0;
#X connect 8 0 40 0;
#X connect 9 0 40 0;
#X connect 10 0 3 1;
#X connect 11 0 4 1;
#X connect 12 0 5 1;
#X connect 13 0 6 1;
#X connect 14 0 7 1;
#X connect 15 0 8 1;
#X connect 16 0 9 1;
#X connect 17 0 86 0;
#X connect 18 0 19 0;
#X connect 19 0 20 0;
#X connect 22 0 25 0;
#X connect 22 1 30 0;
#X connect 22 1 29 0;
#X connect 23 0 24 0;
#X connect 23 0 26 0;
#X connect 23 0 31 0;
#X connect 24 0 23 1;
#X connect 25 0 23 0;
#X connect 26 0 33 0;
#X connect 26 1 32 0;
#X connect 28 0 22 0;
#X connect 30 0 23 1;
#X connect 31 0 25 1;
#X connect 32 0 27 1;
#X connect 33 0 62 0;
#X connect 34 0 47 0;
#X connect 34 0 46 0;
#X connect 34 0 77 0;
#X connect 34 0 78 0;
#X connect 35 0 36 0;
#X connect 36 0 34 0;
#X connect 37 0 38 0;
#X connect 38 0 65 0;
#X connect 39 0 1 0;
#X connect 39 0 10 0;
#X connect 39 0 11 0;
#X connect 39 0 12 0;
#X connect 39 0 13 0;
#X connect 39 0 14 0;
#X connect 39 0 15 0;
#X connect 39 0 16 0;
#X connect 40 0 68 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 43 0 44 0;
#X connect 44 0 45 0;
#X connect 45 0 74 0;
#X connect 46 0 44 0;
#X connect 47 0 37 0;
#X connect 48 0 49 0;
#X connect 49 0 56 1;
#X connect 50 0 51 0;
#X connect 50 0 51 1;
#X connect 50 0 51 2;
#X connect 50 0 51 3;
#X connect 50 0 51 4;
#X connect 50 0 51 5;
#X connect 50 0 51 6;
#X connect 50 0 51 7;
#X connect 50 0 53 0;
#X connect 52 0 57 0;
#X connect 53 0 54 0;
#X connect 53 0 83 0;
#X connect 55 0 48 0;
#X connect 56 0 50 0;
#X connect 57 0 58 0;
#X connect 58 0 59 0;
#X connect 59 0 71 0;
#X connect 60 0 61 0;
#X connect 61 0 64 0;
#X connect 62 0 27 0;
#X connect 63 0 60 0;
#X connect 64 0 73 0;
#X connect 65 0 56 0;
#X connect 65 0 94 0;
#X connect 66 0 67 0;
#X connect 67 0 68 1;
#X connect 68 0 69 0;
#X connect 68 0 63 0;
#X connect 68 0 52 0;
#X connect 69 0 70 0;
#X connect 69 0 82 0;
#X connect 71 0 72 0;
#X connect 71 0 87 0;
#X connect 73 0 41 0;
#X connect 74 0 75 0;
#X connect 75 0 95 0;
#X connect 76 0 79 0;
#X connect 77 0 76 1;
#X connect 78 0 79 0;
#X connect 79 0 81 0;
#X connect 81 0 80 0;
#X connect 81 0 84 0;
#X connect 85 0 66 0;
#X connect 88 0 89 0;
#X connect 89 0 90 0;
#X connect 90 0 91 0;
#X connect 91 0 92 0;
#X connect 92 0 95 1;
#X connect 93 0 88 0;
#X connect 94 0 93 0;
#X connect 95 0 76 0;
#X restore 571 350 pd guts;
#X floatatom 214 50 4 1 8 0 inchannel inchannel-set inchannel 0;
#X floatatom 563 229 6 0 0 0 - latency - 0;
#X text 80 96 adjust gain here:;
#X text 392 231 latency in milliseconds;
#X text 508 207 THE ANSWER IS:;
#X floatatom 464 144 4 0 0 0 - adc-db - 0;
#X floatatom 463 93 4 0 0 0 - dac-db - 0;
#X text 503 143 RMS amplitude in;
#X text 500 94 RMS amplitude out;
#X text 78 142 so that RMS amplitude in is between 60 and 70;
#X text 80 121 (typically between -20 and 20);
#X text 444 421 updated for Pd version 0.43;
#X obj 272 216 bng 25 250 50 0 empty discontinuity empty 17 7 0 10 #dfdfdf #000000 #000000;
#X text 75 212 discontinuity: this flashes if there are audio errors, f 27;
#X text 60 275 To use this patch \, connect your audio output back to the audio input (any input and output channel from 1 to 8 \, but the input channel should agree with the "inchannel" control at top). Then adjust gain so that "RMS amplitude in" is about 65 (anywhere from 60 to 70 will do.) The latency is measured once per second. If there are interruptions in the audio the button above should flash (whether or not the audio system reports the error).;