#N canvas 28 47 748 713 12;
#X obj 19 511 hip~ 5;
#X floatatom 25 38 0 0 100 0 - - -;
#X obj 25 63 * 441;
#X obj 20 380 +~ 1;
#X text 69 35 <-- chunk size (100ths of a second);
#X obj 20 458 *~;
#X obj 26 211 line~;
#X obj 26 161 * 441;
#X floatatom 26 136 0 0 100 0 - - -;
#X obj 26 186 pack 0 100;
#X text 60 137 <-- read point in 100ths of a second;
#X obj 20 409 +~;
#X obj 76 408 samphold~;
#X obj 20 308 samphold~;
#X obj 20 355 *~;
#X obj 185 369 r~ phase;
#X obj 418 210 s~ phase;
#X obj 108 308 r~ phase;
#X obj 42 332 r~ phase;
#X obj 96 383 r~ phase;
#X obj 77 82 s chunk-size;
#X floatatom 418 56 0 0 0 0 - - -;
#X obj 77 57 * 0.01;
#X text 189 58 chunk size;
#X text 189 80 in seconds;
#X obj 429 111 r chunk-size;
#X obj 429 136 t b f;
#X obj 418 160 /;
#X obj 418 33 loadbang;
#X obj 185 393 -~ 0.5;
#X obj 185 417 *~ 0.5;
#X obj 185 440 cos~;
#X obj 19 536 output~;
#X text 486 684 updated for Pd version 0.37;
#X obj 418 81 expr pow(2 \, $f1/120);
#X text 607 81 speed change;
#X obj 418 184 phasor~;
#X text 18 5 TWO OVERLAPPING SAMPLE READ ELEMENTS;
#N canvas 30 567 660 275 table 0;
#N canvas 0 0 450 300 graph1 0;
#X array table22 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 442 61 graph;
#X text 444 195 --- 44103 samples ---;
#X obj 41 148 loadbang;
#X obj 45 44 adc~ 1;
#X obj 45 69 hip~ 5;
#X msg 60 91 bang;
#X obj 41 202 soundfiler;
#X text 101 91 <-- record;
#X text 134 155 v-- re-read original table;
#X obj 45 118 tabwrite~ table22;
#X msg 41 175 read ../sound/voice.wav table22;
#X connect 2 0 10 0;
#X connect 3 0 4 0;
#X connect 4 0 9 0;
#X connect 5 0 9 0;
#X connect 10 0 6 0;
#X restore 567 327 pd table;
#X obj 25 110 s chunk-size-samples;
#X text 211 112 ... and in samples;
#X obj 26 234 s~ read-pt;
#X obj 77 360 r~ read-pt;
#X obj 505 203 +~ 0.5;
#X obj 506 229 wrap~;
#X obj 506 254 s~ phase2;
#X obj 20 283 r chunk-size-samples;
#X obj 274 391 +~ 1;
#X obj 274 469 *~;
#X obj 274 420 +~;
#X obj 329 419 samphold~;
#X obj 274 319 samphold~;
#X obj 274 366 *~;
#X obj 439 404 -~ 0.5;
#X obj 439 428 *~ 0.5;
#X obj 439 451 cos~;
#X obj 330 371 r~ read-pt;
#X obj 274 294 r chunk-size-samples;
#X obj 363 320 r~ phase2;
#X obj 296 343 r~ phase2;
#X obj 439 380 r~ phase2;
#X obj 339 394 r~ phase2;
#X obj 19 487 +~;
#X text 453 56 <-- transposition \, halftones/10;
#X text 456 159 loop frequency;
#X text 566 190 second phase signal;
#X text 566 210 out of phase from;
#X text 565 231 first one;
#X text 70 265 copy 1;
#X text 327 274 copy 2;
#X text 118 503 Here is the previous patch modified to use two copies
of the sample reader \, 180 degrees out of phase. The second sawtooth
signal is derived from the first one by adding a constant (0.5) and
wrapping the result to fit again between zero and one. The result is
the "phase2" signal.;
#X text 119 584 The computation of "chunk-size-samples" (as a message)
and "read-pt" (an audio signal) is the same for both copies and is
separated out at top left. At top right is the same loop frequency
calculation as before.;
#X text 120 654 Finally \, the two copies' outputs are added and the
result sent to the audio output.;
#X obj 20 434 tabread4~ table22;
#X obj 274 445 tabread4~ table22;
#X connect 0 0 32 0;
#X connect 0 0 32 1;
#X connect 1 0 2 0;
#X connect 1 0 22 0;
#X connect 2 0 39 0;
#X connect 3 0 11 0;
#X connect 5 0 62 0;
#X connect 6 0 41 0;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 9 0 6 0;
#X connect 11 0 73 0;
#X connect 12 0 11 1;
#X connect 13 0 14 0;
#X connect 14 0 3 0;
#X connect 15 0 29 0;
#X connect 17 0 13 1;
#X connect 18 0 14 1;
#X connect 19 0 12 1;
#X connect 21 0 34 0;
#X connect 22 0 20 0;
#X connect 25 0 26 0;
#X connect 26 0 27 0;
#X connect 26 1 27 1;
#X connect 27 0 36 0;
#X connect 28 0 21 0;
#X connect 29 0 30 0;
#X connect 30 0 31 0;
#X connect 31 0 5 1;
#X connect 34 0 27 0;
#X connect 36 0 16 0;
#X connect 36 0 43 0;
#X connect 42 0 12 0;
#X connect 43 0 44 0;
#X connect 44 0 45 0;
#X connect 46 0 13 0;
#X connect 47 0 49 0;
#X connect 48 0 62 1;
#X connect 49 0 74 0;
#X connect 50 0 49 1;
#X connect 51 0 52 0;
#X connect 52 0 47 0;
#X connect 53 0 54 0;
#X connect 54 0 55 0;
#X connect 55 0 48 1;
#X connect 56 0 50 0;
#X connect 57 0 51 0;
#X connect 58 0 51 1;
#X connect 59 0 52 1;
#X connect 60 0 53 0;
#X connect 61 0 50 1;
#X connect 62 0 0 0;
#X connect 73 0 5 0;
#X connect 74 0 48 0;
