#N canvas 275 23 848 693 12;
#X declare -stdpath ./;
#N canvas 0 0 450 300 (subpatch) 0;
#X array table21 44103 float 0;
#X coords 0 1.02 44100 -1.02 200 130 1;
#X restore 559 296 graph;
#X obj 373 544 loadbang;
#X obj 81 551 hip~ 5;
#X floatatom 47 262 0 0 0 0 - - - 0;
#X obj 47 297 * 441;
#X obj 47 427 +~ 1;
#X obj 371 419 adc~ 1;
#X obj 371 444 hip~ 5;
#X msg 386 472 bang;
#X obj 81 515 *~;
#X obj 143 427 line~;
#X obj 143 377 * 441;
#X floatatom 143 352 0 0 0 0 - - - 0;
#X obj 143 402 pack 0 100;
#X obj 81 456 +~;
#X obj 143 452 samphold~;
#X obj 47 352 samphold~;
#X obj 47 322 sig~;
#X obj 47 402 *~;
#X text 28 5 CALCULATING LOOP FREQUENCY AS FUNCTION OF TRANSPOSITION
;
#X obj 228 475 r~ phase;
#X obj 29 216 s~ phase;
#X obj 107 323 r~ phase;
#X obj 65 379 r~ phase;
#X obj 203 428 r~ phase;
#X obj 188 322 s chunk-size;
#X floatatom 29 62 0 0 0 0 - - - 0;
#X obj 188 297 * 0.01;
#X text 284 302 chunk size;
#X text 284 324 in seconds;
#X obj 40 117 r chunk-size;
#X obj 40 142 t b f;
#X obj 29 166 /;
#X text 89 143 divide speed change by chunk;
#X text 87 164 size to get loop frequency;
#X text 371 56 The transposition is frequency in Hz. divided by chunk
size in seconds. This patch calculates the loop frequency as a function
of desired transposition;
#X text 373 107 Notice now that we get Doppler effects when the chunk
size changes. You can suppress that if you don't want it \, by converting
the chunk size to an audio signal \, sampling and holding it. But then
there would be more work to deal with very low frequencies never triggering
the sample and hold...;
#X obj 373 598 soundfiler;
#X obj 29 39 loadbang;
#X obj 228 499 -~ 0.5;
#X obj 228 523 *~ 0.5;
#X obj 228 546 cos~;
#X obj 61 596 output~;
#X obj 81 481 tabread4~ table21;
#X text 466 551 v-- re-read original table;
#X text 621 627 updated for Pd version 0.37;
#X text 592 430 --- 44103 samples ---;
#X obj 29 87 expr pow(2 \, $f1/120);
#X text 218 87 speed change;
#X text 376 189 You might also want to have a way to retrigger the
loop to sync it with some other process. By the time we had all this
built the patch would be fairly involved. For now \, we'll move on
to the next topic...;
#X obj 29 190 phasor~;
#X obj 371 499 tabwrite~ table21;
#X msg 373 571 read ../sound/voice.wav table21;
#X text 81 261 <= chunk size (100ths of a second);
#X text 180 352 <= read point in 100ths of a second;
#X text 67 63 <= transposition (10ths of a halftone);
#X text 427 472 <= record;
#X obj 635 17 declare -stdpath ./;
#X connect 1 0 52 0;
#X connect 2 0 42 0;
#X connect 2 0 42 1;
#X connect 3 0 4 0;
#X connect 3 0 27 0;
#X connect 4 0 17 0;
#X connect 5 0 14 0;
#X connect 6 0 7 0;
#X connect 7 0 51 0;
#X connect 8 0 51 0;
#X connect 9 0 2 0;
#X connect 10 0 15 0;
#X connect 11 0 13 0;
#X connect 12 0 11 0;
#X connect 13 0 10 0;
#X connect 14 0 43 0;
#X connect 15 0 14 1;
#X connect 16 0 18 0;
#X connect 17 0 16 0;
#X connect 18 0 5 0;
#X connect 20 0 39 0;
#X connect 22 0 16 1;
#X connect 23 0 18 1;
#X connect 24 0 15 1;
#X connect 26 0 47 0;
#X connect 27 0 25 0;
#X connect 30 0 31 0;
#X connect 31 0 32 0;
#X connect 31 1 32 1;
#X connect 32 0 50 0;
#X connect 38 0 26 0;
#X connect 39 0 40 0;
#X connect 40 0 41 0;
#X connect 41 0 9 1;
#X connect 43 0 9 0;
#X connect 47 0 32 0;
#X connect 50 0 21 0;
#X connect 52 0 37 0;
