#N canvas 2 1 658 618 12; #X obj 114 560 pddp/pddplink http://puredata.info/dev/pddp -text pddp; #X obj 8 3 cnv 15 90 578 empty empty empty 20 12 0 14 -233017 -66577 0; #X text 14 213 ARGUMENTS:; #X text 19 323 EXAMPLES:; #X text 22 471 SEE ALSO:; #N canvas 58 0 407 256 Related_Objects 0; #X text 25 11 Native Pd Objects; #X text 16 166 Externals and other object libraries; #X obj 16 41 tabread~; #X obj 165 41 tabwrite; #X obj 240 41 tabwrite~; #X obj 16 67 tabsend~; #X obj 92 67 tabreceive~; #X obj 192 67 tabplay~; #X obj 269 67 table; #X text 15 124 [array]; #X obj 16 94 soundfiler; #X text 78 124 and fft objects.; #X text 21 187 [tabdump]; #X obj 112 94 tabread4~; #X text 20 207 [tabenv]; #X obj 203 94 getsize; #X obj 274 94 setsize; #X text 238 207 [arraysize]; #X text 238 186 [score]; #X text 114 186 [linear_path]; #X text 114 207 [plot]; #X obj 90 41 tabread; #X restore 114 508 pd Related_Objects; #N canvas 80 0 659 614 More_Info 0; #X text 46 564 Also See:; #X obj 125 564 pddp/pddplink all_about_arrays.pd -text all_about_arrays; #X text 21 8 WHAT IS INTERPOLATION?; #X text 38 34 "Interpolation" is a word which described a sophisticated way to "connect-the-dots". (This is over simplified \, but effective for the time being.); #X text 17 85 Let's say for example that we have an array whose values are: 0 \, 6 \, 5; #X text 36 120 There are 3 elements in this array \, right? Well \, using [tabread] we could successfully read only 3 numbers. But interpolation allows us to fill in the gaps between those values in a meaningful way. For example \, we can assume that between 0 and 6 \, we might find 4.5! We can also assume that the slope from 0 to 6 will be sharper than the slope from 6 to 5 In this way \, using [tabread4] will allow us to create much smoother lines and curves between our "dots".; #X text 35 254 However \, this process is much more complicated than mere "smoothing". 4-point interpolation incorporates a sophisticated formula to intelligently create meaningful increments between values in an array. For example: we could draw a few points on a baseball diamond between the pitcher's mound and home plate. Those points could represent the path a ball travels after a pitch. Using 4-point interpolation \, we might be able to assume the positions of the ball between our "known" points and determine whether the pitch was a fastball or a curve ball.; #X text 35 419 There are different formulas used to interpolate arrays. Each method has a sort of niche where it is most comfortable and most effective. Pd \, like most contemporary audio software \, uses 4-point interpolation which is also known as "Hermite" interpolation. It is the most "intelligent" 2-dimensional method of interpolation.; #N canvas 167 0 570 613 What_does_it_really_do? 0; #X text 20 10 Let's see [tabread4] at work...; #N canvas 0 0 450 300 graph36 0; #X array original_array 10 float 1; #A 0 -0.324999 -0.274999 -0.0749997 0.174999 -0.624998 0.649998 0.599998 0.524998 -0.749997 -0.774996; #X coords 0 1 9 -1 200 140 1; #X restore 292 9 graph; #X text 37 158 The array above has only 10 elements. You can draw new shapes with your mouse.; #X obj 14 202 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -24198 -1 -1; #X obj 88 246 until; #N canvas 0 0 450 300 graph37 0; #X array interpolation 1000 float 0; #X coords 0 1 999 -1 200 140 1; #X restore 304 445 graph; #X obj 84 341 tabread4 original_array; #X obj 88 270 f; #X obj 118 270 + 1; #X obj 84 368 tabwrite interpolation; #X obj 87 295 t f f; #X obj 14 222 t b b; #X msg 48 250 0; #X obj 86 318 / 100; #X msg 88 222 1000; #X text 36 395 The array below has 1000 elements. At this resolution \, you will see the overall effect of 4-point interpolation.; #X connect 3 0 11 0; #X connect 4 0 7 0; #X connect 6 0 9 0; #X connect 7 0 8 0; #X connect 7 0 10 0; #X connect 8 0 7 1; #X connect 10 0 13 0; #X connect 10 1 9 1; #X connect 11 0 14 0; #X connect 11 1 12 0; #X connect 12 0 7 1; #X connect 13 0 6 0; #X connect 14 0 4 0; #X restore 36 526 pd What_does_it_really_do?; #X restore 114 534 pd More_Info; #X floatatom 161 443 0 0 0 3 - - -; #X floatatom 116 364 0 0 1000 1 location - -; #X msg 286 389 set another_table; #X text 106 162 Set - the "set " message allows you to read from dynamic sources. You can change the source at any time using the "set" message.; #X text 29 266 OUTLETS:; #X obj 486 442 table another_table; #X text 106 323 Open the tables and use your mouse to draw new values in the arrays - otherwise [tabread] will always output "0".; #X text 39 34 INLETS:; #X text 112 470 doc/2.control.examples/15.arrays.pd; #X text 113 489 doc/2.control.examples/16.more.arrays.pd; #X obj 21 10 tabread4; #X text 111 10 - READ NUMBERS FROM A TABLE WITH 4-POINT INTERPOLATION ; #X text 105 213 One - the argument informs [tabread4] which array to read. The array must exist in an open Pd patch/canvas or an error message will appear in the terminal window.; #X text 104 265 One - outputs a floating point number representing an interpolation of the array value corresponding to the location described at the inlet.; #X text 107 34 Float - A float at the left inlet will move to the corresponding location in the table's array. The lowest valid number is "0" which represents the first element of the array. The highest valid number is a fraction below the actual length of the array. Each fractional increment between the lower and upper bounds of the array will produce an interpolation of the actual array values at the outlet.; #X msg 248 364 set davids_array; #N canvas 0 0 450 300 graph27 0; #X array davids_array 10 float 1; #A 0 0 0.749989 0 -0.849987 0 -0.349995 0.949986 0 -0.699989 -0.399994 ; #X coords 0 1 9 -1 100 40 1; #X restore 526 380 graph; #X text 249 444 interpolation; #X obj 121 390 / 100; #X obj 161 416 tabread4 davids_array; #X text 158 561 - Dave Sabine \, May 2 \, 2003; #X connect 8 0 25 0; #X connect 9 0 26 0; #X connect 22 0 26 0; #X connect 25 0 26 0; #X connect 26 0 7 0;