#N canvas 322 23 691 760 12;
#X obj 60 561 hip~ 5;
#X floatatom 35 48 0 0 100 0 - - -;
#X obj 35 93 * 441;
#X obj 30 400 +~ 1;
#X obj 60 491 *~;
#X obj 36 231 line~;
#X obj 36 181 * 441;
#X floatatom 36 156 0 0 100 0 - - -;
#X obj 36 206 pack 0 100;
#X obj 30 429 +~;
#X obj 77 427 samphold~;
#X obj 30 328 samphold~;
#X obj 30 375 *~;
#X obj 193 389 r~ phase;
#X obj 380 232 s~ phase;
#X obj 118 328 r~ phase;
#X obj 48 352 r~ phase;
#X obj 112 402 r~ phase;
#X obj 87 102 s chunk-size;
#X floatatom 380 52 0 0 0 0 - - -;
#X obj 87 77 * 0.01;
#X text 199 78 chunk size;
#X text 199 100 in seconds;
#X obj 391 107 r chunk-size;
#X obj 391 132 t b f;
#X obj 380 156 /;
#X obj 380 26 loadbang;
#X obj 193 413 -~ 0.5;
#X obj 193 437 *~ 0.5;
#X obj 193 460 cos~;
#X obj 38 610 output~;
#X text 462 722 updated for Pd version 0.37;
#X obj 380 77 expr pow(2 \, $f1/120);
#X text 549 77 speed change;
#X obj 380 181 phasor~;
#X text 33 12 TWO OVERLAPPING SAMPLE READ ELEMENTS;
#N canvas 457 259 614 280 table 0;
#N canvas 0 0 450 300 (subpatch) 0;
#X array table22 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 363 64 graph;
#X text 365 198 --- 44103 samples ---;
#X obj 48 148 loadbang;
#X obj 52 37 adc~ 1;
#X obj 52 62 hip~ 5;
#X msg 67 91 bang;
#X obj 48 202 soundfiler;
#X text 141 155 v-- re-read original table;
#X obj 52 118 tabwrite~ table22;
#X msg 48 175 read ../sound/voice.wav table22;
#X text 108 91 <= record;
#X connect 2 0 9 0;
#X connect 3 0 4 0;
#X connect 4 0 8 0;
#X connect 5 0 8 0;
#X connect 9 0 6 0;
#X restore 575 404 pd table;
#X obj 35 130 s chunk-size-samples;
#X text 196 129 ... and in samples;
#X obj 36 254 s~ read-pt;
#X obj 77 379 r~ read-pt;
#X obj 456 218 +~ 0.5;
#X obj 456 244 wrap~;
#X obj 456 269 s~ phase2;
#X obj 30 303 r chunk-size-samples;
#X obj 267 399 +~ 1;
#X obj 267 499 *~;
#X obj 267 428 +~;
#X obj 322 427 samphold~;
#X obj 267 327 samphold~;
#X obj 267 374 *~;
#X obj 432 415 -~ 0.5;
#X obj 432 439 *~ 0.5;
#X obj 432 462 cos~;
#X obj 322 377 r~ read-pt;
#X obj 267 302 r chunk-size-samples;
#X obj 356 328 r~ phase2;
#X obj 285 351 r~ phase2;
#X obj 432 391 r~ phase2;
#X obj 344 402 r~ phase2;
#X obj 60 537 +~;
#X text 418 155 loop frequency;
#X text 517 205 second phase signal;
#X text 517 225 out of phase from;
#X text 516 246 first one;
#X text 80 285 copy 1;
#X text 322 282 copy 2;
#X text 176 544 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., f 67;
#X text 176 620 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., f 67;
#X text 176 682 Finally \, the two copies' outputs are added and the
result sent to the audio output., f 67;
#X obj 30 454 tabread4~ table22;
#X obj 267 453 tabread4~ table22;
#X text 70 157 <= read point in 100ths of a second;
#X text 70 46 <= chunk size (100ths of a second);
#X text 415 52 <= transposition \, halftones/10;
#X connect 0 0 30 0;
#X connect 0 0 30 1;
#X connect 1 0 2 0;
#X connect 1 0 20 0;
#X connect 2 0 37 0;
#X connect 3 0 9 0;
#X connect 4 0 60 0;
#X connect 5 0 39 0;
#X connect 6 0 8 0;
#X connect 7 0 6 0;
#X connect 8 0 5 0;
#X connect 9 0 70 0;
#X connect 10 0 9 1;
#X connect 11 0 12 0;
#X connect 12 0 3 0;
#X connect 13 0 27 0;
#X connect 15 0 11 1;
#X connect 16 0 12 1;
#X connect 17 0 10 1;
#X connect 19 0 32 0;
#X connect 20 0 18 0;
#X connect 23 0 24 0;
#X connect 24 0 25 0;
#X connect 24 1 25 1;
#X connect 25 0 34 0;
#X connect 26 0 19 0;
#X connect 27 0 28 0;
#X connect 28 0 29 0;
#X connect 29 0 4 1;
#X connect 32 0 25 0;
#X connect 34 0 14 0;
#X connect 34 0 41 0;
#X connect 40 0 10 0;
#X connect 41 0 42 0;
#X connect 42 0 43 0;
#X connect 44 0 11 0;
#X connect 45 0 47 0;
#X connect 46 0 60 1;
#X connect 47 0 71 0;
#X connect 48 0 47 1;
#X connect 49 0 50 0;
#X connect 50 0 45 0;
#X connect 51 0 52 0;
#X connect 52 0 53 0;
#X connect 53 0 46 1;
#X connect 54 0 48 0;
#X connect 55 0 49 0;
#X connect 56 0 49 1;
#X connect 57 0 50 1;
#X connect 58 0 51 0;
#X connect 59 0 48 1;
#X connect 60 0 0 0;
#X connect 70 0 4 0;
#X connect 71 0 46 0;
