aboutsummaryrefslogtreecommitdiff
path: root/pitchShift~.pd
diff options
context:
space:
mode:
Diffstat (limited to 'pitchShift~.pd')
-rw-r--r--pitchShift~.pd770
1 files changed, 770 insertions, 0 deletions
diff --git a/pitchShift~.pd b/pitchShift~.pd
new file mode 100644
index 0000000..ae2091f
--- /dev/null
+++ b/pitchShift~.pd
@@ -0,0 +1,770 @@
+#N canvas 656 399 678 298 10;
+#N canvas 449 458 721 323 processing 0;
+#N canvas 0 110 466 295 hann-window 0;
+#X obj 288 130 osc~;
+#X obj 288 155 *~ -0.5;
+#X obj 288 179 +~ 0.5;
+#X obj 26 118 samplerate~;
+#X obj 26 142 /;
+#X msg 161 71 resize \$1;
+#X msg 292 95 0;
+#X obj 240 96 t f b;
+#X obj 26 94 t b f f;
+#X text 22 8 calculate Hann window table (variable window size) and
+constants window-hz (fundamental frequency of analysis).;
+#X obj 241 212 tabwrite~ \$0.hann;
+#X obj 26 67 r \$0.window.size;
+#X obj 26 166 s \$0.window.hz;
+#X obj 161 95 s \$0.hann;
+#X obj 240 70 r \$0.window.hz;
+#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 12 0;
+#X connect 5 0 13 0;
+#X connect 6 0 0 1;
+#X connect 7 0 0 0;
+#X connect 7 1 6 0;
+#X connect 7 1 10 0;
+#X connect 8 0 3 0;
+#X connect 8 1 4 1;
+#X connect 8 2 5 0;
+#X connect 11 0 8 0;
+#X connect 14 0 7 0;
+#X restore 307 277 pd hann-window;
+#X obj 16 15 inlet~;
+#X obj 19 238 outlet~;
+#X obj 309 27 inlet;
+#X obj 306 160 table \$0.prev.imag.l 4096;
+#X obj 306 179 table \$0.prev.real.l 4096;
+#X obj 306 198 table \$0.prev.imag.r 4096;
+#X obj 306 217 table \$0.prev.real.r 4096;
+#X obj 306 236 table \$0.hann;
+#X msg 511 64 2048;
+#X obj 511 42 loadbang;
+#N canvas 41 57 750 770 fft.analysis.l 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 236 175 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 21 728 block~;
+#X obj 19 349 +~ 1e-15;
+#X obj 19 598 *~;
+#X obj 127 643 expr 2/(3*$f1);
+#X msg 21 703 set \$1 4;
+#X obj 97 425 q8_rsqrt~;
+#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 +~;
+#N canvas 0 0 554 671 read-windows 0;
+#X obj 18 358 line~;
+#X obj 16 523 outlet~;
+#X obj 125 531 outlet~;
+#X text 220 313 "back" window 1/4 cycle behind "front" one;
+#X obj 18 266 pack f f;
+#X obj 31 143 t b f;
+#X obj 31 184 -;
+#X obj 90 145 *;
+#X obj 90 114 - 1;
+#X obj 90 57 mtof;
+#X obj 90 77 / 440;
+#X obj 90 38 + 69;
+#X obj 353 123 samplerate~;
+#X obj 328 102 t f b;
+#X obj 328 141 /;
+#X obj 328 163 * 1000;
+#X text 376 163 window size (ms);
+#X obj 18 207 f;
+#X obj 16 492 *~;
+#X obj 124 503 *~;
+#X obj 18 75 bang~;
+#X obj 31 164 100;
+#X obj 197 286 *;
+#X obj 206 263 t b f;
+#X text 235 288 stretched window size (ms);
+#X obj 220 210 / 4;
+#X text 252 207 computation time for an overlap of 4;
+#X obj 18 230 / 4;
+#X obj 71 229 / 4;
+#X obj 17 393 +~;
+#X obj 193 310 / 4;
+#X obj 135 369 / 4;
+#X text 47 395 '+' since a bigger value in vd~ means 'earlier'.;
+#X text 114 110 subtract speed of read-out \, when;
+#X text 114 122 delay-time is static;
+#X text 134 37 convert cents of halftones to read-out speed;
+#X text 41 229 *);
+#X text 93 229 *);
+#X text 162 367 *);
+#X text 67 336 *);
+#X obj 18 287 t l b;
+#X obj 43 309 100;
+#X obj 43 333 / 4;
+#X text 57 165 initial delay (ms);
+#X text 71 307 initial delay (ms);
+#X text 21 556 *);
+#X text 24 572 it seems that if a time is specified in ms instead of
+samples \, the value has to be divided by the overlap factor (4 in
+this case) in order for the vd~ to read out the desired amount of samples.
+i'm still unsure what the reason for this might be.;
+#X obj 90 -6 r \$0.transpo;
+#X obj 328 81 r \$0.window.size;
+#X obj 164 468 tabreceive~ \$0.hann;
+#X obj 16 441 vd~ \$0.input.l;
+#X obj 123 443 vd~ \$0.input.l;
+#X obj 88 195 r \$0.latency;
+#X obj 102 274 r \$0.latency;
+#X connect 0 0 29 0;
+#X connect 0 0 51 0;
+#X connect 4 0 40 0;
+#X connect 5 0 21 0;
+#X connect 5 1 6 1;
+#X connect 6 0 17 1;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 10 0 22 0;
+#X connect 11 0 9 0;
+#X connect 12 0 14 1;
+#X connect 13 0 14 0;
+#X connect 13 1 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 7 1;
+#X connect 15 0 23 0;
+#X connect 15 0 25 0;
+#X connect 17 0 27 0;
+#X connect 18 0 1 0;
+#X connect 19 0 2 0;
+#X connect 20 0 17 0;
+#X connect 21 0 6 0;
+#X connect 22 0 30 0;
+#X connect 23 0 22 0;
+#X connect 23 1 22 1;
+#X connect 25 0 28 0;
+#X connect 27 0 4 0;
+#X connect 28 0 4 1;
+#X connect 29 0 50 0;
+#X connect 30 0 31 0;
+#X connect 31 0 29 1;
+#X connect 40 0 0 0;
+#X connect 40 1 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 0 0;
+#X connect 47 0 11 0;
+#X connect 48 0 13 0;
+#X connect 49 0 19 1;
+#X connect 49 0 18 1;
+#X connect 50 0 18 0;
+#X connect 51 0 19 0;
+#X connect 52 0 21 1;
+#X connect 53 0 41 1;
+#X restore 442 106 pd read-windows;
+#X text 318 304 the left part is taken from miller puckette's audio
+example I07.phase.vocoder.pd from the doc.;
+#X obj 52 598 tabreceive~ \$0.hann;
+#X obj 127 622 r \$0.window.size;
+#X obj 35 300 *~ 1;
+#X obj 159 312 *~ 1;
+#X obj 21 679 r \$0.window.size;
+#X obj 20 8 tabreceive~ \$0.prev.real.l;
+#X obj 73 29 tabreceive~ \$0.prev.imag.l;
+#X obj 137 543 tabsend~ \$0.prev.imag.l;
+#X obj 136 567 tabsend~ \$0.prev.real.l;
+#X connect 0 0 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 2 0 51 0;
+#X connect 3 0 5 1;
+#X connect 4 0 5 0;
+#X connect 5 0 15 1;
+#X connect 5 0 50 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 24 0;
+#X connect 17 0 18 0;
+#X connect 18 0 27 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 23 0 17 1;
+#X connect 23 0 17 0;
+#X connect 23 0 20 0;
+#X connect 24 0 12 0;
+#X connect 25 0 12 1;
+#X connect 26 0 22 0;
+#X connect 27 0 20 1;
+#X connect 27 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 45 0;
+#X connect 36 0 45 0;
+#X connect 37 0 46 0;
+#X connect 38 0 46 0;
+#X connect 39 0 23 0;
+#X connect 40 0 11 0;
+#X connect 40 0 11 1;
+#X connect 40 0 21 0;
+#X connect 41 0 14 0;
+#X connect 41 1 13 0;
+#X connect 43 0 24 1;
+#X connect 44 0 25 0;
+#X connect 45 0 39 1;
+#X connect 46 0 40 1;
+#X connect 47 0 26 0;
+#X connect 48 0 29 1;
+#X connect 48 0 29 0;
+#X connect 48 0 34 0;
+#X connect 49 0 28 1;
+#X connect 49 0 28 0;
+#X connect 49 0 33 0;
+#X restore 18 142 pd fft.analysis.l;
+#X obj 309 122 s \$0.transpo;
+#X obj 511 87 s \$0.window.size;
+#X obj 77 17 inlet~;
+#X obj 98 239 outlet~;
+#X obj 16 96 delwrite~ \$0.input.l 1000;
+#X obj 76 67 delwrite~ \$0.input.r 1000;
+#N canvas 40 20 750 770 fft.analysis.r 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 236 175 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 21 728 block~;
+#X obj 19 349 +~ 1e-15;
+#X obj 19 598 *~;
+#X obj 127 643 expr 2/(3*$f1);
+#X msg 21 703 set \$1 4;
+#X obj 97 425 q8_rsqrt~;
+#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 +~;
+#N canvas 139 105 510 684 read-windows 0;
+#X obj 18 358 line~;
+#X obj 16 523 outlet~;
+#X obj 125 531 outlet~;
+#X text 220 313 "back" window 1/4 cycle behind "front" one;
+#X obj 18 266 pack f f;
+#X obj 31 143 t b f;
+#X obj 31 184 -;
+#X obj 90 145 *;
+#X obj 90 114 - 1;
+#X obj 90 57 mtof;
+#X obj 90 77 / 440;
+#X obj 90 38 + 69;
+#X obj 353 123 samplerate~;
+#X obj 328 102 t f b;
+#X obj 328 141 /;
+#X obj 328 163 * 1000;
+#X text 376 163 window size (ms);
+#X obj 18 207 f;
+#X obj 16 492 *~;
+#X obj 124 503 *~;
+#X obj 18 75 bang~;
+#X obj 31 164 100;
+#X obj 197 286 *;
+#X obj 206 263 t b f;
+#X text 235 288 stretched window size (ms);
+#X obj 220 210 / 4;
+#X text 252 207 computation time for an overlap of 4;
+#X obj 18 230 / 4;
+#X obj 71 229 / 4;
+#X obj 17 393 +~;
+#X obj 193 310 / 4;
+#X obj 135 369 / 4;
+#X text 47 395 '+' since a bigger value in vd~ means 'earlier'.;
+#X text 114 110 subtract speed of read-out \, when;
+#X text 114 122 delay-time is static;
+#X text 134 37 convert cents of halftones to read-out speed;
+#X text 41 229 *);
+#X text 93 229 *);
+#X text 162 367 *);
+#X text 67 336 *);
+#X obj 18 287 t l b;
+#X obj 43 309 100;
+#X obj 43 333 / 4;
+#X text 57 165 initial delay (ms);
+#X text 71 307 initial delay (ms);
+#X text 21 556 *);
+#X text 24 572 it seems that if a time is specified in ms instead of
+samples \, the value has to be divided by the overlap factor (4 in
+this case) in order for the vd~ to read out the desired amount of samples.
+i'm still unsure what the reason for this might be.;
+#X obj 90 -6 r \$0.transpo;
+#X obj 328 81 r \$0.window.size;
+#X obj 164 468 tabreceive~ \$0.hann;
+#X obj 16 441 vd~ \$0.input.r;
+#X obj 123 443 vd~ \$0.input.r;
+#X obj 88 195 r \$0.latency;
+#X obj 102 274 r \$0.latency;
+#X connect 0 0 29 0;
+#X connect 0 0 51 0;
+#X connect 4 0 40 0;
+#X connect 5 0 21 0;
+#X connect 5 1 6 1;
+#X connect 6 0 17 1;
+#X connect 7 0 5 0;
+#X connect 8 0 7 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X connect 10 0 22 0;
+#X connect 11 0 9 0;
+#X connect 12 0 14 1;
+#X connect 13 0 14 0;
+#X connect 13 1 12 0;
+#X connect 14 0 15 0;
+#X connect 15 0 7 1;
+#X connect 15 0 23 0;
+#X connect 15 0 25 0;
+#X connect 17 0 27 0;
+#X connect 18 0 1 0;
+#X connect 19 0 2 0;
+#X connect 20 0 17 0;
+#X connect 21 0 6 0;
+#X connect 22 0 30 0;
+#X connect 23 0 22 0;
+#X connect 23 1 22 1;
+#X connect 25 0 28 0;
+#X connect 27 0 4 0;
+#X connect 28 0 4 1;
+#X connect 29 0 50 0;
+#X connect 30 0 31 0;
+#X connect 31 0 29 1;
+#X connect 40 0 0 0;
+#X connect 40 1 41 0;
+#X connect 41 0 42 0;
+#X connect 42 0 0 0;
+#X connect 47 0 11 0;
+#X connect 48 0 13 0;
+#X connect 49 0 19 1;
+#X connect 49 0 18 1;
+#X connect 50 0 18 0;
+#X connect 51 0 19 0;
+#X connect 52 0 21 1;
+#X connect 53 0 41 1;
+#X restore 442 106 pd read-windows;
+#X text 318 304 the left part is taken from miller puckette's audio
+example I07.phase.vocoder.pd from the doc.;
+#X obj 52 598 tabreceive~ \$0.hann;
+#X obj 127 622 r \$0.window.size;
+#X obj 35 300 *~ 1;
+#X obj 159 312 *~ 1;
+#X obj 21 679 r \$0.window.size;
+#X obj 20 8 tabreceive~ \$0.prev.real.r;
+#X obj 73 29 tabreceive~ \$0.prev.imag.r;
+#X obj 137 543 tabsend~ \$0.prev.imag.r;
+#X obj 136 567 tabsend~ \$0.prev.real.r;
+#X connect 0 0 2 1;
+#X connect 1 0 2 0;
+#X connect 2 0 15 0;
+#X connect 2 0 51 0;
+#X connect 3 0 5 1;
+#X connect 4 0 5 0;
+#X connect 5 0 15 1;
+#X connect 5 0 50 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 24 0;
+#X connect 17 0 18 0;
+#X connect 18 0 27 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 23 0 17 1;
+#X connect 23 0 17 0;
+#X connect 23 0 20 0;
+#X connect 24 0 12 0;
+#X connect 25 0 12 1;
+#X connect 26 0 22 0;
+#X connect 27 0 20 1;
+#X connect 27 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 45 0;
+#X connect 36 0 45 0;
+#X connect 37 0 46 0;
+#X connect 38 0 46 0;
+#X connect 39 0 23 0;
+#X connect 40 0 11 0;
+#X connect 40 0 11 1;
+#X connect 40 0 21 0;
+#X connect 41 0 14 0;
+#X connect 41 1 13 0;
+#X connect 43 0 24 1;
+#X connect 44 0 25 0;
+#X connect 45 0 39 1;
+#X connect 46 0 40 1;
+#X connect 47 0 26 0;
+#X connect 48 0 29 1;
+#X connect 48 0 29 0;
+#X connect 48 0 34 0;
+#X connect 49 0 28 1;
+#X connect 49 0 28 0;
+#X connect 49 0 33 0;
+#X restore 97 169 pd fft.analysis.r;
+#X obj 339 99 s \$0.latency;
+#X obj 309 56 t a a;
+#N canvas 998 307 217 230 latency 0;
+#X obj 19 22 inlet;
+#X obj 19 194 outlet;
+#X obj 19 48 / 12;
+#X obj 19 95 pow;
+#X msg 19 72 2 \$1;
+#X obj 19 117 max 1;
+#X obj 119 73 samplerate~;
+#X obj 119 93 * 0.001;
+#X obj 89 29 r \$0.window.size;
+#X obj 89 53 t a b;
+#X obj 89 115 /;
+#X obj 19 161 *;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 5 0 11 0;
+#X connect 6 0 7 0;
+#X connect 7 0 10 1;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 1 6 0;
+#X connect 10 0 11 1;
+#X connect 11 0 1 0;
+#X restore 339 77 pd latency;
+#X obj 626 31 inlet;
+#X obj 634 63 switch~;
+#X connect 1 0 16 0;
+#X connect 3 0 20 0;
+#X connect 9 0 13 0;
+#X connect 10 0 9 0;
+#X connect 11 0 2 0;
+#X connect 14 0 17 0;
+#X connect 18 0 15 0;
+#X connect 20 0 12 0;
+#X connect 20 1 21 0;
+#X connect 21 0 19 0;
+#X connect 22 0 23 0;
+#X restore 139 141 pd processing;
+#X obj 71 25 inlet~;
+#X obj 153 31 inlet~;
+#X obj 70 277 outlet~;
+#X obj 128 278 outlet~;
+#X text 268 226 based on pd doc: I07.phase.vocoder.pd;
+#X text 267 244 adapted by: Roman Haefeli;
+#X text 267 266 version: 2008-03-05;
+#X obj 71 233 tof/crossfade~ 2;
+#X obj 548 43 inlet params;
+#X obj 548 89 print PARAM_NOTFOUND;
+#X obj 214 30 tof/param /transpose 0 /g nbx;
+#X obj 221 192 tof/param /switch 0 /g tgl;
+#X obj 221 213 != 0;
+#X msg 221 237 \$1 200;
+#X obj 221 259 line~;
+#N canvas 80 84 906 756 pitchshift 0;
+#X obj 94 420 *~;
+#X obj 202 351 line~;
+#X obj 202 325 pack 0 200;
+#X obj 29 204 exp;
+#X floatatom 29 230 0 0 0 0 - - -;
+#X obj 29 320 /;
+#X obj 156 250 * 0.001;
+#X obj 29 471 cos~;
+#X obj 29 498 *~;
+#X obj 29 527 +~;
+#X obj 116 378 wrap~;
+#X obj 261 421 *~;
+#X obj 198 481 cos~;
+#X obj 198 508 *~;
+#X obj 156 277 t b f;
+#X floatatom 29 346 0 0 0 0 - - -;
+#X obj 29 373 phasor~ 0;
+#X obj 116 351 +~ 0.5;
+#X obj 29 419 -~ 0.5;
+#X obj 29 445 *~ 0.5;
+#X obj 198 420 -~ 0.5;
+#X obj 198 453 *~ 0.5;
+#X obj 29 257 - 1;
+#X obj 29 178 * 0.05776;
+#X obj 29 283 * -1;
+#X text 78 123 <-- transposition;
+#X text 116 138 (halpn_lftones);
+#X text 96 238 speed;
+#X text 95 252 change;
+#X text 64 313 tape head;
+#X text 65 326 rotation speed;
+#X obj -131 115 inlet~;
+#X obj 28 607 outlet~;
+#X obj 29 122 inlet;
+#X obj 94 472 vd~ \$0delay1;
+#X obj 260 483 vd~ \$0delay1;
+#X obj 267 147 loadbang;
+#X obj 271 176 f 10;
+#X obj 271 204 clip 1 1e+07;
+#X msg 373 157 128;
+#X obj -131 147 delwrite~ \$0delay1 10;
+#X obj 646 51 inlet;
+#X obj 654 83 switch~;
+#X connect 0 0 34 0;
+#X connect 1 0 0 1;
+#X connect 1 0 11 1;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 22 0;
+#X connect 5 0 15 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 32 0;
+#X connect 10 0 11 0;
+#X connect 10 0 20 0;
+#X connect 11 0 35 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 1;
+#X connect 14 0 5 0;
+#X connect 14 1 5 1;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 0 18 0;
+#X connect 16 0 17 0;
+#X connect 17 0 10 0;
+#X connect 18 0 19 0;
+#X connect 19 0 7 0;
+#X connect 20 0 21 0;
+#X connect 21 0 12 0;
+#X connect 22 0 24 0;
+#X connect 23 0 3 0;
+#X connect 24 0 5 0;
+#X connect 31 0 40 0;
+#X connect 33 0 23 0;
+#X connect 34 0 8 1;
+#X connect 35 0 13 1;
+#X connect 36 0 37 0;
+#X connect 37 0 38 0;
+#X connect 38 0 2 0;
+#X connect 38 0 6 0;
+#X connect 39 0 38 0;
+#X connect 41 0 42 0;
+#X restore 238 140 pd pitchshift;
+#N canvas 313 84 906 756 pitchshift 0;
+#X obj 94 420 *~;
+#X obj 202 351 line~;
+#X obj 202 325 pack 0 200;
+#X obj 29 204 exp;
+#X floatatom 29 230 0 0 0 0 - - -;
+#X obj 29 320 /;
+#X obj 156 250 * 0.001;
+#X obj 29 471 cos~;
+#X obj 29 498 *~;
+#X obj 29 527 +~;
+#X obj 116 378 wrap~;
+#X obj 261 421 *~;
+#X obj 198 481 cos~;
+#X obj 198 508 *~;
+#X obj 156 277 t b f;
+#X floatatom 29 346 0 0 0 0 - - -;
+#X obj 29 373 phasor~ 0;
+#X obj 116 351 +~ 0.5;
+#X obj 29 419 -~ 0.5;
+#X obj 29 445 *~ 0.5;
+#X obj 198 420 -~ 0.5;
+#X obj 198 453 *~ 0.5;
+#X obj 29 257 - 1;
+#X obj 29 178 * 0.05776;
+#X obj 29 283 * -1;
+#X text 78 123 <-- transposition;
+#X text 116 138 (halpn_lftones);
+#X text 96 238 speed;
+#X text 95 252 change;
+#X text 64 313 tape head;
+#X text 65 326 rotation speed;
+#X obj -131 115 inlet~;
+#X obj 28 607 outlet~;
+#X obj 29 122 inlet;
+#X obj 267 147 loadbang;
+#X obj 271 176 f 10;
+#X obj 271 204 clip 1 1e+07;
+#X msg 373 157 128;
+#X obj 260 483 vd~ \$0delay2;
+#X obj 93 471 vd~ \$0delay2;
+#X obj -129 147 delwrite~ \$0delay2 10;
+#X obj 636 41 inlet;
+#X obj 644 73 switch~;
+#X connect 0 0 39 0;
+#X connect 1 0 0 1;
+#X connect 1 0 11 1;
+#X connect 2 0 1 0;
+#X connect 3 0 4 0;
+#X connect 4 0 22 0;
+#X connect 5 0 15 0;
+#X connect 6 0 14 0;
+#X connect 7 0 8 0;
+#X connect 8 0 9 0;
+#X connect 9 0 32 0;
+#X connect 10 0 11 0;
+#X connect 10 0 20 0;
+#X connect 11 0 38 0;
+#X connect 12 0 13 0;
+#X connect 13 0 9 1;
+#X connect 14 0 5 0;
+#X connect 14 1 5 1;
+#X connect 15 0 16 0;
+#X connect 16 0 0 0;
+#X connect 16 0 18 0;
+#X connect 16 0 17 0;
+#X connect 17 0 10 0;
+#X connect 18 0 19 0;
+#X connect 19 0 7 0;
+#X connect 20 0 21 0;
+#X connect 21 0 12 0;
+#X connect 22 0 24 0;
+#X connect 23 0 3 0;
+#X connect 24 0 5 0;
+#X connect 31 0 40 0;
+#X connect 33 0 23 0;
+#X connect 34 0 35 0;
+#X connect 35 0 36 0;
+#X connect 36 0 2 0;
+#X connect 36 0 6 0;
+#X connect 37 0 36 0;
+#X connect 38 0 13 1;
+#X connect 39 0 8 1;
+#X connect 41 0 42 0;
+#X restore 328 140 pd pitchshift;
+#X obj 313 64 tof/param /method 0 /g tgl;
+#X obj 313 85 == 0;
+#X obj 548 65 tof/param route;
+#X connect 0 0 8 2;
+#X connect 0 1 8 3;
+#X connect 1 0 0 0;
+#X connect 1 0 8 0;
+#X connect 1 0 16 0;
+#X connect 2 0 0 1;
+#X connect 2 0 8 1;
+#X connect 2 0 17 0;
+#X connect 8 0 3 0;
+#X connect 8 1 4 0;
+#X connect 9 0 20 0;
+#X connect 11 0 0 2;
+#X connect 11 0 16 1;
+#X connect 11 0 17 1;
+#X connect 12 0 13 0;
+#X connect 13 0 14 0;
+#X connect 14 0 15 0;
+#X connect 15 0 8 4;
+#X connect 16 0 8 2;
+#X connect 17 0 8 3;
+#X connect 18 0 19 0;
+#X connect 18 0 0 3;
+#X connect 19 0 16 2;
+#X connect 19 0 17 2;
+#X connect 20 0 10 0;