hi,
i recently ran into a problem that makes me feel i don't quite understand PD's dataflow yet.
i refer to PD's example patch
"B16.long-varispeed.pd"
that deals with the problem of long tables and proper playback in arbitrary speeds. i admit that i don't fully understand what's going on there, but i got it to work with no problem on even very long files by just copy/pasting miller's solution ;-)
now here's my problem:
in the example patch, all audio-signal cords are connected directly (to snapshot~ and tabread4~). i wanted to do the same thing with send~/receive~ pairs in order have a "master phasor" to drive several tabread4~ objects in abstractions.
but when i do this i'm getting bad clicks.
i'm pretty sure this has something to do with PD's block size and a send~ object obviously being one block behind. am i wrong ?
i'm really trying to get my head around this and understand the nature of this problem. could someone explain what is really going on here technically ? or probably suggest a solution ?
example patch is attached
best
oliver
Sometimes, a receive~ doesn't get the input of a send~ until the next tick (it depends on what order they are sorted in). To control that, put in sub-patches as shown (in a digfferent context) in the example, G05.execution.order.pd
cheers Miller
On Mon, Sep 12, 2016 at 11:36:47PM +0200, oliver wrote:
hi,
i recently ran into a problem that makes me feel i don't quite understand PD's dataflow yet.
i refer to PD's example patch
"B16.long-varispeed.pd"
that deals with the problem of long tables and proper playback in arbitrary speeds. i admit that i don't fully understand what's going on there, but i got it to work with no problem on even very long files by just copy/pasting miller's solution ;-)
now here's my problem:
in the example patch, all audio-signal cords are connected directly (to snapshot~ and tabread4~). i wanted to do the same thing with send~/receive~ pairs in order have a "master phasor" to drive several tabread4~ objects in abstractions.
but when i do this i'm getting bad clicks.
i'm pretty sure this has something to do with PD's block size and a send~ object obviously being one block behind. am i wrong ?
i'm really trying to get my head around this and understand the nature of this problem. could someone explain what is really going on here technically ? or probably suggest a solution ?
example patch is attached
best
oliver
-- \\\\\\\\\\\\\\\\\\\\\\\\\\\\ /////////////// http://pendler.klingt.org ////////////// \\\\\\\\ http://oliver.klingt.org \\\\\\\ //////////////////////////////////////////////////////// \\\\ LIVE-BUILDER (music improvisation tool): \\\ ////////////// http://tinyurl.com/qaohv35 ////////////// \\\\\\\\\\\\\\\\\\\\\\\\\\\\
#N canvas 74 113 1203 820 10; #X obj 527 97 phasor~, f 11; #X floatatom 23 77 5 -100 1000 0 - - -, f 5; #X obj 527 147 tabread4~ $0-tab; #X obj 526 119 *~ 1e+006; #X obj 881 118 samplerate~; #X obj 881 142 / 2; #X obj 870 56 loadbang; #X obj 870 193 tabwrite~ $0-tab; #X obj 881 166 osc~; #X obj 870 97 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #X msg 894 79 ; pd dsp 1; #X obj 869 221 table $0-tab 1e+006; #X text 863 27 and will take about 20 seconds to fill.; #X text 863 11 *** The table is now 1 million points ,; #X obj 527 69 / 1e+006; #X text 74 74 playback speed , samples/sec; #X text 602 89 naive way: just; #X text 601 100 run a phasor; #X text 601 112 into tabread4~; #X text 534 46 cycles/sec; #X text 534 36 convert to; #X text 514 216 BAD; #X text 109 156 <- reset phase. 0.5 causes trouble for the "bad" way. ; #X obj 23 26 loadbang; #X msg 23 50 1000; #X obj 23 100 s $0-speed; #X obj 527 13 r $0-speed; #X obj 26 182 hsl 128 15 0 1 0 0 empty empty empty -2 -8 0 10 -262144 -1 -1 6350 1; #X obj 23 204 s $0-playbackpos; #X msg 23 156 0.5; #X msg 59 156 0.01; #X obj 590 70 r $0-playbackpos; #X obj 15 264 cnv 15 580 500 empty empty this_works 20 12 0 14 -233017 -159808 0; #X obj 607 264 cnv 15 580 500 empty empty this_doesn't_____(same_stuff_but_uses_send~_instead_of_patch_cords) 20 12 0 14 -261682 -159808 0; #X obj 252 497 metro 100; #X obj 31 400 phasor~; #X obj 252 527 snapshot~; #X obj 251 426 loadbang; #X msg 252 449 1; #X obj 221 606 +; #X obj 32 574 tabread4~ $0-tab; #X obj 250 598 f; #X obj 194 582 t f f; #X floatatom 305 623 8 0 0 0 - - -, f 8; #X obj 221 630 t f b; #X obj 254 659 f; #X obj 221 659 -; #X floatatom 300 575 8 0 0 0 - - -, f 8; #X obj 203 686 -; #X obj 252 478 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 32 428 -~ 0.5; #X obj 123 725 + 0.5; #X floatatom 203 713 8 0 0 0 - - -, f 8; #X obj 383 490 samplerate~; #X obj 337 517 /; #X obj 337 490 t f b; #X obj 254 558 +; #X obj 123 703 / 10000; #X obj 32 453 *~ 10000; #X obj 337 541 * 10000; #X text 304 636 new onset is phase plus old onset; #X obj 194 328 * 1e+006; #X text 301 589 extrapolated phase of next sample; #X text 278 660 new onset minus old onset; #X text 266 686 back up phasor output by amount the onset advanced ; #X text 264 699 (approximately zero but not exactly because of; #X text 266 713 truncation error!); #X obj 194 354 t b f; #X text 253 328 convert to samples; #X text 236 354 set both last-onset and previous-onset; #X text 215 376 ... and also reset phasor.; #X text 119 741 convert phase back to range 0-1; #X text 92 440 convert phase to; #X text 92 454 range +/-5000; #X obj 31 374 / 10000; #X text 81 377 cycles/sec; #X text 81 367 convert to; #X text 309 440 in order to change onset to reflect it; #X text 309 424 Each 100 msec , poll phase of phasor~; #X text 371 510 extrapolate snapshot of phase by one; #X text 370 523 sample to sync with next block; #X text 40 651 GOOD; #X msg 193 379 0; #X obj 31 349 r $0-speed; #X obj 194 305 r $0-playbackpos; #X obj 838 493 metro 100; #X obj 615 356 phasor~; #X obj 838 523 snapshot~; #X obj 837 422 loadbang; #X msg 838 445 1; #X obj 807 602 +; #X obj 616 570 tabread4~ $0-tab; #X obj 836 594 f; #X obj 780 578 t f f; #X floatatom 891 619 8 0 0 0 - - -, f 8; #X obj 807 626 t f b; #X obj 840 655 f; #X obj 807 655 -; #X floatatom 886 571 8 0 0 0 - - -, f 8; #X obj 789 682 -; #X obj 838 474 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1 1; #X obj 616 384 -~ 0.5; #X obj 709 721 + 0.5; #X floatatom 789 709 8 0 0 0 - - -, f 8; #X obj 969 486 samplerate~; #X obj 923 513 /; #X obj 923 486 t f b; #X obj 840 554 +; #X obj 709 699 / 10000; #X obj 616 409 *~ 10000; #X obj 923 537 * 10000; #X text 890 632 new onset is phase plus old onset; #X obj 780 324 * 1e+006; #X text 887 585 extrapolated phase of next sample; #X text 864 656 new onset minus old onset; #X text 852 682 back up phasor output by amount the onset advanced ; #X text 850 695 (approximately zero but not exactly because of; #X text 852 709 truncation error!); #X obj 780 350 t b f; #X text 839 324 convert to samples; #X text 822 350 set both last-onset and previous-onset; #X text 801 372 ... and also reset phasor.; #X text 705 737 convert phase back to range 0-1; #X text 670 397 convert phase to; #X text 670 411 range +/-5000; #X obj 615 330 / 10000; #X text 665 333 cycles/sec; #X text 665 323 convert to; #X text 895 436 in order to change onset to reflect it; #X text 895 420 Each 100 msec , poll phase of phasor~; #X text 957 506 extrapolate snapshot of phase by one; #X text 956 519 sample to sync with next block; #X msg 779 375 0; #X obj 615 305 r $0-speed; #X obj 780 301 r $0-playbackpos; #X obj 15 282 cnv 15 580 10 empty empty empty 20 12 0 14 -233017 -159808 0; #X obj 607 283 cnv 15 580 10 empty empty empty 20 12 0 14 -261682 -159808 0; #X obj 615 431 send~ $0-phasor; #X obj 616 544 receive~ $0-phasor; #X obj 718 493 receive~ $0-phasor; #X text 610 645 SHOULD BE GOOD , BUT CRACKLES; #X obj 513 193 dac~; #X obj 526 169 *~; #X obj 555 171 hsl 50 15 0.01 1 1 0 empty empty volume 10 7 0 10 -257985 -1 -1 0 1; #X obj 552 192 - 0.01; #X obj 19 623 dac~; #X obj 32 599 *~; #X obj 61 601 hsl 50 15 0.01 1 1 0 empty empty volume 10 7 0 10 -257985 -1 -1 0 1; #X obj 58 622 - 0.01; #X obj 611 619 dac~; #X obj 624 595 *~; #X obj 653 597 hsl 50 15 0.01 1 1 0 empty empty volume 10 7 0 10 -257985 -1 -1 0 1; #X obj 650 618 - 0.01; #X obj 7 132 del 12000; #X connect 0 0 3 0; #X connect 1 0 25 0; #X connect 2 0 142 0; #X connect 3 0 2 0; #X connect 4 0 5 0; #X connect 5 0 8 0; #X connect 6 0 9 0; #X connect 6 0 10 0; #X connect 8 0 7 0; #X connect 9 0 4 0; #X connect 9 0 7 0; #X connect 14 0 0 0; #X connect 23 0 24 0; #X connect 23 0 153 0; #X connect 24 0 1 0; #X connect 26 0 14 0; #X connect 27 0 28 0; #X connect 29 0 27 0; #X connect 30 0 27 0; #X connect 31 0 0 1; #X connect 34 0 36 0; #X connect 35 0 50 0; #X connect 36 0 56 0; #X connect 37 0 38 0; #X connect 38 0 49 0; #X connect 39 0 41 0; #X connect 39 0 44 0; #X connect 39 0 40 1; #X connect 39 0 43 0; #X connect 40 0 146 0; #X connect 41 0 39 1; #X connect 42 0 48 0; #X connect 42 1 39 0; #X connect 44 0 45 1; #X connect 44 0 46 0; #X connect 44 1 45 0; #X connect 45 0 46 1; #X connect 46 0 48 1; #X connect 48 0 52 0; #X connect 48 0 57 0; #X connect 49 0 34 0; #X connect 50 0 58 0; #X connect 51 0 35 1; #X connect 53 0 54 1; #X connect 54 0 59 0; #X connect 55 0 54 0; #X connect 55 1 53 0; #X connect 56 0 42 0; #X connect 56 0 47 0; #X connect 57 0 51 0; #X connect 58 0 36 0; #X connect 58 0 40 0; #X connect 59 0 56 1; #X connect 61 0 67 0; #X connect 67 0 82 0; #X connect 67 1 45 1; #X connect 67 1 39 1; #X connect 74 0 35 0; #X connect 74 0 55 0; #X connect 82 0 42 0; #X connect 83 0 74 0; #X connect 84 0 61 0; #X connect 85 0 87 0; #X connect 86 0 101 0; #X connect 87 0 107 0; #X connect 88 0 89 0; #X connect 89 0 100 0; #X connect 90 0 92 0; #X connect 90 0 95 0; #X connect 90 0 91 1; #X connect 90 0 94 0; #X connect 91 0 150 0; #X connect 92 0 90 1; #X connect 93 0 99 0; #X connect 93 1 90 0; #X connect 95 0 96 1; #X connect 95 0 97 0; #X connect 95 1 96 0; #X connect 96 0 97 1; #X connect 97 0 99 1; #X connect 99 0 103 0; #X connect 99 0 108 0; #X connect 100 0 85 0; #X connect 101 0 109 0; #X connect 102 0 86 1; #X connect 104 0 105 1; #X connect 105 0 110 0; #X connect 106 0 105 0; #X connect 106 1 104 0; #X connect 107 0 93 0; #X connect 107 0 98 0; #X connect 108 0 102 0; #X connect 109 0 137 0; #X connect 110 0 107 1; #X connect 112 0 118 0; #X connect 118 0 132 0; #X connect 118 1 96 1; #X connect 118 1 90 1; #X connect 125 0 86 0; #X connect 125 0 106 0; #X connect 132 0 93 0; #X connect 133 0 125 0; #X connect 134 0 112 0; #X connect 138 0 91 0; #X connect 139 0 87 0; #X connect 142 0 141 0; #X connect 142 0 141 1; #X connect 143 0 144 0; #X connect 144 0 142 1; #X connect 146 0 145 0; #X connect 146 0 145 1; #X connect 147 0 148 0; #X connect 148 0 146 1; #X connect 150 0 149 0; #X connect 150 0 149 1; #X connect 151 0 152 0; #X connect 152 0 150 1; #X connect 153 0 29 0;
Pd-list@lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list