aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas O Fredericks <mrtof@users.sourceforge.net>2010-05-29 18:38:22 +0000
committerThomas O Fredericks <mrtof@users.sourceforge.net>2010-05-29 18:38:22 +0000
commitd6db646c6c84ff6bf4144f3d07785fa30bbd0e58 (patch)
tree660fd5dd06fddc23a13f0547176d06ae0ea1d2f4
parent341d5303b4612e506897b3c7f494b0d85434ad33 (diff)
Adding some pitchshifting and timestretching sample players
svn path=/trunk/externals/tof/; revision=13575
-rw-r--r--tof/sample.pd126
-rw-r--r--tof/sample_granule~-help.pd42
-rw-r--r--tof/sample_granule~.pd427
-rw-r--r--tof/sample_packel-help.pd12
-rw-r--r--tof/sample_play~-help.pd18
-rw-r--r--tof/sample_play~.pd290
-rw-r--r--tof/sample_record~.pd28
-rw-r--r--tof/sample_shifft~-help.pd27
-rw-r--r--tof/sample_shifft~.pd704
-rw-r--r--tof/sample_unpack-help.pd32
-rw-r--r--tof/sample_unpack.pd34
11 files changed, 1489 insertions, 251 deletions
diff --git a/tof/sample.pd b/tof/sample.pd
index 4c1786a..51c3a62 100644
--- a/tof/sample.pd
+++ b/tof/sample.pd
@@ -1,14 +1,14 @@
-#N canvas 19 223 475 254 10;
+#N canvas 1234 378 467 220 10;
#N canvas 1257 168 871 665 guts 0;
#X obj 182 257 soundfiler;
#X msg 139 232 read -resize \$1 0-\$2 1-\$2;
#X obj 138 180 list append \$1;
#X obj 104 117 iemlib/soundfile_info;
-#X obj 25 -13 inlet;
-#X obj 105 -11 r \$1;
+#X obj 25 -33 inlet;
+#X obj 105 -31 r \$1;
#X obj 104 143 unpack f s f f f;
#X obj 17 510 list;
-#X obj 104 77 cyclone/prepend read;
+#X obj 101 92 cyclone/prepend read;
#X obj 25 154 t b s;
#X obj 35 572 send;
#X obj 25 124 symbol;
@@ -18,12 +18,12 @@
#X msg 307 233 read -resize \$1 0-\$2;
#X obj 287 193 t f f;
#X obj 73 241 t b f b;
-#X obj 130 310 symbol \$1;
+#X obj 126 331 symbol \$1;
#X obj 107 581 outlet;
#X obj 160 579 outlet;
#X obj 214 580 outlet;
-#X obj 263 578 outlet;
-#X obj 302 38 tof/argument 2;
+#X obj 322 582 outlet;
+#X obj 297 30 tof/argument 2;
#X obj 304 71 route symbol;
#X obj 379 114 pack f s;
#X obj 428 42 symbol \$1;
@@ -37,10 +37,8 @@
#X obj 587 151 zexy/demultiplex;
#X obj 636 91 > 1;
#X msg 561 182 \; 0-\$2 resize \$1;
-#X obj 345 578 outlet;
-#X obj 457 578 outlet;
-#X obj 111 519 unpack f s f s f f f;
-#X msg 505 298 list \$1 none \$2 \$3 \$4 0 0;
+#X obj 404 582 outlet;
+#X obj 516 582 outlet;
#N canvas 1077 165 450 300 packels 0;
#X obj 57 16 inlet;
#X obj 21 247 outlet;
@@ -56,7 +54,7 @@
#X obj 280 189 t b a;
#X obj 344 246 outlet;
#X obj 347 185 t b a;
-#X obj 68 69 route rate file size basename channels end start;
+#X obj 68 69 route rate file basename channels end start size;
#X connect 0 0 14 0;
#X connect 7 0 1 0;
#X connect 7 1 2 0;
@@ -77,22 +75,29 @@
#X connect 14 4 10 0;
#X connect 14 5 11 0;
#X connect 14 6 13 0;
-#X restore 227 316 pd packels;
-#X obj 25 25 route return read bang;
-#X text 196 446 rate file size table_basename channels end start;
-#X obj 76 447 pack f s f s f f 0;
-#X connect 0 0 44 2;
-#X connect 0 0 44 5;
+#X restore 289 305 pd packels;
+#X text 214 450 rate file basename channels end start size;
+#X obj 76 448 pack f s s f f 0 f;
+#X msg 505 298 list \$1 none \$3 \$4 0 0 \$2;
+#X obj 111 519 unpack f s s f f f f;
+#X obj 263 581 outlet;
+#N canvas 151 271 568 355 file 0;
+#X restore 659 507 pd file;
+#X obj 100 68 tof/path;
+#X obj 25 5 route return read;
+#X obj 88 33 cyclone/tosymbol;
+#X connect 0 0 41 4;
+#X connect 0 0 41 6;
#X connect 1 0 0 0;
#X connect 2 0 14 0;
#X connect 3 0 6 0;
-#X connect 4 0 42 0;
-#X connect 5 0 42 0;
+#X connect 4 0 47 0;
+#X connect 5 0 47 0;
#X connect 6 0 17 0;
#X connect 6 1 2 0;
-#X connect 6 1 44 1;
+#X connect 6 1 41 1;
#X connect 6 4 13 0;
-#X connect 6 4 44 4;
+#X connect 6 4 41 3;
#X connect 7 0 10 0;
#X connect 8 0 3 0;
#X connect 9 0 7 0;
@@ -104,11 +109,11 @@
#X connect 14 1 15 0;
#X connect 15 0 0 0;
#X connect 16 0 14 1;
-#X connect 17 1 44 0;
+#X connect 17 1 41 0;
#X connect 17 2 18 0;
-#X connect 18 0 44 3;
+#X connect 18 0 41 2;
#X connect 23 0 24 0;
-#X connect 24 0 8 0;
+#X connect 24 0 46 0;
#X connect 24 1 29 0;
#X connect 25 0 30 0;
#X connect 26 0 25 1;
@@ -123,45 +128,50 @@
#X connect 31 2 32 0;
#X connect 32 0 33 3;
#X connect 32 0 35 0;
-#X connect 33 0 40 0;
+#X connect 33 0 42 0;
#X connect 34 0 36 0;
#X connect 34 1 27 0;
#X connect 35 0 34 1;
-#X connect 39 0 19 0;
-#X connect 39 1 20 0;
-#X connect 39 2 21 0;
-#X connect 39 4 22 0;
-#X connect 39 5 37 0;
-#X connect 39 6 38 0;
-#X connect 40 0 44 0;
-#X connect 41 0 44 0;
-#X connect 41 1 44 1;
-#X connect 41 2 44 2;
-#X connect 41 3 44 3;
-#X connect 41 4 44 4;
-#X connect 41 5 44 5;
-#X connect 41 6 44 6;
-#X connect 42 0 11 0;
-#X connect 42 1 8 0;
-#X connect 42 3 41 0;
-#X connect 44 0 7 1;
-#X connect 44 0 39 0;
-#X restore 164 35 pd guts;
-#X obj 164 12 inlet;
-#X text 11 9 Tables (click to view);
-#X floatatom 164 224 6 0 0 1 rate - -;
-#X symbolatom 171 200 40 0 0 1 file - -;
-#X floatatom 179 176 8 0 0 1 size - -;
-#X floatatom 187 153 5 0 0 1 channels - -;
-#X obj 14 30 table 0-\$1;
-#X obj 14 50 table 1-\$1;
-#X text 258 76 Information;
-#X floatatom 203 108 8 0 0 1 start - -;
-#X floatatom 195 130 8 0 0 1 end - -;
+#X connect 39 0 41 0;
+#X connect 39 1 41 1;
+#X connect 39 2 41 2;
+#X connect 39 3 41 3;
+#X connect 39 4 41 4;
+#X connect 39 5 41 5;
+#X connect 39 6 41 6;
+#X connect 41 0 7 1;
+#X connect 41 0 43 0;
+#X connect 42 0 41 0;
+#X connect 43 0 19 0;
+#X connect 43 1 20 0;
+#X connect 43 2 21 0;
+#X connect 43 3 44 0;
+#X connect 43 4 22 0;
+#X connect 43 5 37 0;
+#X connect 43 6 38 0;
+#X connect 46 0 8 0;
+#X connect 47 0 11 0;
+#X connect 47 1 48 0;
+#X connect 47 2 39 0;
+#X connect 48 0 46 0;
+#X restore 23 -20 pd guts;
+#X obj 23 -45 inlet;
+#X text 302 -15 Tables (click to view);
+#X floatatom 23 138 6 0 0 1 rate - -;
+#X symbolatom 29 116 40 0 0 1 file - -;
+#X floatatom 62 7 8 0 0 1 size - -;
+#X floatatom 42 71 5 0 0 1 channels - -;
+#X obj 337 8 table 0-\$1;
+#X obj 337 28 table 1-\$1;
+#X text 142 -20 Information;
+#X floatatom 55 27 8 0 0 1 start - -;
+#X floatatom 49 49 8 0 0 1 end - -;
+#X symbolatom 36 93 30 0 0 1 basename - -;
#X connect 0 0 3 0;
#X connect 0 1 4 0;
-#X connect 0 2 5 0;
+#X connect 0 2 12 0;
#X connect 0 3 6 0;
#X connect 0 4 11 0;
#X connect 0 5 10 0;
+#X connect 0 6 5 0;
#X connect 1 0 0 0;
diff --git a/tof/sample_granule~-help.pd b/tof/sample_granule~-help.pd
new file mode 100644
index 0000000..36baa30
--- /dev/null
+++ b/tof/sample_granule~-help.pd
@@ -0,0 +1,42 @@
+#N canvas 1098 16 788 643 10;
+#X obj 419 105 tof/sample smpgranu amen.wav;
+#X obj 25 129 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 41 164 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X floatatom 122 301 5 0 0 0 - - -;
+#X obj 219 357 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 45 128 Inlet 1 \, bang: Play sample once;
+#X text 60 161 Inlet 1 \, float: Start/stop playing looped sample;
+#X text 243 328 Inlet 3 \, float: Duration in ms;
+#X text 244 352 Inlet 3 \, bang: Reset to orginal duration;
+#X text 160 299 Inlet 2 \, float: Pitch (1=normal);
+#X msg 200 330 10000;
+#X text 27 63 Tags: Sound Sample Play;
+#X obj 95 495 dac~;
+#X text 29 32 Description: Pitchshifts or timestretches a sample with
+the granular method;
+#X text 166 191 Inlet 1 \, grain float: Configure grain length (# of
+samples);
+#X msg 63 195 grain 360;
+#X msg 77 214 grain 7056;
+#X msg 93 238 grain 1764;
+#X obj 41 446 sample_granule~ smpgranu;
+#X obj 437 51 openpanel;
+#X msg 441 78 read \$1;
+#X obj 445 26 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X connect 1 0 18 0;
+#X connect 2 0 18 0;
+#X connect 3 0 18 1;
+#X connect 4 0 18 2;
+#X connect 10 0 18 2;
+#X connect 15 0 18 0;
+#X connect 16 0 18 0;
+#X connect 17 0 18 0;
+#X connect 18 0 12 0;
+#X connect 18 1 12 1;
+#X connect 19 0 20 0;
+#X connect 20 0 0 0;
+#X connect 21 0 19 0;
diff --git a/tof/sample_granule~.pd b/tof/sample_granule~.pd
new file mode 100644
index 0000000..caeece2
--- /dev/null
+++ b/tof/sample_granule~.pd
@@ -0,0 +1,427 @@
+#N canvas 1105 175 1039 766 10;
+#X obj 49 -3 inlet;
+#X obj 77 656 outlet~;
+#X obj 234 660 outlet~;
+#X obj 86 625 *~;
+#X obj 240 629 *~;
+#X obj 243 -49 inlet pitch;
+#X obj 423 -50 inlet duration;
+#X obj 22 146 sig~ 1;
+#N canvas 1026 60 1278 964 grains 0;
+#X obj 272 634 outlet~;
+#X obj 98 24 inlet~;
+#X obj 230 25 inlet~;
+#X obj 371 630 outlet~;
+#X obj 743 38 inlet grain_length;
+#X obj 282 264 phasor~;
+#X obj 327 338 +~ 0.5;
+#X obj 304 362 wrap~;
+#X obj 296 234 *~ 1;
+#X obj 802 87 loadbang;
+#N canvas 0 90 1022 684 grain~ 0;
+#X obj 113 468 tabread4~;
+#X msg 163 436 set \$1;
+#X obj -29 81 inlet~ offset(normalized);
+#X obj 137 79 inlet~ phasor;
+#X obj 65 237 samphold~;
+#X obj 64 280 +~;
+#X obj 129 609 outlet~;
+#X obj 832 200 clip 0 0.5;
+#X obj 128 577 *~;
+#X obj 668 394 samphold~;
+#X obj 594 394 samphold~;
+#X obj 265 459 tabread4~;
+#X obj 276 616 outlet~;
+#X obj 275 584 *~;
+#X msg 333 420 set \$1;
+#X obj 830 254 expr 1-$f1;
+#X obj 658 320 sig~ 0.01;
+#X obj 774 347 sig~ 0.99;
+#X obj 138 228 *~ 7056;
+#X obj 610 170 unpack s s;
+#X obj 492 80 inlet tables;
+#X obj 714 74 inlet grain_length;
+#X obj 845 72 inlet grain_fade;
+#X obj 65 340 cyclone/pong~ 1 10000 40000;
+#X obj 113 285 r \$0-sampstart;
+#X obj 196 302 r \$0-sampend;
+#X obj 432 424 *~ 1;
+#X obj 451 394 r \$0han_size;
+#X obj 442 495 tabread4~ \$0han;
+#X connect 0 0 8 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 3 0 10 1;
+#X connect 3 0 9 1;
+#X connect 3 0 18 0;
+#X connect 3 0 26 0;
+#X connect 4 0 5 0;
+#X connect 5 0 23 0;
+#X connect 7 0 15 0;
+#X connect 7 0 16 0;
+#X connect 8 0 6 0;
+#X connect 11 0 13 0;
+#X connect 13 0 12 0;
+#X connect 14 0 11 0;
+#X connect 15 0 17 0;
+#X connect 16 0 10 0;
+#X connect 17 0 9 0;
+#X connect 18 0 5 1;
+#X connect 19 0 1 0;
+#X connect 19 1 14 0;
+#X connect 20 0 19 0;
+#X connect 21 0 18 1;
+#X connect 22 0 7 0;
+#X connect 23 0 11 0;
+#X connect 23 0 0 0;
+#X connect 24 0 23 1;
+#X connect 25 0 23 2;
+#X connect 26 0 28 0;
+#X connect 27 0 26 1;
+#X connect 28 0 8 1;
+#X connect 28 0 13 1;
+#X restore 166 512 pd grain~;
+#X obj 122 189 *~ 0;
+#X obj 125 245 +~ 0;
+#X obj 156 155 r \$0-samplength;
+#X obj 157 212 r \$0-sampstart;
+#X obj 473 38 inlet tables;
+#X obj 663 125 unpack f f;
+#X obj 342 97 t b f;
+#X obj 322 143 samplerate~;
+#X obj 328 180 /;
+#N canvas 1139 131 1022 684 grain~ 0;
+#X obj 113 468 tabread4~;
+#X msg 163 436 set \$1;
+#X obj -29 81 inlet~ offset(normalized);
+#X obj 137 79 inlet~ phasor;
+#X obj 65 237 samphold~;
+#X obj 64 280 +~;
+#X obj 129 609 outlet~;
+#X obj 832 200 clip 0 0.5;
+#X obj 128 577 *~;
+#X obj 668 394 samphold~;
+#X obj 594 394 samphold~;
+#X obj 265 459 tabread4~;
+#X obj 276 616 outlet~;
+#X obj 275 584 *~;
+#X msg 333 420 set \$1;
+#X obj 830 254 expr 1-$f1;
+#X obj 658 320 sig~ 0.01;
+#X obj 774 347 sig~ 0.99;
+#X obj 138 228 *~ 7056;
+#X obj 610 170 unpack s s;
+#X obj 492 80 inlet tables;
+#X obj 714 74 inlet grain_length;
+#X obj 845 72 inlet grain_fade;
+#X obj 75 350 cyclone/pong~ 1 10000 40000;
+#X obj 123 295 r \$0-sampstart;
+#X obj 206 312 r \$0-sampend;
+#X obj 442 434 *~ 1;
+#X obj 461 404 r \$0han_size;
+#X obj 452 505 tabread4~ \$0han;
+#X connect 0 0 8 0;
+#X connect 1 0 0 0;
+#X connect 2 0 4 0;
+#X connect 3 0 4 1;
+#X connect 3 0 10 1;
+#X connect 3 0 9 1;
+#X connect 3 0 18 0;
+#X connect 3 0 26 0;
+#X connect 4 0 5 0;
+#X connect 5 0 23 0;
+#X connect 7 0 15 0;
+#X connect 7 0 16 0;
+#X connect 8 0 6 0;
+#X connect 11 0 13 0;
+#X connect 13 0 12 0;
+#X connect 14 0 11 0;
+#X connect 15 0 17 0;
+#X connect 16 0 10 0;
+#X connect 17 0 9 0;
+#X connect 18 0 5 1;
+#X connect 19 0 1 0;
+#X connect 19 1 14 0;
+#X connect 20 0 19 0;
+#X connect 21 0 18 1;
+#X connect 22 0 7 0;
+#X connect 23 0 0 0;
+#X connect 23 0 11 0;
+#X connect 24 0 23 1;
+#X connect 25 0 23 2;
+#X connect 26 0 28 0;
+#X connect 27 0 26 1;
+#X connect 28 0 8 1;
+#X connect 28 0 13 1;
+#X restore 384 528 pd grain~;
+#X msg 805 113 7056 0.5;
+#X connect 1 0 11 0;
+#X connect 2 0 8 0;
+#X connect 4 0 16 0;
+#X connect 5 0 6 0;
+#X connect 5 0 10 1;
+#X connect 6 0 7 0;
+#X connect 7 0 20 1;
+#X connect 8 0 5 0;
+#X connect 9 0 21 0;
+#X connect 10 0 0 0;
+#X connect 10 1 3 0;
+#X connect 11 0 12 0;
+#X connect 12 0 10 0;
+#X connect 12 0 20 0;
+#X connect 13 0 11 1;
+#X connect 14 0 12 1;
+#X connect 15 0 10 2;
+#X connect 15 0 20 2;
+#X connect 16 0 10 3;
+#X connect 16 0 17 0;
+#X connect 16 0 20 3;
+#X connect 16 1 10 4;
+#X connect 16 1 20 4;
+#X connect 17 0 18 0;
+#X connect 17 1 19 1;
+#X connect 18 0 19 0;
+#X connect 19 0 8 1;
+#X connect 20 0 0 0;
+#X connect 20 1 3 0;
+#X connect 21 0 16 0;
+#X restore 20 377 pd grains;
+#X obj 583 386 s \$0-sampstart;
+#X obj 676 386 s \$0-samplength;
+#X obj 500 385 s \$0-sampend;
+#X obj 61 66 route bang float grain;
+#N canvas 0 0 842 452 parse_sample 0;
+#X obj 392 336 outlet end;
+#X obj 493 335 outlet start;
+#X obj 600 336 outlet length;
+#X obj 265 336 outlet tables;
+#X obj 127 338 outlet base_freq;
+#N canvas 0 0 450 300 find_freq 0;
+#X obj 83 241 outlet;
+#N canvas 330 268 450 300 smpToFreq 0;
+#X obj 41 35 inlet;
+#X obj 135 179 samplerate~;
+#X obj 65 346 outlet;
+#X obj 41 67 sel 0;
+#X msg 46 154 0;
+#X obj 126 104 t b f;
+#X obj 132 281 /;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 5 1 6 1;
+#X connect 6 0 2 0;
+#X restore 249 100 pd smpToFreq;
+#X obj 120 96 samplerate~;
+#X obj 87 67 t f b;
+#X obj 80 169 *;
+#X obj 78 119 /;
+#X obj 269 12 inlet length;
+#X obj 72 18 inlet samples;
+#X connect 1 0 4 1;
+#X connect 2 0 5 1;
+#X connect 3 0 5 0;
+#X connect 3 1 2 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 7 0 3 0;
+#X restore 192 201 pd find_freq;
+#X obj 356 160 -;
+#X obj 277 72 sample_unpack;
+#X obj 231 252 zexy/demultiplex;
+#X obj 315 223 > 1;
+#X msg 210 277 list 0-\$1 0-\$1;
+#X msg 326 275 list 0-\$1 1-\$1;
+#X obj 218 5 inlet;
+#X obj 455 3 loadbang;
+#X obj 455 35 tof/argument 1;
+#X msg 459 66 sample \$1;
+#X connect 5 0 4 0;
+#X connect 6 0 5 1;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 7 2 8 0;
+#X connect 7 3 9 0;
+#X connect 7 4 6 0;
+#X connect 7 4 0 0;
+#X connect 7 5 6 1;
+#X connect 7 5 1 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 9 0 8 1;
+#X connect 10 0 3 0;
+#X connect 11 0 3 0;
+#X connect 12 0 7 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 7 0;
+#X restore 483 323 pd parse_sample;
+#N canvas 0 0 892 551 player 0;
+#X obj 702 496 outlet get_sample;
+#X obj 91 29 inlet bang;
+#X obj 253 38 inlet float;
+#X obj 388 34 inlet pitch;
+#X obj 85 501 outlet~ phase;
+#X msg 172 265 0;
+#X obj 80 318 tof/phasorshot~;
+#X obj 75 249 sig~ 1;
+#X msg 310 229 1;
+#X msg 267 232 0;
+#X msg 501 440 1;
+#X msg 437 434 0;
+#X obj 350 144 sel 0;
+#N canvas 0 0 450 300 start_phase 0;
+#X obj 76 249 outlet;
+#X obj 76 115 f;
+#X obj 244 26 inlet speed;
+#X obj 68 28 inlet bang;
+#X obj 74 145 < 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X restore 132 200 pd start_phase;
+#X obj 271 365 spigot;
+#X obj 377 395 t b b;
+#X msg 380 430 0;
+#X obj 283 310 == 0;
+#X obj 254 266 t f f;
+#X obj 94 107 t b b b;
+#X obj 378 178 t b b b;
+#X obj 519 292 t b b;
+#X obj 561 38 inlet speed;
+#X obj 416 516 line~;
+#X msg 416 490 \$1 5;
+#X obj 555 510 outlet~ output;
+#X connect 1 0 19 0;
+#X connect 2 0 12 0;
+#X connect 3 0 13 1;
+#X connect 5 0 6 1;
+#X connect 6 0 4 0;
+#X connect 6 1 14 0;
+#X connect 6 2 14 0;
+#X connect 7 0 6 0;
+#X connect 8 0 18 0;
+#X connect 9 0 18 0;
+#X connect 10 0 24 0;
+#X connect 11 0 24 0;
+#X connect 12 0 11 0;
+#X connect 12 1 20 0;
+#X connect 13 0 6 1;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 15 1 11 0;
+#X connect 16 0 14 1;
+#X connect 16 0 24 0;
+#X connect 17 0 14 1;
+#X connect 18 0 6 2;
+#X connect 18 1 17 0;
+#X connect 19 0 13 0;
+#X connect 19 1 9 0;
+#X connect 19 2 21 0;
+#X connect 20 0 5 0;
+#X connect 20 1 8 0;
+#X connect 20 2 21 0;
+#X connect 21 0 10 0;
+#X connect 21 1 0 0;
+#X connect 22 0 7 0;
+#X connect 23 0 25 0;
+#X connect 24 0 23 0;
+#X restore 144 208 pd player;
+#N canvas 0 0 597 611 speed 0;
+#X obj 92 506 outlet;
+#X obj 278 22 inlet default;
+#X obj 43 16 inlet user;
+#X obj 93 75 route bang;
+#X obj 185 358 f;
+#X obj 154 124 /;
+#X msg 148 102 1000 \$1;
+#X obj 245 354 spigot 1;
+#X obj 125 255 t b b;
+#X msg 243 289 1;
+#X obj 154 159 t f b;
+#X msg 196 198 0;
+#X connect 1 0 7 0;
+#X connect 1 0 4 1;
+#X connect 2 0 3 0;
+#X connect 3 0 8 0;
+#X connect 3 1 6 0;
+#X connect 4 0 0 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 0 0;
+#X connect 8 0 4 0;
+#X connect 8 1 9 0;
+#X connect 9 0 7 1;
+#X connect 10 0 0 0;
+#X connect 10 1 11 0;
+#X connect 11 0 7 1;
+#X restore 407 95 pd speed;
+#N canvas 0 0 787 526 hanning 0;
+#X obj 325 180 samplerate~;
+#X obj 325 207 * 0.016;
+#X obj 326 230 int;
+#X obj 327 316 until;
+#X obj 324 349 f;
+#X msg 359 313 0;
+#X obj 322 378 + 1;
+#X obj 470 344 s \$0han;
+#X msg 470 319 resize \$1;
+#X obj 314 426 expr cos(($f1/$f2+0.5)*6.283)/2.0+0.5;
+#X obj 329 255 + 1;
+#X obj 306 497 tabwrite \$0han;
+#X obj 321 400 t f f;
+#X obj 147 171 table \$0han 16;
+#X obj 331 67 inlet;
+#X obj 562 306 s \$0han_size;
+#X obj 329 282 t f b f f f;
+#X connect 0 0 1 0;
+#X connect 1 0 2 0;
+#X connect 2 0 10 0;
+#X connect 3 0 4 0;
+#X connect 4 0 6 0;
+#X connect 5 0 4 1;
+#X connect 6 0 4 1;
+#X connect 6 0 12 0;
+#X connect 8 0 7 0;
+#X connect 9 0 11 0;
+#X connect 10 0 16 0;
+#X connect 12 0 9 0;
+#X connect 12 1 11 1;
+#X connect 14 0 0 0;
+#X connect 16 0 3 0;
+#X connect 16 1 5 0;
+#X connect 16 2 9 1;
+#X connect 16 3 8 0;
+#X connect 16 4 15 0;
+#X restore 617 98 pd hanning;
+#X obj 617 57 loadbang;
+#X connect 0 0 12 0;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 7 0;
+#X connect 5 0 14 2;
+#X connect 6 0 15 0;
+#X connect 7 0 8 1;
+#X connect 8 0 3 0;
+#X connect 8 1 4 0;
+#X connect 12 0 14 0;
+#X connect 12 1 14 1;
+#X connect 12 2 8 3;
+#X connect 12 3 13 0;
+#X connect 13 0 15 1;
+#X connect 13 1 8 2;
+#X connect 13 2 11 0;
+#X connect 13 3 9 0;
+#X connect 13 4 10 0;
+#X connect 14 0 8 0;
+#X connect 14 1 4 1;
+#X connect 14 1 3 1;
+#X connect 14 2 13 0;
+#X connect 15 0 14 3;
+#X connect 17 0 16 0;
diff --git a/tof/sample_packel-help.pd b/tof/sample_packel-help.pd
index f0f3f7c..8129c9b 100644
--- a/tof/sample_packel-help.pd
+++ b/tof/sample_packel-help.pd
@@ -1,16 +1,16 @@
#N canvas 452 313 551 304 10;
-#X text 26 12 Description: Modifies a sample's information;
#X text 26 30 Tags: Sample Sound;
#X text 30 60 Warning: [tof/sample_packel] is only for advanced users!
;
-#X msg 141 181 sample test;
-#X text 220 177 Inlet 2 \, sample symbol: the sample to be modified
+#X msg 146 181 sample test;
+#X text 225 177 Inlet 2 \, sample symbol: the sample to be modified
;
#X msg 57 100 end 1000;
#X msg 92 125 start 10;
#X text 120 99 Change the end of the sample;
#X text 150 122 Change the start of the sample;
#X obj 57 210 tof/sample_packel;
-#X connect 3 0 9 1;
-#X connect 5 0 9 0;
-#X connect 6 0 9 0;
+#X text 26 12 Description: Modifies the properties of a sample;
+#X connect 2 0 8 1;
+#X connect 4 0 8 0;
+#X connect 5 0 8 0;
diff --git a/tof/sample_play~-help.pd b/tof/sample_play~-help.pd
index e364813..6250c6e 100644
--- a/tof/sample_play~-help.pd
+++ b/tof/sample_play~-help.pd
@@ -1,4 +1,4 @@
-#N canvas 1637 415 502 410 10;
+#N canvas 356 215 502 410 10;
#X obj 58 283 dac~;
#X obj 59 96 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
@@ -18,14 +18,14 @@
#X msg 279 31 read \$1;
#X obj 279 -12 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
+#X obj 279 54 tof/sample smppl amen.wav;
#X obj 59 229 tof/sample_play~ smppl;
-#X obj 279 54 tof/sample smppl mono0.wav;
-#X connect 1 0 16 0;
-#X connect 2 0 16 0;
-#X connect 3 0 16 1;
-#X connect 9 0 16 0;
+#X connect 1 0 17 0;
+#X connect 2 0 17 0;
+#X connect 3 0 17 1;
+#X connect 9 0 17 0;
#X connect 13 0 14 0;
-#X connect 14 0 17 0;
+#X connect 14 0 16 0;
#X connect 15 0 13 0;
-#X connect 16 0 0 0;
-#X connect 16 1 0 1;
+#X connect 17 0 0 0;
+#X connect 17 1 0 1;
diff --git a/tof/sample_play~.pd b/tof/sample_play~.pd
index 1010ef4..b0e60b4 100644
--- a/tof/sample_play~.pd
+++ b/tof/sample_play~.pd
@@ -1,40 +1,110 @@
-#N canvas 1162 3 729 673 10;
-#X obj 19 -42 inlet;
-#X obj 51 439 *~ 0;
-#X obj 55 578 outlet~;
-#X msg 314 243 0;
-#X obj 44 355 tof/phasorshot~;
+#N canvas 135 24 729 684 10;
+#X obj 29 -23 inlet;
+#X obj 71 321 *~ 0;
+#X obj 260 598 outlet~;
#X obj 51 502 tabread4~;
-#X obj 212 582 outlet~;
+#X obj 417 602 outlet~;
#X obj 219 512 tabread4~;
-#X obj 36 292 *~ 0;
-#X obj 29 235 sig~ 1;
-#X obj 280 24 inlet speed;
-#X msg 343 247 1;
-#X msg 184 208 0;
-#X msg 422 429 1;
-#X msg 353 427 0;
-#X obj 260 127 sel 0;
-#X obj 513 -6 loadbang;
-#X obj 513 26 tof/argument 1;
-#X msg 517 57 sample \$1;
+#X obj 223 565 *~;
+#X obj 343 556 *~;
+#X obj 132 401 +~ 0;
+#X obj 41 46 route bang float;
+#X obj 231 -20 inlet pitch;
+#N canvas 0 0 892 551 player 0;
+#X obj 702 496 outlet get_sample;
+#X obj 91 29 inlet bang;
+#X obj 253 38 inlet float;
+#X obj 388 34 inlet pitch;
+#X obj 85 501 outlet~ phase;
+#X msg 172 265 0;
+#X obj 80 318 tof/phasorshot~;
+#X obj 75 249 sig~ 1;
+#X msg 310 229 1;
+#X msg 267 232 0;
+#X msg 501 440 1;
+#X msg 437 434 0;
+#X obj 350 144 sel 0;
+#N canvas 0 0 450 300 start_phase 0;
+#X obj 76 249 outlet;
+#X obj 244 26 inlet speed;
+#X obj 68 28 inlet bang;
+#X obj 74 145 < 0;
+#X obj 76 115 f 1;
+#X connect 1 0 4 1;
+#X connect 2 0 4 0;
+#X connect 3 0 0 0;
+#X connect 4 0 3 0;
+#X restore 132 200 pd start_phase;
+#X obj 271 365 spigot;
+#X obj 377 395 t b b;
+#X msg 380 430 0;
+#X obj 283 310 == 0;
+#X obj 254 266 t f f;
+#X obj 94 107 t b b b;
+#X obj 378 178 t b b b;
+#X obj 519 292 t b b;
+#X obj 561 38 inlet speed;
+#X obj 416 516 line~;
+#X msg 416 490 \$1 5;
+#X obj 555 510 outlet~ output;
+#X connect 1 0 19 0;
+#X connect 2 0 12 0;
+#X connect 3 0 13 1;
+#X connect 5 0 6 1;
+#X connect 6 0 4 0;
+#X connect 6 1 14 0;
+#X connect 6 2 14 0;
+#X connect 7 0 6 0;
+#X connect 8 0 18 0;
+#X connect 9 0 18 0;
+#X connect 10 0 24 0;
+#X connect 11 0 24 0;
+#X connect 12 0 11 0;
+#X connect 12 1 20 0;
+#X connect 13 0 6 1;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 15 1 11 0;
+#X connect 16 0 14 1;
+#X connect 16 0 24 0;
+#X connect 17 0 14 1;
+#X connect 18 0 6 2;
+#X connect 18 1 17 0;
+#X connect 19 0 13 0;
+#X connect 19 1 9 0;
+#X connect 19 2 21 0;
+#X connect 20 0 5 0;
+#X connect 20 1 8 0;
+#X connect 20 2 21 0;
+#X connect 21 0 10 0;
+#X connect 21 1 0 0;
+#X connect 22 0 7 0;
+#X connect 23 0 25 0;
+#X connect 24 0 23 0;
+#X restore 70 220 pd player;
+#N canvas 0 0 842 452 parse_sample 0;
+#X obj 392 336 outlet end;
+#X obj 493 335 outlet start;
+#X obj 600 336 outlet length;
+#X obj 265 336 outlet tables;
+#X obj 127 338 outlet base_freq;
#N canvas 0 0 450 300 find_freq 0;
#X obj 83 241 outlet;
-#N canvas 0 0 450 300 smpToFreq 0;
+#N canvas 330 268 450 300 smpToFreq 0;
#X obj 41 35 inlet;
-#X obj 236 181 samplerate~;
+#X obj 135 179 samplerate~;
#X obj 65 346 outlet;
-#X obj 126 104 t f b;
-#X obj 131 281 expr $f2/$f1;
#X obj 41 67 sel 0;
#X msg 46 154 0;
-#X connect 0 0 5 0;
-#X connect 1 0 4 1;
+#X obj 126 104 t b f;
+#X obj 132 281 /;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
#X connect 3 0 4 0;
-#X connect 3 1 1 0;
+#X connect 3 1 5 0;
#X connect 4 0 2 0;
-#X connect 5 0 6 0;
-#X connect 5 1 3 0;
+#X connect 5 0 1 0;
+#X connect 5 1 6 1;
#X connect 6 0 2 0;
#X restore 249 100 pd smpToFreq;
#X obj 120 96 samplerate~;
@@ -51,110 +121,68 @@
#X connect 5 0 4 0;
#X connect 6 0 1 0;
#X connect 7 0 3 0;
-#X restore 477 252 pd find_freq;
-#N canvas 0 0 450 300 set_tables 0;
-#X obj 42 22 inlet basename;
-#X obj 246 21 inlet channels;
-#X obj 71 253 outlet left;
-#X obj 269 249 outlet right;
-#X obj 242 59 > 1;
-#X obj 135 133 zexy/demultiplex;
-#X msg 123 186 set 0-\$1;
-#X msg 188 186 set 0-\$1;
-#X msg 273 187 set 1-\$1;
-#X connect 0 0 5 0;
-#X connect 1 0 4 0;
-#X connect 4 0 5 1;
-#X connect 5 0 6 0;
+#X restore 192 201 pd find_freq;
+#X obj 356 160 -;
+#X obj 277 72 sample_unpack;
+#X obj 231 252 zexy/demultiplex;
+#X obj 315 223 > 1;
+#X msg 210 277 list 0-\$1 0-\$1;
+#X msg 326 275 list 0-\$1 1-\$1;
+#X obj 218 5 inlet;
+#X obj 455 3 loadbang;
+#X obj 455 35 tof/argument 1;
+#X msg 459 66 sample \$1;
+#X connect 5 0 4 0;
+#X connect 6 0 5 1;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 7 2 8 0;
+#X connect 7 3 9 0;
+#X connect 7 4 6 0;
+#X connect 7 4 0 0;
+#X connect 7 5 6 1;
+#X connect 7 5 1 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 9 0 8 1;
+#X connect 10 0 3 0;
+#X connect 11 0 3 0;
+#X connect 12 0 7 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 7 0;
+#X restore 309 212 pd parse_sample;
+#X obj 163 199 *;
+#X obj 311 390 unpack s s;
+#X msg 306 419 set \$1;
+#X msg 371 424 set \$1;
+#X obj 167 143 f 1;
+#X obj 190 167 t b f;
+#X connect 0 0 9 0;
+#X connect 1 0 8 0;
+#X connect 3 0 6 0;
#X connect 5 0 7 0;
-#X connect 5 1 8 0;
-#X connect 5 1 6 0;
#X connect 6 0 2 0;
-#X connect 7 0 3 0;
+#X connect 7 0 4 0;
#X connect 8 0 3 0;
-#X restore 569 250 pd set_tables;
-#N canvas 0 0 450 300 start_phase 0;
-#X obj 76 249 outlet;
-#X obj 76 115 f;
-#X obj 244 26 inlet speed;
-#X obj 68 28 inlet bang;
-#X obj 74 145 < 0;
-#X connect 1 0 4 0;
-#X connect 2 0 1 1;
-#X connect 3 0 1 0;
-#X connect 4 0 0 0;
-#X restore 77 225 pd start_phase;
-#X msg 225 209 1;
-#X obj 96 397 spigot;
-#X msg 392 191 0;
-#X obj 258 409 t b b;
-#X msg 260 431 0;
-#X obj 368 510 line~;
-#X obj 64 547 *~;
-#X obj 218 551 *~;
-#X msg 368 484 \$1 5;
-#X obj 513 147 sample_unpack;
-#X obj 575 211 -;
-#X obj 51 466 +~ 0;
-#X obj 41 46 route bang float;
-#X obj 19 150 t b b b b b;
-#X obj 320 162 t b b b b b;
-#X connect 0 0 34 0;
-#X connect 1 0 33 0;
-#X connect 3 0 4 1;
-#X connect 4 0 1 0;
-#X connect 4 1 23 0;
-#X connect 4 2 23 0;
-#X connect 5 0 28 0;
-#X connect 7 0 29 0;
-#X connect 8 0 4 0;
-#X connect 9 0 8 0;
-#X connect 10 0 9 0;
-#X connect 10 0 21 1;
-#X connect 11 0 4 2;
-#X connect 12 0 4 2;
-#X connect 13 0 30 0;
-#X connect 14 0 30 0;
-#X connect 15 0 14 0;
-#X connect 15 1 36 0;
-#X connect 16 0 17 0;
-#X connect 17 0 18 0;
-#X connect 18 0 31 0;
-#X connect 19 0 8 1;
-#X connect 20 0 5 0;
-#X connect 20 1 7 0;
-#X connect 21 0 4 1;
-#X connect 22 0 23 1;
-#X connect 23 0 25 0;
-#X connect 24 0 23 1;
-#X connect 25 0 26 0;
-#X connect 25 1 14 0;
-#X connect 26 0 23 1;
-#X connect 27 0 29 1;
-#X connect 27 0 28 1;
-#X connect 28 0 2 0;
-#X connect 29 0 6 0;
-#X connect 30 0 27 0;
-#X connect 31 0 19 0;
-#X connect 31 3 20 0;
-#X connect 31 4 20 1;
-#X connect 31 5 32 0;
-#X connect 31 6 32 1;
-#X connect 31 6 33 1;
-#X connect 32 0 19 1;
-#X connect 32 0 1 1;
-#X connect 33 0 5 0;
-#X connect 33 0 7 0;
-#X connect 34 0 35 0;
-#X connect 34 1 15 0;
-#X connect 34 2 31 0;
-#X connect 35 0 13 0;
-#X connect 35 1 21 0;
-#X connect 35 2 12 0;
-#X connect 35 3 22 0;
-#X connect 35 4 31 0;
-#X connect 36 0 3 0;
-#X connect 36 1 11 0;
-#X connect 36 2 13 0;
-#X connect 36 3 24 0;
-#X connect 36 4 31 0;
+#X connect 8 0 5 0;
+#X connect 9 0 11 0;
+#X connect 9 1 11 1;
+#X connect 9 2 12 0;
+#X connect 10 0 11 2;
+#X connect 10 0 17 0;
+#X connect 11 0 1 0;
+#X connect 11 1 6 1;
+#X connect 11 1 7 1;
+#X connect 12 0 18 0;
+#X connect 12 1 14 0;
+#X connect 12 3 8 1;
+#X connect 12 4 1 1;
+#X connect 13 0 11 3;
+#X connect 14 0 15 0;
+#X connect 14 1 16 0;
+#X connect 15 0 3 0;
+#X connect 16 0 5 0;
+#X connect 17 0 13 0;
+#X connect 18 0 17 0;
+#X connect 18 1 13 1;
diff --git a/tof/sample_record~.pd b/tof/sample_record~.pd
index 0f89007..404c60e 100644
--- a/tof/sample_record~.pd
+++ b/tof/sample_record~.pd
@@ -16,34 +16,34 @@
#X obj 259 165 t f f;
#X obj 123 464 sel -1;
#X obj 249 398 cyclone/record~;
-#X obj 480 158 tof/sample_unpack;
#X obj 295 644 tof/sample_packel;
#X msg 300 596 start 0 \, end \$1;
#X obj 305 65 route sample;
+#X obj 480 158 tof/sample_unpack;
#X connect 0 0 6 0;
#X connect 1 0 16 0;
-#X connect 2 0 20 0;
+#X connect 2 0 19 0;
#X connect 3 0 4 0;
#X connect 4 0 5 0;
-#X connect 5 0 17 0;
-#X connect 5 0 18 1;
+#X connect 5 0 17 1;
+#X connect 5 0 20 0;
#X connect 6 0 11 0;
#X connect 7 0 16 0;
#X connect 8 0 7 1;
#X connect 9 0 6 0;
#X connect 10 0 16 0;
#X connect 11 0 15 0;
-#X connect 12 0 19 0;
+#X connect 12 0 18 0;
#X connect 13 0 11 0;
#X connect 14 0 13 0;
#X connect 14 1 6 0;
#X connect 15 0 12 0;
-#X connect 15 1 19 0;
-#X connect 17 2 12 1;
-#X connect 17 3 9 0;
-#X connect 17 3 10 0;
-#X connect 17 4 8 0;
-#X connect 19 0 18 0;
-#X connect 20 0 4 0;
-#X connect 20 1 14 0;
-#X connect 20 1 7 0;
+#X connect 15 1 18 0;
+#X connect 18 0 17 0;
+#X connect 19 0 4 0;
+#X connect 19 1 14 0;
+#X connect 19 1 7 0;
+#X connect 20 2 9 0;
+#X connect 20 2 10 0;
+#X connect 20 3 8 0;
+#X connect 20 6 12 1;
diff --git a/tof/sample_shifft~-help.pd b/tof/sample_shifft~-help.pd
new file mode 100644
index 0000000..8532e64
--- /dev/null
+++ b/tof/sample_shifft~-help.pd
@@ -0,0 +1,27 @@
+#N canvas 1219 290 679 377 10;
+#X obj 87 331 dac~;
+#X obj 28 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
+-1;
+#X obj 44 193 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+1;
+#X floatatom 95 224 5 0 0 0 - - -;
+#X obj 192 280 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+-1 -1;
+#X text 48 157 Inlet 1 \, bang: Play sample once;
+#X text 63 190 Inlet 1 \, float: Start/stop playing looped sample;
+#X text 216 251 Inlet 3 \, float: Duration in ms;
+#X text 217 275 Inlet 3 \, bang: Reset to orginal duration;
+#X text 34 28 Description: Pitchshifts or timestretches a sample with
+the FFT method;
+#X text 32 58 Tags: Sound Sample Play;
+#X obj 458 120 tof/sample smpfft amen.wav;
+#X text 133 222 Inlet 2 \, float: Pitch (1=normal);
+#X msg 173 253 10000;
+#X obj 28 296 tof/sample_shifft~ smpfft;
+#X connect 1 0 14 0;
+#X connect 2 0 14 0;
+#X connect 3 0 14 1;
+#X connect 4 0 14 2;
+#X connect 13 0 14 2;
+#X connect 14 0 0 0;
+#X connect 14 1 0 1;
diff --git a/tof/sample_shifft~.pd b/tof/sample_shifft~.pd
new file mode 100644
index 0000000..964ceb6
--- /dev/null
+++ b/tof/sample_shifft~.pd
@@ -0,0 +1,704 @@
+#N canvas 1165 17 932 773 10;
+#X obj 39 -13 inlet;
+#X obj 67 646 outlet~;
+#X obj 224 650 outlet~;
+#X obj 76 615 *~;
+#X obj 230 619 *~;
+#X obj 51 56 route bang float;
+#X obj 233 -59 inlet pitch;
+#X obj 429 1 inlet duration;
+#X obj 669 198 s \$0-samplength;
+#X obj 648 226 s \$0-sampstart;
+#X obj 52 396 sig~ 1;
+#N canvas 0 0 450 300 fft_setup 0;
+#N canvas 1078 212 565 454 hann-window 0;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0-hann 1024 float 0;
+#X coords 0 1 1023 0 300 100 1;
+#X restore 82 311 graph;
+#X obj 378 165 osc~;
+#X obj 378 190 *~ -0.5;
+#X obj 378 214 +~ 0.5;
+#X obj 331 247 tabwrite~ \$0-hann;
+#X obj 38 173 /;
+#X obj 127 142 samplerate~;
+#X obj 177 204 swap;
+#X obj 177 228 /;
+#X obj 49 201 * 1000;
+#X obj 38 115 t f b f;
+#X msg 173 92 resize \$1;
+#X obj 173 116 s \$0-hann;
+#X msg 382 130 0;
+#X obj 330 131 t f b;
+#X text 15 8 calculate Hann window table (variable window size) and
+constants window-hz (fundamental frequency of analysis) \, window-sec
+and window-msec (analysis window size in seconds and msec).;
+#X obj 49 228 s \$0-hann-msec;
+#X obj 38 251 s \$0-hann-sec;
+#X obj 177 252 s \$0-hann-hz;
+#X obj 329 96 r \$0-hann-hz;
+#X obj 37 88 r \$0-hann-size;
+#X connect 1 0 2 0;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 9 0;
+#X connect 5 0 17 0;
+#X connect 6 0 5 1;
+#X connect 6 0 7 1;
+#X connect 7 0 8 0;
+#X connect 7 1 8 1;
+#X connect 8 0 18 0;
+#X connect 9 0 16 0;
+#X connect 10 0 5 0;
+#X connect 10 0 7 0;
+#X connect 10 1 6 0;
+#X connect 10 2 11 0;
+#X connect 11 0 12 0;
+#X connect 13 0 1 1;
+#X connect 14 0 1 0;
+#X connect 14 1 4 0;
+#X connect 14 1 13 0;
+#X connect 19 0 14 0;
+#X connect 20 0 10 0;
+#X restore 150 107 pd hann-window;
+#N canvas 1110 82 1040 686 phase-tables 0;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0prev-imag 4096 float 0;
+#X coords 0 1000 4096 -1000 400 300 1;
+#X restore 169 326 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0prev-real 4096 float 0;
+#X coords 0 500 4096 -500 400 300 1;
+#X restore 168 11 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0prev-imagR 4096 float 0;
+#X coords 0 1000 4096 -1000 400 300 1;
+#X restore 591 327 graph;
+#N canvas 0 0 450 300 (subpatch) 0;
+#X array \$0prev-realR 4096 float 0;
+#X coords 0 500 4096 -500 400 300 1;
+#X restore 590 12 graph;
+#X restore 151 80 pd phase-tables;
+#X obj 58 80 loadbang;
+#X msg 58 105 1024;
+#X obj 57 133 s \$0-hann-size;
+#X msg 99 103 4096;
+#X connect 2 0 3 0;
+#X connect 3 0 4 0;
+#X connect 5 0 4 0;
+#X restore 215 457 pd fft_setup;
+#N canvas 1376 362 840 564 fft 0;
+#X obj 550 236 block~;
+#X msg 550 211 set \$1 4;
+#X text 511 152 'set' message to block;
+#X text 514 169 allows variable size;
+#X obj 551 187 r \$0-hann-size;
+#N canvas 1202 86 1270 824 read-windows 0;
+#X obj 10 769 *~;
+#X obj 298 773 *~;
+#X obj 11 795 outlet~;
+#X obj 298 798 outlet~;
+#X obj 321 731 tabreceive~ \$0-hann;
+#X obj 11 660 -~;
+#X text 221 525 "back" window 1/4 cycle behind "front" one;
+#X obj 314 235 r \$0-hann-size;
+#X obj 298 706 tabread4~;
+#X obj 10 714 tabread4~;
+#X obj 97 338 * 4;
+#X obj -30 432 *~ 1;
+#X obj -45 337 samphold~;
+#X obj 97 371 phasor~;
+#X obj 100 403 -~ 0.5;
+#X obj 27 582 +~;
+#X obj -8 381 r \$0-samplength;
+#X obj 150 98 inlet~ pitch;
+#X obj -44 95 inlet~ loc;
+#X obj 169 412 *~ 1;
+#X obj 81 541 *~;
+#X obj 114 477 samphold~;
+#X obj 155 617 samphold~;
+#X obj 193 505 / 4;
+#X obj 154 578 *~ 1;
+#X obj -44 246 wrap~;
+#X obj 295 275 t f f f;
+#X obj 753 711 tabread4~;
+#X obj 468 707 tabread4~;
+#X obj 466 773 *~;
+#X obj 754 777 *~;
+#X obj 466 799 outlet~;
+#X obj 753 802 outlet~;
+#X obj -2 461 r \$0-sampstart;
+#X obj -22 492 +~ 0;
+#X obj 81 219 t b f;
+#X obj 59 269 samplerate~;
+#X obj 97 305 /;
+#X obj 735 29 inlet tables;
+#X obj 735 339 unpack s s;
+#X msg 640 433 set \$1;
+#X msg 800 434 set \$1;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 4 0 1 1;
+#X connect 4 0 0 1;
+#X connect 4 0 29 1;
+#X connect 4 0 30 1;
+#X connect 5 0 9 0;
+#X connect 5 0 28 0;
+#X connect 7 0 26 0;
+#X connect 8 0 1 0;
+#X connect 9 0 0 0;
+#X connect 10 0 13 0;
+#X connect 11 0 34 0;
+#X connect 12 0 11 0;
+#X connect 13 0 14 0;
+#X connect 13 0 12 1;
+#X connect 13 0 21 1;
+#X connect 13 0 22 1;
+#X connect 14 0 20 0;
+#X connect 15 0 5 0;
+#X connect 15 0 8 0;
+#X connect 15 0 27 0;
+#X connect 16 0 11 1;
+#X connect 17 0 19 0;
+#X connect 17 0 24 0;
+#X connect 18 0 25 0;
+#X connect 19 0 21 0;
+#X connect 20 0 15 1;
+#X connect 21 0 20 1;
+#X connect 22 0 5 1;
+#X connect 23 0 24 1;
+#X connect 24 0 22 0;
+#X connect 25 0 12 0;
+#X connect 26 0 35 0;
+#X connect 26 1 19 1;
+#X connect 26 2 23 0;
+#X connect 27 0 30 0;
+#X connect 28 0 29 0;
+#X connect 29 0 31 0;
+#X connect 30 0 32 0;
+#X connect 33 0 34 1;
+#X connect 34 0 15 0;
+#X connect 35 0 36 0;
+#X connect 35 1 37 1;
+#X connect 36 0 37 0;
+#X connect 37 0 10 0;
+#X connect 38 0 39 0;
+#X connect 39 0 40 0;
+#X connect 39 1 41 0;
+#X connect 40 0 9 0;
+#X connect 40 0 8 0;
+#X connect 41 0 27 0;
+#X connect 41 0 28 0;
+#X restore 199 241 pd read-windows;
+#N canvas 1148 0 821 686 fft-shift 0;
+#X obj 51 477 *~;
+#X obj 18 477 *~;
+#X obj 18 499 -~;
+#X obj 167 475 *~;
+#X obj 136 475 *~;
+#X obj 136 497 +~;
+#X obj 109 193 *~;
+#X obj 78 193 *~;
+#X obj 50 193 *~;
+#X obj 19 193 *~;
+#X obj 19 218 +~;
+#X obj 127 379 *~;
+#X obj 20 622 *~;
+#X obj 238 430 rfft~;
+#X obj 108 161 rfft~;
+#X obj 19 564 rifft~;
+#X obj 21 646 outlet~;
+#X obj 97 379 *~;
+#X obj 97 401 +~;
+#X obj 124 218 -~;
+#X obj 18 431 *~;
+#X obj 51 432 *~;
+#X obj 19 349 +~ 1e-15;
+#X obj 19 598 *~;
+#X obj 52 598 tabreceive~ \$0-hann;
+#X obj 127 643 expr 2/(3*$f1);
+#X obj 97 425 q8_rsqrt~;
+#X text 272 5 recall previous output amplitude. Its phase will be added
+to the phase difference we measure from two windows in the the recorded
+sound.;
+#X obj 121 69 *~;
+#X obj 89 69 *~;
+#X obj 89 91 +~;
+#X obj 159 94 q8_rsqrt~;
+#X obj 159 71 +~ 1e-20;
+#X obj 73 119 *~;
+#X obj 19 118 *~;
+#X obj 29 245 lrshift~ 1;
+#X obj 24 269 lrshift~ -1;
+#X obj 141 245 lrshift~ 1;
+#X obj 133 269 lrshift~ -1;
+#X obj 19 325 +~;
+#X obj 125 331 +~;
+#X text 247 66 divide by the magnitude to make a unit-magnitude complex
+amplitude (phase only). The 1e-20 is to prevent overflows. q8_rsqrt~
+is reciprocal square root.;
+#X text 247 165 Take FT of the window in back. Multiply its conjugate
+by the normalized previous output. The result has the magnitude of
+the input sound and phase (previous output phase) minus (back window
+phase).;
+#X text 249 370 Normalize again \, this time taking care to salt each
+channel with 1e-15 so that we get a unit complex number even if everything
+was zero heretofore.;
+#X text 288 427 Now take the FT of the forward window and multiply
+it by the unit complex number from above. The magnitude will be that
+of the forward window and the phase will be the previous output phase
+plus the phase difference between the two analysis windows -- except
+that if "lock" is on \, they will be modified to agree progressively
+better with the inter-channel phase relationships of the input.;
+#X text 249 242 If "lock" is on \, encourage neighboring channels to
+stay in phase by adding the two neighboring complex amplitudes. The
+result will tend toward the channel with the strongest amplitude. If
+the phase relationships between channels in the output and those in
+the input are in parallel \, then neighboring channels of the quotient
+will all have the same phase and this will not change any phases. (lrshift
+shifts the signal to the left or right depending on its argument.)
+;
+#X text 259 126 Read two windows \, one 1/4 length behind the other
+\, of the input sound \, with Hann window function (see inside).;
+#X obj 109 136 inlet~;
+#X obj 237 409 inlet~;
+#X obj 159 312 *~ 1;
+#X obj 35 300 *~ 1;
+#X obj 137 543 tabsend~ \$0prev-imag;
+#X obj 136 567 tabsend~ \$0prev-real;
+#X obj 127 622 r \$0-hann-size;
+#X obj 20 8 tabreceive~ \$0prev-real;
+#X obj 73 29 tabreceive~ \$0prev-imag;
+#X connect 0 0 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 2 0 52 0;
+#X connect 3 0 5 1;
+#X connect 4 0 5 0;
+#X connect 5 0 15 1;
+#X connect 5 0 51 0;
+#X connect 6 0 19 1;
+#X connect 7 0 19 0;
+#X connect 8 0 10 1;
+#X connect 9 0 10 0;
+#X connect 10 0 36 0;
+#X connect 10 0 35 0;
+#X connect 10 0 39 0;
+#X connect 11 0 18 1;
+#X connect 12 0 16 0;
+#X connect 13 0 1 1;
+#X connect 13 0 3 1;
+#X connect 13 1 0 1;
+#X connect 13 1 4 1;
+#X connect 14 0 9 1;
+#X connect 14 0 7 1;
+#X connect 14 1 6 1;
+#X connect 14 1 8 1;
+#X connect 15 0 23 0;
+#X connect 17 0 18 0;
+#X connect 18 0 26 0;
+#X connect 19 0 37 0;
+#X connect 19 0 38 0;
+#X connect 19 0 40 0;
+#X connect 20 0 1 0;
+#X connect 20 0 4 0;
+#X connect 21 0 0 0;
+#X connect 21 0 3 0;
+#X connect 22 0 17 1;
+#X connect 22 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 12 0;
+#X connect 24 0 23 1;
+#X connect 25 0 12 1;
+#X connect 26 0 20 1;
+#X connect 26 0 21 1;
+#X connect 28 0 30 1;
+#X connect 29 0 30 0;
+#X connect 30 0 32 0;
+#X connect 31 0 33 1;
+#X connect 31 0 34 1;
+#X connect 32 0 31 0;
+#X connect 33 0 8 0;
+#X connect 33 0 7 0;
+#X connect 34 0 9 0;
+#X connect 34 0 6 0;
+#X connect 35 0 50 0;
+#X connect 36 0 50 0;
+#X connect 37 0 49 0;
+#X connect 38 0 49 0;
+#X connect 39 0 22 0;
+#X connect 40 0 11 0;
+#X connect 40 0 11 1;
+#X connect 40 0 21 0;
+#X connect 47 0 14 0;
+#X connect 48 0 13 0;
+#X connect 49 0 40 1;
+#X connect 50 0 39 1;
+#X connect 53 0 25 0;
+#X connect 54 0 29 1;
+#X connect 54 0 29 0;
+#X connect 54 0 34 0;
+#X connect 55 0 28 1;
+#X connect 55 0 28 0;
+#X connect 55 0 33 0;
+#X restore 196 286 pd fft-shift;
+#X obj 199 330 outlet~;
+#X obj 100 106 inlet~;
+#X obj 221 115 inlet~;
+#N canvas 1148 0 821 686 fft-shift 0;
+#X obj 51 477 *~;
+#X obj 18 477 *~;
+#X obj 18 499 -~;
+#X obj 167 475 *~;
+#X obj 136 475 *~;
+#X obj 136 497 +~;
+#X obj 109 193 *~;
+#X obj 78 193 *~;
+#X obj 50 193 *~;
+#X obj 19 193 *~;
+#X obj 19 218 +~;
+#X obj 127 379 *~;
+#X obj 20 622 *~;
+#X obj 238 430 rfft~;
+#X obj 108 161 rfft~;
+#X obj 19 564 rifft~;
+#X obj 21 646 outlet~;
+#X obj 97 379 *~;
+#X obj 97 401 +~;
+#X obj 124 218 -~;
+#X obj 18 431 *~;
+#X obj 51 432 *~;
+#X obj 19 349 +~ 1e-15;
+#X obj 19 598 *~;
+#X obj 52 598 tabreceive~ \$0-hann;
+#X obj 127 643 expr 2/(3*$f1);
+#X obj 97 425 q8_rsqrt~;
+#X text 272 5 recall previous output amplitude. Its phase will be added
+to the phase difference we measure from two windows in the the recorded
+sound.;
+#X obj 121 69 *~;
+#X obj 89 69 *~;
+#X obj 89 91 +~;
+#X obj 159 94 q8_rsqrt~;
+#X obj 159 71 +~ 1e-20;
+#X obj 73 119 *~;
+#X obj 19 118 *~;
+#X obj 29 245 lrshift~ 1;
+#X obj 24 269 lrshift~ -1;
+#X obj 141 245 lrshift~ 1;
+#X obj 133 269 lrshift~ -1;
+#X obj 19 325 +~;
+#X obj 125 331 +~;
+#X text 247 66 divide by the magnitude to make a unit-magnitude complex
+amplitude (phase only). The 1e-20 is to prevent overflows. q8_rsqrt~
+is reciprocal square root.;
+#X text 247 165 Take FT of the window in back. Multiply its conjugate
+by the normalized previous output. The result has the magnitude of
+the input sound and phase (previous output phase) minus (back window
+phase).;
+#X text 249 370 Normalize again \, this time taking care to salt each
+channel with 1e-15 so that we get a unit complex number even if everything
+was zero heretofore.;
+#X text 288 427 Now take the FT of the forward window and multiply
+it by the unit complex number from above. The magnitude will be that
+of the forward window and the phase will be the previous output phase
+plus the phase difference between the two analysis windows -- except
+that if "lock" is on \, they will be modified to agree progressively
+better with the inter-channel phase relationships of the input.;
+#X text 249 242 If "lock" is on \, encourage neighboring channels to
+stay in phase by adding the two neighboring complex amplitudes. The
+result will tend toward the channel with the strongest amplitude. If
+the phase relationships between channels in the output and those in
+the input are in parallel \, then neighboring channels of the quotient
+will all have the same phase and this will not change any phases. (lrshift
+shifts the signal to the left or right depending on its argument.)
+;
+#X text 259 126 Read two windows \, one 1/4 length behind the other
+\, of the input sound \, with Hann window function (see inside).;
+#X obj 109 136 inlet~;
+#X obj 237 409 inlet~;
+#X obj 159 312 *~ 1;
+#X obj 35 300 *~ 1;
+#X obj 127 622 r \$0-hann-size;
+#X obj 137 543 tabsend~ \$0prev-imagR;
+#X obj 136 567 tabsend~ \$0prev-realR;
+#X obj 20 8 tabreceive~ \$0prev-realR;
+#X obj 73 29 tabreceive~ \$0prev-imagR;
+#X connect 0 0 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 2 0 53 0;
+#X connect 3 0 5 1;
+#X connect 4 0 5 0;
+#X connect 5 0 15 1;
+#X connect 5 0 52 0;
+#X connect 6 0 19 1;
+#X connect 7 0 19 0;
+#X connect 8 0 10 1;
+#X connect 9 0 10 0;
+#X connect 10 0 36 0;
+#X connect 10 0 35 0;
+#X connect 10 0 39 0;
+#X connect 11 0 18 1;
+#X connect 12 0 16 0;
+#X connect 13 0 1 1;
+#X connect 13 0 3 1;
+#X connect 13 1 0 1;
+#X connect 13 1 4 1;
+#X connect 14 0 9 1;
+#X connect 14 0 7 1;
+#X connect 14 1 6 1;
+#X connect 14 1 8 1;
+#X connect 15 0 23 0;
+#X connect 17 0 18 0;
+#X connect 18 0 26 0;
+#X connect 19 0 37 0;
+#X connect 19 0 38 0;
+#X connect 19 0 40 0;
+#X connect 20 0 1 0;
+#X connect 20 0 4 0;
+#X connect 21 0 0 0;
+#X connect 21 0 3 0;
+#X connect 22 0 17 1;
+#X connect 22 0 17 0;
+#X connect 22 0 20 0;
+#X connect 23 0 12 0;
+#X connect 24 0 23 1;
+#X connect 25 0 12 1;
+#X connect 26 0 20 1;
+#X connect 26 0 21 1;
+#X connect 28 0 30 1;
+#X connect 29 0 30 0;
+#X connect 30 0 32 0;
+#X connect 31 0 33 1;
+#X connect 31 0 34 1;
+#X connect 32 0 31 0;
+#X connect 33 0 8 0;
+#X connect 33 0 7 0;
+#X connect 34 0 9 0;
+#X connect 34 0 6 0;
+#X connect 35 0 50 0;
+#X connect 36 0 50 0;
+#X connect 37 0 49 0;
+#X connect 38 0 49 0;
+#X connect 39 0 22 0;
+#X connect 40 0 11 0;
+#X connect 40 0 11 1;
+#X connect 40 0 21 0;
+#X connect 47 0 14 0;
+#X connect 48 0 13 0;
+#X connect 49 0 40 1;
+#X connect 50 0 39 1;
+#X connect 51 0 25 0;
+#X connect 54 0 29 1;
+#X connect 54 0 29 0;
+#X connect 54 0 34 0;
+#X connect 55 0 28 1;
+#X connect 55 0 28 0;
+#X connect 55 0 33 0;
+#X restore 299 285 pd fft-shift;
+#X obj 298 326 outlet~;
+#X obj 319 99 inlet tables;
+#X connect 1 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 6 0;
+#X connect 5 1 6 1;
+#X connect 5 2 10 0;
+#X connect 5 3 10 1;
+#X connect 6 0 7 0;
+#X connect 8 0 5 0;
+#X connect 9 0 5 1;
+#X connect 10 0 11 0;
+#X connect 12 0 5 2;
+#X restore 16 460 pd fft;
+#N canvas 0 0 842 452 parse_sample 0;
+#X obj 392 336 outlet end;
+#X obj 493 335 outlet start;
+#X obj 600 336 outlet length;
+#X obj 265 336 outlet tables;
+#X obj 127 338 outlet base_freq;
+#N canvas 0 0 450 300 find_freq 0;
+#X obj 83 241 outlet;
+#N canvas 330 268 450 300 smpToFreq 0;
+#X obj 41 35 inlet;
+#X obj 135 179 samplerate~;
+#X obj 65 346 outlet;
+#X obj 41 67 sel 0;
+#X msg 46 154 0;
+#X obj 126 104 t b f;
+#X obj 132 281 /;
+#X connect 0 0 3 0;
+#X connect 1 0 6 0;
+#X connect 3 0 4 0;
+#X connect 3 1 5 0;
+#X connect 4 0 2 0;
+#X connect 5 0 1 0;
+#X connect 5 1 6 1;
+#X connect 6 0 2 0;
+#X restore 249 100 pd smpToFreq;
+#X obj 120 96 samplerate~;
+#X obj 87 67 t f b;
+#X obj 80 169 *;
+#X obj 78 119 /;
+#X obj 269 12 inlet length;
+#X obj 72 18 inlet samples;
+#X connect 1 0 4 1;
+#X connect 2 0 5 1;
+#X connect 3 0 5 0;
+#X connect 3 1 2 0;
+#X connect 4 0 0 0;
+#X connect 5 0 4 0;
+#X connect 6 0 1 0;
+#X connect 7 0 3 0;
+#X restore 192 201 pd find_freq;
+#X obj 356 160 -;
+#X obj 277 72 sample_unpack;
+#X obj 231 252 zexy/demultiplex;
+#X obj 315 223 > 1;
+#X msg 210 277 list 0-\$1 0-\$1;
+#X msg 326 275 list 0-\$1 1-\$1;
+#X obj 218 5 inlet;
+#X obj 455 3 loadbang;
+#X obj 455 35 tof/argument 1;
+#X msg 459 66 sample \$1;
+#X connect 5 0 4 0;
+#X connect 6 0 5 1;
+#X connect 6 0 2 0;
+#X connect 7 0 5 0;
+#X connect 7 2 8 0;
+#X connect 7 3 9 0;
+#X connect 7 4 6 0;
+#X connect 7 4 0 0;
+#X connect 7 5 6 1;
+#X connect 7 5 1 0;
+#X connect 8 0 10 0;
+#X connect 8 1 11 0;
+#X connect 9 0 8 1;
+#X connect 10 0 3 0;
+#X connect 11 0 3 0;
+#X connect 12 0 7 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 7 0;
+#X restore 579 166 pd parse_sample;
+#N canvas 0 0 597 611 speed 0;
+#X obj 92 506 outlet;
+#X obj 278 22 inlet default;
+#X obj 43 16 inlet user;
+#X obj 93 75 route bang;
+#X obj 185 358 f;
+#X obj 154 124 /;
+#X msg 148 102 1000 \$1;
+#X obj 245 354 spigot 1;
+#X obj 125 255 t b b;
+#X msg 243 289 1;
+#X obj 154 159 t f b;
+#X msg 196 198 0;
+#X connect 1 0 7 0;
+#X connect 1 0 4 1;
+#X connect 2 0 3 0;
+#X connect 3 0 8 0;
+#X connect 3 1 6 0;
+#X connect 4 0 0 0;
+#X connect 5 0 10 0;
+#X connect 6 0 5 0;
+#X connect 7 0 0 0;
+#X connect 8 0 4 0;
+#X connect 8 1 9 0;
+#X connect 9 0 7 1;
+#X connect 10 0 0 0;
+#X connect 10 1 11 0;
+#X connect 11 0 7 1;
+#X restore 443 79 pd speed;
+#N canvas 0 0 892 551 player 0;
+#X obj 702 496 outlet get_sample;
+#X obj 91 29 inlet bang;
+#X obj 253 38 inlet float;
+#X obj 388 34 inlet pitch;
+#X obj 85 501 outlet~ phase;
+#X msg 172 265 0;
+#X obj 80 318 tof/phasorshot~;
+#X obj 75 249 sig~ 1;
+#X msg 310 229 1;
+#X msg 267 232 0;
+#X msg 501 440 1;
+#X msg 437 434 0;
+#X obj 350 144 sel 0;
+#N canvas 0 0 450 300 start_phase 0;
+#X obj 76 249 outlet;
+#X obj 76 115 f;
+#X obj 244 26 inlet speed;
+#X obj 68 28 inlet bang;
+#X obj 74 145 < 0;
+#X connect 1 0 4 0;
+#X connect 2 0 1 1;
+#X connect 3 0 1 0;
+#X connect 4 0 0 0;
+#X restore 132 200 pd start_phase;
+#X obj 271 365 spigot;
+#X obj 377 395 t b b;
+#X msg 380 430 0;
+#X obj 283 310 == 0;
+#X obj 254 266 t f f;
+#X obj 94 107 t b b b;
+#X obj 378 178 t b b b;
+#X obj 519 292 t b b;
+#X obj 561 38 inlet speed;
+#X obj 416 516 line~;
+#X msg 416 490 \$1 5;
+#X obj 555 510 outlet~ output;
+#X connect 1 0 19 0;
+#X connect 2 0 12 0;
+#X connect 3 0 13 1;
+#X connect 5 0 6 1;
+#X connect 6 0 4 0;
+#X connect 6 1 14 0;
+#X connect 6 2 14 0;
+#X connect 7 0 6 0;
+#X connect 8 0 18 0;
+#X connect 9 0 18 0;
+#X connect 10 0 24 0;
+#X connect 11 0 24 0;
+#X connect 12 0 11 0;
+#X connect 12 1 20 0;
+#X connect 13 0 6 1;
+#X connect 14 0 15 0;
+#X connect 15 0 16 0;
+#X connect 15 1 11 0;
+#X connect 16 0 14 1;
+#X connect 16 0 24 0;
+#X connect 17 0 14 1;
+#X connect 18 0 6 2;
+#X connect 18 1 17 0;
+#X connect 19 0 13 0;
+#X connect 19 1 9 0;
+#X connect 19 2 21 0;
+#X connect 20 0 5 0;
+#X connect 20 1 8 0;
+#X connect 20 2 21 0;
+#X connect 21 0 10 0;
+#X connect 21 1 0 0;
+#X connect 22 0 7 0;
+#X connect 23 0 25 0;
+#X connect 24 0 23 0;
+#X restore 75 290 pd player;
+#X connect 0 0 5 0;
+#X connect 3 0 1 0;
+#X connect 4 0 2 0;
+#X connect 5 0 15 0;
+#X connect 5 1 15 1;
+#X connect 5 2 13 0;
+#X connect 6 0 10 0;
+#X connect 6 0 15 2;
+#X connect 7 0 14 0;
+#X connect 10 0 12 1;
+#X connect 12 0 3 0;
+#X connect 12 1 4 0;
+#X connect 13 0 14 1;
+#X connect 13 1 12 2;
+#X connect 13 3 9 0;
+#X connect 13 4 8 0;
+#X connect 14 0 15 3;
+#X connect 15 0 12 0;
+#X connect 15 1 3 1;
+#X connect 15 1 4 1;
diff --git a/tof/sample_unpack-help.pd b/tof/sample_unpack-help.pd
index 2b09c06..0032ad3 100644
--- a/tof/sample_unpack-help.pd
+++ b/tof/sample_unpack-help.pd
@@ -1,12 +1,10 @@
#N canvas 1416 305 763 458 10;
#X obj 60 387 print rate;
#X obj 137 388 print file;
-#X obj 216 387 print length;
-#X obj 445 385 print channels;
-#X obj 309 385 print table_basename;
+#X obj 321 386 print channels;
#X msg 172 225 bang;
-#X obj 554 385 print end;
-#X obj 621 384 print start;
+#X obj 430 386 print end;
+#X obj 497 385 print start;
#X msg 62 196 sample smpunpck;
#X text 67 48 Tags: Sample Sound;
#X text 65 29 Description: Outputs a sample's information;
@@ -21,15 +19,17 @@
-1;
#X text 391 77 Load a sound file (wav);
#X obj 62 267 tof/sample_unpack;
-#X connect 5 0 18 0;
-#X connect 8 0 18 0;
+#X obj 576 385 print size;
+#X obj 219 387 print basename;
+#X connect 3 0 16 0;
+#X connect 6 0 16 0;
+#X connect 12 0 11 0;
+#X connect 13 0 12 0;
#X connect 14 0 13 0;
-#X connect 15 0 14 0;
-#X connect 16 0 15 0;
-#X connect 18 0 0 0;
-#X connect 18 1 1 0;
-#X connect 18 2 2 0;
-#X connect 18 3 4 0;
-#X connect 18 4 3 0;
-#X connect 18 5 6 0;
-#X connect 18 6 7 0;
+#X connect 16 0 0 0;
+#X connect 16 1 1 0;
+#X connect 16 2 18 0;
+#X connect 16 3 2 0;
+#X connect 16 4 4 0;
+#X connect 16 5 5 0;
+#X connect 16 6 17 0;
diff --git a/tof/sample_unpack.pd b/tof/sample_unpack.pd
index 656b500..8719d35 100644
--- a/tof/sample_unpack.pd
+++ b/tof/sample_unpack.pd
@@ -7,27 +7,27 @@
#X msg 20 173 return \$1;
#X obj 118 178 cyclone/prepend set;
#X obj 59 433 outlet rate;
-#X obj 464 435 outlet channels;
-#X obj 310 435 outlet table_basename;
+#X obj 329 431 outlet channels;
#X obj 136 434 outlet file;
-#X obj 220 434 outlet size;
-#X obj 59 285 unpack f s f s f f f;
-#X obj 591 434 outlet end;
-#X obj 697 434 outlet start;
+#X obj 631 435 outlet size;
+#X obj 443 432 outlet end;
+#X obj 533 433 outlet start;
#X obj 44 64 route sample bang;
-#X connect 0 0 15 0;
+#X obj 60 285 unpack f s s f f f f;
+#X obj 219 432 outlet basename;
+#X connect 0 0 13 0;
#X connect 2 0 4 0;
#X connect 2 1 6 0;
-#X connect 3 0 12 0;
+#X connect 3 0 14 0;
#X connect 4 0 5 0;
#X connect 5 0 1 0;
#X connect 6 0 1 1;
-#X connect 12 0 7 0;
-#X connect 12 1 10 0;
-#X connect 12 2 11 0;
-#X connect 12 3 9 0;
-#X connect 12 4 8 0;
-#X connect 12 5 13 0;
-#X connect 12 6 14 0;
-#X connect 15 0 2 0;
-#X connect 15 1 4 0;
+#X connect 13 0 2 0;
+#X connect 13 1 4 0;
+#X connect 14 0 7 0;
+#X connect 14 1 9 0;
+#X connect 14 2 15 0;
+#X connect 14 3 8 0;
+#X connect 14 4 11 0;
+#X connect 14 5 12 0;
+#X connect 14 6 10 0;