#N canvas 0 0 697 521 10; #X text 15 7 Table Feedback Tutorial; #X text 15 497 2008 (GPL) Claude Heiland-Allen ; #X obj 17 390 table \$0-table 515; #X obj 17 280 tabosc4~ \$0-table; #X obj 17 360 tabwrite~ \$0-table; #X obj 187 320 metro 100; #X obj 187 300 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X floatatom 17 260 5 0 0 0 - - -; #X obj 37 320 dac~; #X msg 97 178 sinesum 512 1; #X obj 97 198 s \$0-table; #X obj 17 159 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1; #X msg 17 183 \; pd dsp \$1; #X obj 97 158 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #N canvas 0 0 450 300 \$0-hz 0; #X obj 68 129 outlet; #X obj 68 49 bang~; #X obj 68 69 samplerate~; #X obj 68 89 change; #X obj 68 109 / 512; #X connect 1 0 2 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 0 0; #X restore 17 235 pd \$0-hz; #X text 15 27 Part 5: Blocks And Phase; #X msg 131 257 0; #X text 15 67 Here's how to fix the ugliness of the previous example: simply connect the [metro] to reset the phase of the oscillator to "0".; #X text 15 117 This works because both [tabwrite~] and [tabosc4~] phase inlet only respond on exact block boundaries.; #X text 189 157 1 \, 2: turn DSP on and initialise table; #X text 189 277 4: start feedback process; #X text 189 227 3: calculate playback frequency; #X text 15 427 Some ugliness remains \, however: bashing the phase to 0 creates discontinuities \, which sound like horrible rhythmic clicking noises. We can fix that using double buffering.; #X connect 3 0 4 0; #X connect 3 0 8 0; #X connect 3 0 8 1; #X connect 5 0 4 0; #X connect 5 0 16 0; #X connect 6 0 5 0; #X connect 7 0 3 0; #X connect 9 0 10 0; #X connect 11 0 12 0; #X connect 13 0 9 0; #X connect 14 0 7 0; #X connect 16 0 3 1;