#N canvas 370 56 804 767 12;
#X declare -stdpath ./;
#N canvas 0 0 450 300 (subpatch) 0;
#X array table19 48003 float 2;
#A color 0;
#A width 2;
#X coords 0 1.02 48003 -1.02 200 130 1;
#X restore 536 252 graph;
#X obj 435 399 adc~ 1;
#N canvas 0 0 450 300 (subpatch) 0;
#X array graph19 24000 float 0;
#A color 0;
#A width 1;
#X coords 0 48000 23999 0 200 130 1 0 0;
#X restore 536 65 graph;
#X obj 270 367 line~;
#X floatatom 270 291 8 0 0 0 - - - 0;
#X obj 437 527 loadbang;
#X text 516 531 v-- re-read the original sample;
#X obj 437 582 soundfiler;
#X obj 435 479 tabwrite~ table19;
#X msg 437 558 read ../sound/voice.wav table19;
#X text 184 648 You should hear some doppler shift as you change the read point. To see why \, click on "graph table index" and quickly start changing the read point--- you should see entertaining pictures in "table-index". The next patch shows how to prevent this if you wish to.;
#X text 480 434 <-- record;
#X obj 270 341 pack f 100;
#X obj 457 435 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 71 17 cnv 5 5 25 empty empty Sliding\ Loops 15 13 0 16 #dfdfdf #202020 0;
#X floatatom 115 187 6 0 0 2 Hz \$0-freq - 0;
#X obj 180 320 +~ 1;
#X obj 115 296 -~ 0.5;
#X obj 115 429 cos~;
#X obj 115 462 *~;
#X obj 115 214 phasor~;
#X obj 115 321 *~ 0.5;
#X obj 115 551 output~;
#X obj 180 295 *~;
#X obj 239 404 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X text 262 403 <-- graph once;
#X obj 266 431 tgl 19 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000 0 1;
#X text 290 430 <-- graph repeatedly, f 10;
#N canvas 146 130 450 300 graph 0;
#X obj 256 73 inlet;
#X obj 192 73 inlet;
#X obj 122 73 inlet~;
#X obj 256 137 metro 550;
#X obj 192 203 tabwrite~ graph19;
#X connect 0 0 3 0;
#X connect 1 0 4 0;
#X connect 2 0 4 0;
#X connect 3 0 4 0;
#X restore 213 464 pd graph;
#X obj 201 214 hsl 162 19 0 1000 0 0 empty \$0-size chunk\ size\ (ms) -2 -10 0 12 #dfdfdf #000000 #000000 0 1;
#X obj 180 357 +~;
#X obj 180 500 tabread4~ table19;
#X obj 273 263 hsl 162 19 -250 1000 0 0 empty \$0-read-point read\ point\ (ms) -2 -10 0 12 #dfdfdf #000000 #000000 0 1;
#N canvas 611 300 300 325 init 0;
#X text 57 23 This subpatch initializes the patch and loads values in number boxes., f 26;
#X obj 79 94 loadbang;
#X obj 79 149 f \$0;
#X msg 79 173 \; \$1-freq 5 \; \$1-read-point 0 \; \$1-size 250;
#X obj 79 121 bng 19 250 50 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000;
#X obj 79 264 declare -stdpath ./;
#X connect 1 0 4 0;
#X connect 2 0 3 0;
#X connect 4 0 2 0;
#X restore 389 312 pd init;
#X text 560 198 ----- 0.5 second -----;
#X text 742 184 0;
#X text 742 56 48000;
#X text 42 69 In this patch we can loop in any "window" of the input sample. The "read point" gives the starting point of the window and "chunk" is its size (both in milliseconds). Try \, for example \, frequency 4 \, chunk size 250 \, and vary the read point from -250 to 1000 \, listening to the result.;
#X floatatom 198 241 8 0 0 0 - - - 0;
#X text 550 392 ---- 48003 samples ---;
#X obj 270 317 * 48;
#X obj 198 268 * 48;
#X connect 1 0 8 0;
#X connect 3 0 30 1;
#X connect 4 0 40 0;
#X connect 5 0 9 0;
#X connect 9 0 7 0;
#X connect 12 0 3 0;
#X connect 13 0 8 0;
#X connect 15 0 20 0;
#X connect 16 0 30 0;
#X connect 17 0 21 0;
#X connect 18 0 19 0;
#X connect 19 0 22 0;
#X connect 20 0 23 0;
#X connect 20 0 17 0;
#X connect 21 0 18 0;
#X connect 23 0 16 0;
#X connect 24 0 28 1;
#X connect 26 0 28 2;
#X connect 29 0 38 0;
#X connect 30 0 31 0;
#X connect 30 0 28 0;
#X connect 31 0 19 1;
#X connect 32 0 4 0;
#X connect 38 0 41 0;
#X connect 40 0 12 0;
#X connect 41 0 23 1;
