From d6db646c6c84ff6bf4144f3d07785fa30bbd0e58 Mon Sep 17 00:00:00 2001 From: Thomas O Fredericks Date: Sat, 29 May 2010 18:38:22 +0000 Subject: Adding some pitchshifting and timestretching sample players svn path=/trunk/externals/tof/; revision=13575 --- tof/sample.pd | 126 ++++---- tof/sample_granule~-help.pd | 42 +++ tof/sample_granule~.pd | 427 +++++++++++++++++++++++++++ tof/sample_packel-help.pd | 12 +- tof/sample_play~-help.pd | 18 +- tof/sample_play~.pd | 290 +++++++++--------- tof/sample_record~.pd | 28 +- tof/sample_shifft~-help.pd | 27 ++ tof/sample_shifft~.pd | 704 ++++++++++++++++++++++++++++++++++++++++++++ tof/sample_unpack-help.pd | 32 +- tof/sample_unpack.pd | 34 +-- 11 files changed, 1489 insertions(+), 251 deletions(-) create mode 100644 tof/sample_granule~-help.pd create mode 100644 tof/sample_granule~.pd create mode 100644 tof/sample_shifft~-help.pd create mode 100644 tof/sample_shifft~.pd 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; -- cgit v1.2.1