diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/pddp/all_about_arrays.pd | 1403 |
1 files changed, 726 insertions, 677 deletions
diff --git a/doc/pddp/all_about_arrays.pd b/doc/pddp/all_about_arrays.pd index 57c87ca8..f1e4c9e8 100644 --- a/doc/pddp/all_about_arrays.pd +++ b/doc/pddp/all_about_arrays.pd @@ -1,677 +1,726 @@ -#N canvas 0 0 653 613 12;
-#N canvas 132 0 591 609 What_is_an_array_in_PD 0;
-#X text 27 17 WHAT IS AN ARRAY IN PURE DATA?;
-#X text 45 42 Arrays \, in most programming environments \, are considered
-to be "a sequence of objects all of which have the same variable type"
-wherein each object is called an element and the elements are numbered
-in a row 0 \, 1 \, 2 \, 3 \, etc. These numbers are called indices.
-Each index holds a corresponding value.;
-#X text 46 222 Arrays in Pd look like this:;
-#N canvas 0 0 450 300 graph18 0;
-#X array example_array 100 float 0;
-#X coords 0 1 99 -1 200 140 1;
-#X restore 277 225 graph;
-#X text 63 486 1 Right-click on the array and select "Properties" from
-the menu. Two dialogue boxes will open - one called "graph" and one
-called "array".;
-#X text 64 543 2 Then right-click again on the array and select "Help"
-from the menu. The window that opens is the table.pd help document.
-;
-#X text 45 148 All of this is true in Pd \, except that arrays in Pd
-can only hold floating point data. (other data types in Pd are called
-"lists" or "anythings" and require different tools to manipulate them.)
-;
-#X text 45 378 The array above is actually only the horizontal line!
-The rectangle surrounding the array is called a "graph". These two
-objects are separate \, but Pd creates both simoultaneously for purposes
-of convenience. These two objects together are called a "table". To
-see what I mean by all of this:;
-#X restore 43 42 pd What_is_an_array_in_PD;
-#N canvas 118 1 608 615 How_to_manipulate_arrays_in_PD 0;
-#X text 13 5 HOW TO MANIPULATE ARRAYS IN Pd;
-#N canvas 0 0 452 302 graph28 0;
-#X array exampleArray 67 float 0;
-#X coords 0 2 67 -2 200 140 1;
-#X restore 369 451 graph;
-#N canvas 2 29 722 269 Setting_the_size_of_an_array 0;
-#X msg 44 88 \; exampleArray resize \$1;
-#X floatatom 44 66 5 0 0 0 - - -;
-#X text 16 18 1 The size of an array can be set using the array's dialogue
-box. Or with a [send] message like below.;
-#X text 15 65 2;
-#X text 231 91 same as;
-#X floatatom 305 66 5 0 0 0 - - -;
-#X obj 305 114 s exampleArray;
-#X msg 305 88 resize \$1;
-#X text 19 158 Note that new elements always have a default value of
-zero when you make an array larger. Also note that if you make arrays
-smaller \, you may lose data as each element is deleted from the end
-of the array.;
-#X connect 1 0 0 0;
-#X connect 5 0 7 0;
-#X connect 7 0 6 0;
-#X restore 24 270 pd Setting_the_size_of_an_array;
-#N canvas 4 30 720 447 Concatenate_two_arrays 0;
-#X text 19 10 This example assumes that we already know the size of
-the two arrays which will be concatenated. This process will fill NewArray
-with the contents of exampleArray and concatArray.;
-#N canvas 0 0 450 300 graph33 0;
-#X array concatArray 15 float 1;
-#A 0 -0.700355 -0.371783 -0.443212 -0.700355 -0.714641 -0.386069 0.0425035
-0.399647 0.513933 0.399647 0.128218 -0.128925 -0.21464 -0.0289252 -0.700355
-;
-#X coords 0 1 14 -1 200 140 1;
-#X restore 492 25 graph;
-#N canvas 0 0 450 300 graph34 0;
-#X array NewArray 82 float 0;
-#X coords 0 1 81 -1 300 140 1;
-#X restore 389 267 graph;
-#X obj 125 66 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -262144
--1 -1;
-#X obj 28 96 until;
-#X obj 28 171 f;
-#X obj 58 171 + 1;
-#X obj 28 286 tabread exampleArray;
-#X obj 28 340 tabwrite NewArray;
-#X obj 141 311 tabread concatArray;
-#X text 372 194 This example is much more interesting if;
-#X text 373 212 you draw new values into each array with;
-#X text 373 230 your mouse - then reset and bang again.;
-#X obj 150 134 arraysize exampleArray;
-#X obj 125 163 arraysize concatArray;
-#X obj 125 188 +;
-#X msg 178 241 \; NewArray resize \$1;
-#X text 28 75 loop;
-#X obj 28 219 moses;
-#X obj 141 254 -;
-#X obj 125 85 t b b b;
-#X obj 125 212 t f f;
-#X msg 47 144 0;
-#X obj 176 109 s clr1;
-#X obj 47 119 r clr1;
-#X connect 3 0 20 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 0;
-#X connect 5 0 18 0;
-#X connect 5 0 8 1;
-#X connect 6 0 5 1;
-#X connect 7 0 8 0;
-#X connect 9 0 8 0;
-#X connect 13 0 15 1;
-#X connect 13 0 19 1;
-#X connect 13 0 18 1;
-#X connect 14 0 15 0;
-#X connect 15 0 21 0;
-#X connect 18 0 7 0;
-#X connect 18 1 19 0;
-#X connect 19 0 9 0;
-#X connect 20 0 14 0;
-#X connect 20 1 13 0;
-#X connect 20 2 23 0;
-#X connect 21 0 4 0;
-#X connect 21 1 16 0;
-#X connect 22 0 5 1;
-#X connect 24 0 22 0;
-#X restore 24 371 pd Concatenate_two_arrays;
-#N canvas 4 30 735 395 Join_array_elements_into_a_list 0;
-#X text 16 12 JOIN ARRAY ELEMENTS INTO A LIST;
-#X obj 22 163 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -24198 -1
--1;
-#X obj 23 241 until;
-#X obj 24 320 tabread exampleArray;
-#X obj 216 235 pack s f;
-#X obj 216 183 t b f;
-#X obj 24 292 f;
-#X obj 58 292 + 1;
-#X obj 24 348 s \$1-value;
-#X obj 216 157 r \$1-value;
-#X obj 216 261 route list;
-#X obj 519 210 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 519 229 savepanel;
-#X msg 519 252 \; exampleArray write \$1;
-#X obj 283 353 print;
-#X text 289 330 store the list;
-#X obj 283 312 textfile;
-#X msg 345 285 rewind;
-#X obj 216 209 symbol add2;
-#X obj 310 240 bng 15 250 50 0 empty empty THEN_Print_the_list 18 7
-0 8 -24198 -1 -1;
-#X text 451 308 can be achieved by saving the;
-#X text 451 324 array elements to a text file;
-#X text 452 341 using the savepanel and write;
-#X text 453 357 message.;
-#X text 452 292 Alternatively \, a similar result;
-#X obj 22 183 arraysize exampleArray;
-#X msg 129 261 clear;
-#X obj 310 261 t b b;
-#X msg 74 260 0;
-#X text 29 37 In some other programming environments \, including Visual
-Basic and Java (among others) \, there are functions which join all
-elements of an array into a list. This example shows how this functionality
-can be duplicated in Pd. This example uses the elements of exampleArray
-from the previous help window. The list can either be printed to the
-terminal window \, or it can be saved to a text file.;
-#X obj 23 214 t f b;
-#X connect 1 0 25 0;
-#X connect 2 0 6 0;
-#X connect 3 0 8 0;
-#X connect 4 0 10 0;
-#X connect 5 0 18 0;
-#X connect 5 1 4 1;
-#X connect 6 0 7 0;
-#X connect 6 0 3 0;
-#X connect 7 0 6 1;
-#X connect 9 0 5 0;
-#X connect 10 0 16 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 16 0 14 0;
-#X connect 17 0 16 0;
-#X connect 18 0 4 0;
-#X connect 19 0 27 0;
-#X connect 25 0 30 0;
-#X connect 26 0 16 0;
-#X connect 27 0 16 0;
-#X connect 27 1 17 0;
-#X connect 28 0 6 1;
-#X connect 30 0 2 0;
-#X connect 30 1 28 0;
-#X connect 30 1 26 0;
-#X restore 24 397 pd Join_array_elements_into_a_list;
-#N canvas 2 29 719 337 Getting_the_size_of_an_array 0;
-#X text 15 11 GETTING THE SIZE OF AN ARRAY;
-#X text 34 34 If you deal with arrays often \, you will want to download
-the [arraysize] external written by PIX. Pd lacks a native object for
-this purpose and I'm afraid that without this external this functionality
-is impossible in Pd.;
-#X obj 38 127 arraysize exampleArray;
-#X obj 38 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X floatatom 38 152 5 0 0 0 - - -;
-#X text 35 183 Having said that...PD arrays accept a "print" command
-which will output important array information to the terminal window.
-Like below:;
-#X msg 40 258 \; exampleArray print;
-#X connect 2 0 4 0;
-#X connect 3 0 2 0;
-#X restore 24 320 pd Getting_the_size_of_an_array;
-#N canvas 0 31 721 390 Reversing_an_array 0;
-#X text 20 15 REVERSING AN ARRAY;
-#X text 23 35 When an array is reversed \, as the name implies the
-first element becomes the last and the last becomes the first. When
-viewing this example \, please be sure you can see the "exampleArray"
-in the previous window.;
-#X obj 110 109 bng 15 250 50 0 empty empty Reverse_me 18 7 0 8 -262144
--1 -1;
-#X obj 110 128 arraysize exampleArray;
-#X obj 110 200 until;
-#X obj 176 228 + 1;
-#X obj 144 228 f;
-#X obj 135 176 s \$1-length;
-#X obj 169 281 tabread exampleArray;
-#X obj 313 342 table tempArray;
-#X obj 110 152 t f f f;
-#X obj 234 196 s tempArray;
-#X msg 234 172 resize \$1;
-#X obj 65 308 tabwrite tempArray;
-#X obj 510 41 sel;
-#X obj 586 31 - 1;
-#X obj 586 7 r \$1-length;
-#X obj 144 254 t f f f;
-#X obj 57 278 s \$1-eof;
-#X obj 510 8 r \$1-eof;
-#X obj 510 113 until;
-#X obj 510 88 f;
-#X obj 510 161 f;
-#X obj 542 161 - 1;
-#X obj 561 108 r \$1-length;
-#X obj 529 64 r \$1-length;
-#X obj 510 213 tabread tempArray;
-#X obj 510 345 tabwrite exampleArray;
-#X obj 574 265 f;
-#X obj 593 241 r \$1-length;
-#X obj 574 314 mod;
-#X obj 593 289 r \$1-length;
-#X obj 604 265 + 1;
-#X obj 510 186 t f b;
-#X obj 561 131 - 1;
-#X text 13 346 Copies array to a temporary location.;
-#X msg 327 124 0;
-#X obj 327 148 s clr2;
-#X obj 443 150 r clr2;
-#X obj 163 200 r clr2;
-#X connect 2 0 3 0;
-#X connect 2 0 36 0;
-#X connect 3 0 10 0;
-#X connect 4 0 6 0;
-#X connect 5 0 6 1;
-#X connect 6 0 5 0;
-#X connect 6 0 17 0;
-#X connect 8 0 13 0;
-#X connect 10 0 4 0;
-#X connect 10 1 7 0;
-#X connect 10 2 12 0;
-#X connect 12 0 11 0;
-#X connect 14 0 21 0;
-#X connect 15 0 14 1;
-#X connect 16 0 15 0;
-#X connect 17 0 18 0;
-#X connect 17 1 8 0;
-#X connect 17 2 13 1;
-#X connect 19 0 14 0;
-#X connect 20 0 22 0;
-#X connect 21 0 20 0;
-#X connect 22 0 23 0;
-#X connect 22 0 33 0;
-#X connect 23 0 22 1;
-#X connect 24 0 34 0;
-#X connect 25 0 21 1;
-#X connect 26 0 27 0;
-#X connect 28 0 30 0;
-#X connect 28 0 32 0;
-#X connect 29 0 28 1;
-#X connect 30 0 27 1;
-#X connect 31 0 30 1;
-#X connect 32 0 28 1;
-#X connect 33 0 26 0;
-#X connect 33 1 28 0;
-#X connect 34 0 22 1;
-#X connect 36 0 37 0;
-#X connect 38 0 22 1;
-#X connect 39 0 6 1;
-#X restore 24 474 pd Reversing_an_array;
-#N canvas 2 30 719 390 Popping_and_Pushing_arrays 0;
-#X obj 62 181 bng 15 250 50 0 empty empty Pop_me -18 -6 0 8 -262144
--1 -1;
-#X obj 134 199 arraysize exampleArray;
-#X obj 134 294 tabread exampleArray;
-#X floatatom 134 318 0 0 0 0 - - -;
-#X obj 99 173 t b b;
-#X obj 51 320 - 1;
-#X msg 51 346 \; exampleArray resize \$1;
-#X floatatom 158 223 0 0 0 0 - - -;
-#X text 175 318 value of last element;
-#X obj 458 188 bng 15 250 50 0 empty empty Push_me 18 7 0 8 -262144
--1 -1;
-#X text 31 33 I got this idea from Java \, which provides a method
-to "pop" an array. The "pop" method will remove the last element in
-the array and return its value. The interesting thing about this in
-PD is that we need to know the length of the array before we start
-(hence another situation where [arraysize] is an essential tool). "Pushing"
-is the opposite effect and also a tool provided in Java. When an array
-is pushed \, an element is added to the array and the new size is returned.
-;
-#X obj 458 208 arraysize exampleArray;
-#X obj 458 232 + 1;
-#X msg 458 292 \; exampleArray resize \$1;
-#X floatatom 476 258 0 0 0 0 - - -;
-#X text 521 258 new size;
-#X text 16 12 POPPING AND PUSHING AN ARRAY;
-#X obj 158 246 - 1;
-#X text 197 223 # of total elements;
-#X floatatom 158 271 0 0 0 0 - - -;
-#X text 198 273 new size;
-#X connect 0 0 4 0;
-#X connect 1 0 2 0;
-#X connect 1 0 5 0;
-#X connect 1 0 7 0;
-#X connect 2 0 3 0;
-#X connect 4 0 5 0;
-#X connect 4 1 1 0;
-#X connect 5 0 6 0;
-#X connect 7 0 17 0;
-#X connect 9 0 11 0;
-#X connect 11 0 12 0;
-#X connect 12 0 13 0;
-#X connect 12 0 14 0;
-#X connect 17 0 19 0;
-#X restore 24 423 pd Popping_and_Pushing_arrays;
-#N canvas 2 30 722 391 Shifting_an_array 0;
-#X obj 30 90 bng 15 250 50 0 empty empty Shift_me 18 7 0 8 -24198 -1
--1;
-#X text 16 12 SHIFTING AN ARRAY;
-#X text 20 32 The shift method \, in Java \, will remove the first
-element of the array and return its value. This is opposite of the
-"Pop" method which removes the last element.;
-#X obj 30 272 tabread exampleArray;
-#X obj 30 354 tabwrite tempArray2;
-#X obj 551 11 table tempArray2;
-#X obj 30 110 arraysize exampleArray;
-#X msg 225 160 \; tempArray2 resize \$1;
-#X obj 30 163 until;
-#X obj 30 215 f;
-#X obj 62 215 + 1;
-#X obj 30 136 t f f f;
-#X obj 129 167 s \$1-length;
-#X obj 160 301 spigot;
-#X obj 203 276 < 1;
-#X floatatom 160 328 5 0 0 0 - - -;
-#X text 209 327 First value.;
-#X text 208 345 ...to be deleted.;
-#X obj 304 239 - 1;
-#X obj 304 212 r \$1-length;
-#X obj 30 239 t f f f f;
-#X obj 285 263 sel;
-#X obj 285 288 s \$2-eof;
-#X obj 427 71 r \$2-eof;
-#X obj 427 95 t b b;
-#X msg 419 304 \; tempArray2 resize \$1 \; exampleArray resize \$1
-;
-#X obj 401 256 r \$1-length;
-#X obj 401 280 - 1;
-#X obj 382 304 f;
-#X obj 497 128 until;
-#X obj 497 102 f;
-#X obj 551 69 r \$1-length;
-#X obj 529 155 + 1;
-#X obj 574 156 r \$1-length;
-#X obj 497 184 mod;
-#X obj 497 155 f 1;
-#X obj 497 209 t f f;
-#X obj 497 257 tabread tempArray2;
-#X obj 497 281 tabwrite exampleArray;
-#X obj 551 93 - 1;
-#X obj 574 179 - 1;
-#X obj 497 234 + 1;
-#X msg 223 105 0;
-#X msg 588 118 1;
-#X obj 223 129 s clr;
-#X obj 588 94 r clr;
-#X obj 49 188 r clr;
-#X connect 0 0 6 0;
-#X connect 0 0 42 0;
-#X connect 3 0 4 0;
-#X connect 3 0 13 0;
-#X connect 6 0 11 0;
-#X connect 8 0 9 0;
-#X connect 9 0 10 0;
-#X connect 9 0 20 0;
-#X connect 10 0 9 1;
-#X connect 11 0 8 0;
-#X connect 11 1 12 0;
-#X connect 11 2 7 0;
-#X connect 13 0 15 0;
-#X connect 14 0 13 1;
-#X connect 18 0 21 1;
-#X connect 19 0 18 0;
-#X connect 20 0 3 0;
-#X connect 20 1 4 1;
-#X connect 20 2 14 0;
-#X connect 20 3 21 0;
-#X connect 21 0 22 0;
-#X connect 23 0 24 0;
-#X connect 24 0 28 0;
-#X connect 24 1 30 0;
-#X connect 26 0 27 0;
-#X connect 27 0 28 1;
-#X connect 28 0 25 0;
-#X connect 29 0 35 0;
-#X connect 30 0 29 0;
-#X connect 31 0 39 0;
-#X connect 32 0 35 1;
-#X connect 33 0 40 0;
-#X connect 34 0 36 0;
-#X connect 35 0 32 0;
-#X connect 35 0 34 0;
-#X connect 36 0 41 0;
-#X connect 36 1 38 1;
-#X connect 37 0 38 0;
-#X connect 39 0 30 1;
-#X connect 40 0 34 1;
-#X connect 41 0 37 0;
-#X connect 42 0 44 0;
-#X connect 43 0 35 1;
-#X connect 45 0 43 0;
-#X connect 46 0 9 1;
-#X restore 24 449 pd Shifting_an_array;
-#X text 25 32 Arrays in Pd are different than the arrays in other languages
-primarily because \, in Pd \, they are designed to be displayed graphically
-on screen. This is due to the nature of audio synthesis - we want to
-see our wave forms and visually understand the data. That's why arrays
-in Pd are complicated by other objects like tables \, graphs and widgets.
-PD uses these objects to provide a graphic representation of the array
-data. If you're not interested in seeing the array data within your
-PD patch \, you can use the [table] object to store the array and corresponding
-table in a sub-window. Note that [table]s are more CPU friendly than
-their graphical counterpart.;
-#X text 26 230 Like all programming languages \, Pd provides numerous
-tools to manipulate arrays and their data.;
-#N canvas 3 32 718 310 Setting_a_constant_array_value 0;
-#X floatatom 26 151 0 0 0 0 - - -;
-#X obj 26 185 / 100;
-#X msg 26 215 \; exampleArray const \$1;
-#X text 18 16 SETTING A CONSTANT ARRAY VALUE;
-#X text 27 46 By default \, all array element values are zero. However
-\, Pd allows you to change that using the "CONST" message.;
-#X text 26 88 This feature is useful to reset all values in an array
-\, or with a little creativity can be used to "delete" a slice \, or
-create silence in audio samples.;
-#X connect 0 0 1 0;
-#X connect 1 0 2 0;
-#X restore 24 345 pd Setting_a_constant_array_value;
-#N canvas 3 26 727 395 Higher_math_using_arrays 0;
-#X text -7 12 HIGHER MATH USING ARRAYS;
-#X text -3 226 Normalize;
-#X text 78 227 (arg: renormer...a number by which all array values
-will be normalized);
-#X msg 6 278 \; exampleArray normalize \$1;
-#X floatatom 6 256 5 0 0 0 - - -;
-#N canvas 5 55 710 432 sine_waves 0;
-#X text 34 188 Sinesum;
-#X text 98 190 (arg 1: Number of Points - arg 2: list of partial strengths)
-;
-#X msg 40 293 \; exampleArray sinesum 64 1 0 0.5 0 0.2 0 0.15;
-#X msg 40 251 \; exampleArray sinesum 64 1 0.5 0.38 0.3 0.28 0.25 0.2
-;
-#X msg 40 210 \; exampleArray sinesum 64 1;
-#X text 26 7 SINE WAVES;
-#X text 29 30 comment;
-#X text 45 29 When the "sinesum" message is sent to the array \, Pd
-will want to know two things:;
-#X text 58 65 1 How many samples (array elements) should be used? The
-higher the number is \, the higher the resolution of the wave form.
-;
-#X text 58 122 2 What is the relative strength of each "partial" or
-"overtone" in the sound? For more info about this \, please lookup
-"overtones" or "harmonics" or "partials" on the internet.;
-#X text 250 220 a pure sine wave!;
-#X text 479 259 a triangle wave;
-#X text 412 303 a square wave;
-#X text 33 346 Note that these waves aren't exactly triangular or square...instead
-they are "smoothed" by the sinesum function to more accurately produce
-these wave forms as analog instruments do.;
-#X restore 7 42 pd sine_waves;
-#X text 141 26 Audio signals in a digital realm are created using a
-series of samples. It is digitally possible to create extremely angular
-wave forms using Pd arrays \, but the aural result is sometimes distorted
-and unpleasant. Hence \, higher math functions help our digital tools
-to produce data which can effectively be converted to analog signals
-similar to those of our electronic and mechanical predecessors. The
-first and one of the most important mathematic functions in digital
-synthesis is undoubtebly "sinesum". Pd provides an easy method for
-us to integrate these higher math functions in our arrays.;
-#N canvas 0 195 750 302 cosine_waves 0;
-#X text 11 22 Cosinesum;
-#X text 91 22 (arg 1: Number of Points - arg 2: list of partial strengths)
-;
-#X text 273 84 pure cosine wave!;
-#X msg 23 117 \; exampleArray cosinesum 64 0 -0.5 0 -0.2 0.1 0;
-#X msg 24 76 \; exampleArray cosinesum 64 0 1;
-#X msg 22 159 \; exampleArray cosinesum 64 -0.15 0.2 0.15 -0.15 0.1
-0.1 0.2 -0.2 0.35 -0.25 -0.1 0.1 0.199;
-#X restore 6 73 pd cosine_waves;
-#X text 222 257 To normalize an audio signal means to alter the average
-amplitude of the signal. For the sake of clear \, undistored sounds
-\, Pd would like all of your audio signals to never exceed 1 or -1
-The first step in achieving this is "normalization" \, but can be assisted
-by more drastic tools like compressors \, limiters \, gain multipliers
-\, etc.;
-#X connect 4 0 3 0;
-#X restore 24 499 pd Higher_math_using_arrays;
-#N canvas 2 31 727 416 Files_and_arrays 0;
-#X text 24 14 OTHER IMPORTANT STUFF;
-#X obj 225 91 savepanel;
-#X obj 225 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X msg 225 117 \; exampleArray write \$1;
-#X obj 475 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 475 89 openpanel;
-#X msg 475 113 \; exampleArray read \$1;
-#X text 26 29 Using text files can be helpful in saving or loading
-arrays in Pd. Note that the "read" message does not resize your array
-automatically.;
-#X text 29 160 Audio files can be treated in similar ways by incorporating
-the [soundfiler] object. The soundfiler object provides Pd with tools
-to automatically resize arrays \, and read/write audio files in a variety
-of formats.;
-#X obj 77 231 openpanel;
-#X obj 52 232 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 4 280 symbol read;
-#X obj 54 380 soundfiler;
-#X obj 54 355 route list;
-#X obj 54 332 pack s s s s;
-#X obj 100 280 symbol -resize;
-#X obj 78 254 t b b s b;
-#X obj 145 305 symbol exampleArray;
-#X obj 373 231 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
--1;
-#X obj 375 378 soundfiler;
-#X obj 375 353 route list;
-#X obj 375 330 pack s s s s;
-#X obj 399 253 t b b s b;
-#X obj 466 303 symbol exampleArray;
-#X obj 398 230 savepanel;
-#X obj 317 278 symbol write;
-#X obj 421 278 symbol -aiff;
-#X connect 1 0 3 0;
-#X connect 2 0 1 0;
-#X connect 4 0 5 0;
-#X connect 5 0 6 0;
-#X connect 9 0 16 0;
-#X connect 10 0 9 0;
-#X connect 11 0 14 0;
-#X connect 13 0 12 0;
-#X connect 14 0 13 0;
-#X connect 15 0 14 1;
-#X connect 16 0 11 0;
-#X connect 16 1 15 0;
-#X connect 16 2 14 2;
-#X connect 16 3 17 0;
-#X connect 17 0 14 3;
-#X connect 18 0 24 0;
-#X connect 20 0 19 0;
-#X connect 21 0 20 0;
-#X connect 22 0 25 0;
-#X connect 22 1 26 0;
-#X connect 22 2 21 2;
-#X connect 22 3 23 0;
-#X connect 23 0 21 3;
-#X connect 24 0 22 0;
-#X connect 25 0 21 0;
-#X connect 26 0 21 1;
-#X restore 24 526 pd Files_and_arrays;
-#N canvas 0 0 719 423 Additional_tools 0;
-#X text 18 14 ADDITIONAL TOOLS;
-#X text 29 38 The "array" object in Pd accepts special messages to
-alter the appearance of the array on screen.;
-#X text 19 81 Arrays can be renamed:;
-#X msg 203 78 \; exampleArray rename george;
-#X msg 431 78 \; george rename exampleArray;
-#X msg 303 173 \; exampleArray bounds 0 1 67 -1;
-#X text 20 129 You can set the bounds of the rectangle: (the arguments
-are:;
-#X text 353 146 low x \, high y \, high x \, low y);
-#X msg 58 173 \; exampleArray bounds 0 2 67 -2;
-#X text 18 219 Array graphs can be given "ticks" on both the x and
-y axis to help you visually measure your data. The tick messages require
-3 values: (the index or value of the FIRST large tick \, then the interval
-between ticks \, then finally the number of ticks overall per large
-tick).;
-#X msg 488 243 \; exampleArray xticks 0 5 3;
-#X msg 471 290 \; exampleArray yticks 0 0.5 4;
-#X msg 354 369 \; exampleArray ylabel -5 -2 -1.5 -1 1 1.5 2;
-#X msg 26 369 \; exampleArray xlabel 0 10 20 30 40 50 60;
-#X text 17 325 Arrays can be given labels to describe the x and y axis.
-Give a y value and a bunch of x values or vice versa:;
-#X restore 24 553 pd Additional_tools;
-#N canvas 4 29 717 375 Populating_an_array 0;
-#X text 27 12 POPULATING AN ARRAY;
-#X text 41 37 An array in Pd is primarily a storage device for numbers.
-The result is a series of numbers that you can do with whatever you
-wish...but how does one populate an array?;
-#X text 53 185 list element 1 = array[0];
-#X text 53 201 list element 2 = array[1];
-#X text 39 94 Advanced techniques using text or audio files is described
-later \, but for now it's important to know that you can send an array
-a list. Each element in the list will be assigned to the corresponding
-element in the array. Note that the first index in an array is always
-zero!;
-#X msg 39 303 \; exampleArray 0 -1 1 -1 0.5 -0.5 0.5 -0.2 0.2 -0.2
-0.1 -0.1 0;
-#X text 37 232 Note that if your array is larger than your list \,
-then only the first elements will be effected. If your array is smaller
-than your list \, then your list will be truncated.;
-#X restore 24 295 pd Populating_an_array;
-#X restore 41 173 pd How_to_manipulate_arrays_in_PD;
-#N canvas 132 0 587 609 How_to_create_an_array_in_PD 0;
-#X text 22 9 1 Select "array" from the "Put" menu above.;
-#X text 21 288 4 If you want Pd to create a new graph for this array
-\, then select "in new graph". If you have another location in mind
--- for example if you want to overlap two arrays in a single graph
-\, then select "in last graph".;
-#X text 19 361 5 Then click "OK" and place the new array anywhere in
-this window.;
-#X text 19 403 6 Note: if you do not want to see the graph in this
-window \, then you can use the [table] object instead...the array will
-then be created inside the [table] object and will be seen only if
-you manually open the table.;
-#X text 22 31 2 A dialogue box appears where you can type the name
-of the array and the desired size. Names can be anything you want -
-if you want a localized array \, then name it something like \$1-dave
-(the dollar sign indicates that part of the name is a variable which
-is unique to this patch). The size of the array can be anything greater
-than 0 (zero). At a sample rate of 441000 khz \, an array of 882000
-will provide you with 2 seconds of audio data.;
-#X text 21 167 3 The "Save contents" checkbox will inform Pure Data
-that you want the array saved within the source code of this patch.
-This way \, you can ensure that the array will maintain its values
-each time you open this patch. This is recommended only for relatively
-small arrays...larger arrays should be saved to either a text file
-\, or an audio file.;
-#X restore 42 106 pd How_to_create_an_array_in_PD;
-#N canvas 133 1 646 607 Common_uses_for_arrays_in_PD 0;
-#X text 27 26 COMMON USES FOR ARRAYS IN Pd;
-#X text 49 60 Arrays are versatile. Their simple structure make them
-useful in countless situations. This page discusses perhaps the most
-common applications.;
-#X text 50 225 2 MIDI Sequencers: array values limited to a range between
-0 and 127 are suitable for MIDI output to be used as pitch \, velocity
-\, or controller numbers. Some MIDI information requires a much larger
-range \, such as pitch benders.;
-#X text 50 306 3 Envelopes: an array with four elements can be used
-effectively as an ADSR enveloper. There are numerous examples of this
-in other Pd help documents.;
-#X text 53 377 4 Math and conversion tables: arrays are an excellent
-visual tool when performing fourier analysis and other higher mathematic
-functions.;
-#X text 54 450 5 Wave editing: with proper manipulation of array data
-\, Pd can be fully functional wave editor \, complete with mouse-clickable
-cut-n-paste \, pitch-shift \, time expansion \, down/upsampling \,
-and other tools typically found in commercial wave editors.;
-#X text 49 128 1 Audio sample data: when an array's values are limited
-to a range between -1 and 1 \, the numbers are suitable for conversion
-to analog audio signal. These arrays are typically many thousands of
-elements and stored on hard disk in the form of aiff \, wav or pure
-text.;
-#X restore 40 239 pd Common_uses_for_arrays_in_PD;
-#X text 39 309 NOTE: I strongly recommend that you download the [arraysize]
-external to your "pd/extra" folder before continuing. Some of these
-examples are impossible without it -- I personally feel that [arraysize]
-should be considered for permanent inclusion in future Pd distributions.
-Check the CVS Repository or Pure-data.org for [arraysize].;
-#X text 40 459 This document is meant to supplement the help documentation
-for [table] \, [tabread] \, [tabwrite] \, [soundfiler] \, [tabsend~]
-\, [tabreceive~] \, [tabplay~] \, etc.;
+#N canvas 299 68 516 572 10; +#N canvas 132 22 591 609 What_is_an_array_in_PD 0; +#X text 27 17 WHAT IS AN ARRAY IN PURE DATA?; +#X text 45 42 Arrays \, in most programming environments \, are considered +to be "a sequence of objects all of which have the same variable type" +wherein each object is called an element and the elements are numbered +in a row 0 \, 1 \, 2 \, 3 \, etc. These numbers are called indices. +Each index holds a corresponding value.; +#X text 46 222 Arrays in Pd look like this:; +#N canvas 0 22 450 300 graph18 0; +#X array example_array 100 float 0; +#X coords 0 1 99 -1 200 140 1; +#X restore 277 225 graph; +#X text 63 486 1 Right-click on the array and select "Properties" from +the menu. Two dialogue boxes will open - one called "graph" and one +called "array".; +#X text 64 543 2 Then right-click again on the array and select "Help" +from the menu. The window that opens is the table.pd help document. +; +#X text 45 148 All of this is true in Pd \, except that arrays in Pd +can only hold floating point data. (other data types in Pd are called +"lists" or "anythings" and require different tools to manipulate them.) +; +#X text 45 378 The array above is actually only the horizontal line! +The rectangle surrounding the array is called a "graph". These two +objects are separate \, but Pd creates both simoultaneously for purposes +of convenience. These two objects together are called a "table". To +see what I mean by all of this:; +#X restore 43 42 pd What_is_an_array_in_PD; +#N canvas 148 160 612 619 How_to_manipulate_arrays_in_PD 0; +#X text 13 5 HOW TO MANIPULATE ARRAYS IN Pd; +#N canvas 0 22 452 302 graph28 0; +#X array exampleArray 67 float 0; +#X coords 0 2 67 -2 200 140 1; +#X restore 369 451 graph; +#N canvas 2 29 722 269 Setting_the_size_of_an_array 0; +#X msg 44 88 \; exampleArray resize \$1; +#X floatatom 44 66 5 0 0 0 - - -; +#X text 16 18 1 The size of an array can be set using the array's dialogue +box. Or with a [send] message like below.; +#X text 15 65 2; +#X text 231 91 same as; +#X floatatom 305 66 5 0 0 0 - - -; +#X obj 305 114 s exampleArray; +#X msg 305 88 resize \$1; +#X text 19 158 Note that new elements always have a default value of +zero when you make an array larger. Also note that if you make arrays +smaller \, you may lose data as each element is deleted from the end +of the array.; +#X connect 1 0 0 0; +#X connect 5 0 7 0; +#X connect 7 0 6 0; +#X restore 24 270 pd Setting_the_size_of_an_array; +#N canvas 4 30 720 447 Concatenate_two_arrays 0; +#X text 19 10 This example assumes that we already know the size of +the two arrays which will be concatenated. This process will fill NewArray +with the contents of exampleArray and concatArray.; +#N canvas 0 22 450 300 graph33 0; +#X array concatArray 15 float 1; +#A 0 -0.700355 -0.371783 -0.443212 -0.700355 -0.714641 -0.386069 0.0425035 +0.399647 0.513933 0.399647 0.128218 -0.128925 -0.21464 -0.0289252 -0.700355 +; +#X coords 0 1 14 -1 200 140 1; +#X restore 492 25 graph; +#N canvas 0 22 450 300 graph34 0; +#X array NewArray 82 float 0; +#X coords 0 1 81 -1 300 140 1; +#X restore 389 267 graph; +#X obj 125 66 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -262144 +-1 -1; +#X obj 28 96 until; +#X obj 28 171 f; +#X obj 58 171 + 1; +#X obj 28 286 tabread exampleArray; +#X obj 28 340 tabwrite NewArray; +#X obj 141 311 tabread concatArray; +#X text 372 194 This example is much more interesting if; +#X text 373 212 you draw new values into each array with; +#X text 373 230 your mouse - then reset and bang again.; +#X obj 150 134 arraysize exampleArray; +#X obj 125 163 arraysize concatArray; +#X obj 125 188 +; +#X msg 178 241 \; NewArray resize \$1; +#X text 28 75 loop; +#X obj 28 219 moses; +#X obj 141 254 -; +#X obj 125 85 t b b b; +#X obj 125 212 t f f; +#X msg 47 144 0; +#X obj 176 109 s clr1; +#X obj 47 119 r clr1; +#X connect 3 0 20 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 5 0 18 0; +#X connect 5 0 8 1; +#X connect 6 0 5 1; +#X connect 7 0 8 0; +#X connect 9 0 8 0; +#X connect 13 0 15 1; +#X connect 13 0 19 1; +#X connect 13 0 18 1; +#X connect 14 0 15 0; +#X connect 15 0 21 0; +#X connect 18 0 7 0; +#X connect 18 1 19 0; +#X connect 19 0 9 0; +#X connect 20 0 14 0; +#X connect 20 1 13 0; +#X connect 20 2 23 0; +#X connect 21 0 4 0; +#X connect 21 1 16 0; +#X connect 22 0 5 1; +#X connect 24 0 22 0; +#X restore 24 371 pd Concatenate_two_arrays; +#N canvas 4 30 735 395 Join_array_elements_into_a_list 0; +#X text 16 12 JOIN ARRAY ELEMENTS INTO A LIST; +#X obj 22 163 bng 15 250 50 0 empty empty Bang_me 18 7 0 8 -24198 -1 +-1; +#X obj 23 241 until; +#X obj 24 320 tabread exampleArray; +#X obj 216 235 pack s f; +#X obj 216 183 t b f; +#X obj 24 292 f; +#X obj 58 292 + 1; +#X obj 24 348 s \$1-value; +#X obj 216 157 r \$1-value; +#X obj 216 261 route list; +#X obj 519 210 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 519 229 savepanel; +#X msg 519 252 \; exampleArray write \$1; +#X obj 283 353 print; +#X text 289 330 store the list; +#X obj 283 312 textfile; +#X msg 345 285 rewind; +#X obj 216 209 symbol add2; +#X obj 310 240 bng 15 250 50 0 empty empty THEN_Print_the_list 18 7 +0 8 -24198 -1 -1; +#X text 451 308 can be achieved by saving the; +#X text 451 324 array elements to a text file; +#X text 452 341 using the savepanel and write; +#X text 453 357 message.; +#X text 452 292 Alternatively \, a similar result; +#X obj 22 183 arraysize exampleArray; +#X msg 129 261 clear; +#X obj 310 261 t b b; +#X msg 74 260 0; +#X text 29 37 In some other programming environments \, including Visual +Basic and Java (among others) \, there are functions which join all +elements of an array into a list. This example shows how this functionality +can be duplicated in Pd. This example uses the elements of exampleArray +from the previous help window. The list can either be printed to the +terminal window \, or it can be saved to a text file.; +#X obj 23 214 t f b; +#X connect 1 0 25 0; +#X connect 2 0 6 0; +#X connect 3 0 8 0; +#X connect 4 0 10 0; +#X connect 5 0 18 0; +#X connect 5 1 4 1; +#X connect 6 0 7 0; +#X connect 6 0 3 0; +#X connect 7 0 6 1; +#X connect 9 0 5 0; +#X connect 10 0 16 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 16 0 14 0; +#X connect 17 0 16 0; +#X connect 18 0 4 0; +#X connect 19 0 27 0; +#X connect 25 0 30 0; +#X connect 26 0 16 0; +#X connect 27 0 16 0; +#X connect 27 1 17 0; +#X connect 28 0 6 1; +#X connect 30 0 2 0; +#X connect 30 1 28 0; +#X connect 30 1 26 0; +#X restore 24 397 pd Join_array_elements_into_a_list; +#N canvas 2 29 719 337 Getting_the_size_of_an_array 0; +#X text 15 11 GETTING THE SIZE OF AN ARRAY; +#X text 34 34 If you deal with arrays often \, you will want to download +the [arraysize] external written by PIX. Pd lacks a native object for +this purpose and I'm afraid that without this external this functionality +is impossible in Pd.; +#X obj 38 127 arraysize exampleArray; +#X obj 38 107 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X floatatom 38 152 5 0 0 0 - - -; +#X text 35 183 Having said that...PD arrays accept a "print" command +which will output important array information to the terminal window. +Like below:; +#X msg 40 258 \; exampleArray print; +#X connect 2 0 4 0; +#X connect 3 0 2 0; +#X restore 24 320 pd Getting_the_size_of_an_array; +#N canvas 0 31 721 390 Reversing_an_array 0; +#X text 20 15 REVERSING AN ARRAY; +#X text 23 35 When an array is reversed \, as the name implies the +first element becomes the last and the last becomes the first. When +viewing this example \, please be sure you can see the "exampleArray" +in the previous window.; +#X obj 110 109 bng 15 250 50 0 empty empty Reverse_me 18 7 0 8 -262144 +-1 -1; +#X obj 110 128 arraysize exampleArray; +#X obj 110 200 until; +#X obj 176 228 + 1; +#X obj 144 228 f; +#X obj 135 176 s \$1-length; +#X obj 169 281 tabread exampleArray; +#X obj 313 342 table tempArray; +#X obj 110 152 t f f f; +#X obj 234 196 s tempArray; +#X msg 234 172 resize \$1; +#X obj 65 308 tabwrite tempArray; +#X obj 510 41 sel; +#X obj 586 31 - 1; +#X obj 586 7 r \$1-length; +#X obj 144 254 t f f f; +#X obj 57 278 s \$1-eof; +#X obj 510 8 r \$1-eof; +#X obj 510 113 until; +#X obj 510 88 f; +#X obj 510 161 f; +#X obj 542 161 - 1; +#X obj 561 108 r \$1-length; +#X obj 529 64 r \$1-length; +#X obj 510 213 tabread tempArray; +#X obj 510 345 tabwrite exampleArray; +#X obj 574 265 f; +#X obj 593 241 r \$1-length; +#X obj 574 314 mod; +#X obj 593 289 r \$1-length; +#X obj 604 265 + 1; +#X obj 510 186 t f b; +#X obj 561 131 - 1; +#X text 13 346 Copies array to a temporary location.; +#X msg 327 124 0; +#X obj 327 148 s clr2; +#X obj 443 150 r clr2; +#X obj 163 200 r clr2; +#X connect 2 0 3 0; +#X connect 2 0 36 0; +#X connect 3 0 10 0; +#X connect 4 0 6 0; +#X connect 5 0 6 1; +#X connect 6 0 5 0; +#X connect 6 0 17 0; +#X connect 8 0 13 0; +#X connect 10 0 4 0; +#X connect 10 1 7 0; +#X connect 10 2 12 0; +#X connect 12 0 11 0; +#X connect 14 0 21 0; +#X connect 15 0 14 1; +#X connect 16 0 15 0; +#X connect 17 0 18 0; +#X connect 17 1 8 0; +#X connect 17 2 13 1; +#X connect 19 0 14 0; +#X connect 20 0 22 0; +#X connect 21 0 20 0; +#X connect 22 0 23 0; +#X connect 22 0 33 0; +#X connect 23 0 22 1; +#X connect 24 0 34 0; +#X connect 25 0 21 1; +#X connect 26 0 27 0; +#X connect 28 0 30 0; +#X connect 28 0 32 0; +#X connect 29 0 28 1; +#X connect 30 0 27 1; +#X connect 31 0 30 1; +#X connect 32 0 28 1; +#X connect 33 0 26 0; +#X connect 33 1 28 0; +#X connect 34 0 22 1; +#X connect 36 0 37 0; +#X connect 38 0 22 1; +#X connect 39 0 6 1; +#X restore 24 474 pd Reversing_an_array; +#N canvas 2 30 719 390 Popping_and_Pushing_arrays 0; +#X obj 62 181 bng 15 250 50 0 empty empty Pop_me -18 -6 0 8 -262144 +-1 -1; +#X obj 134 199 arraysize exampleArray; +#X obj 134 294 tabread exampleArray; +#X floatatom 134 318 0 0 0 0 - - -; +#X obj 99 173 t b b; +#X obj 51 320 - 1; +#X msg 51 346 \; exampleArray resize \$1; +#X floatatom 158 223 0 0 0 0 - - -; +#X text 175 318 value of last element; +#X obj 458 188 bng 15 250 50 0 empty empty Push_me 18 7 0 8 -262144 +-1 -1; +#X text 31 33 I got this idea from Java \, which provides a method +to "pop" an array. The "pop" method will remove the last element in +the array and return its value. The interesting thing about this in +PD is that we need to know the length of the array before we start +(hence another situation where [arraysize] is an essential tool). "Pushing" +is the opposite effect and also a tool provided in Java. When an array +is pushed \, an element is added to the array and the new size is returned. +; +#X obj 458 208 arraysize exampleArray; +#X obj 458 232 + 1; +#X msg 458 292 \; exampleArray resize \$1; +#X floatatom 476 258 0 0 0 0 - - -; +#X text 521 258 new size; +#X text 16 12 POPPING AND PUSHING AN ARRAY; +#X obj 158 246 - 1; +#X text 197 223 # of total elements; +#X floatatom 158 271 0 0 0 0 - - -; +#X text 198 273 new size; +#X connect 0 0 4 0; +#X connect 1 0 2 0; +#X connect 1 0 5 0; +#X connect 1 0 7 0; +#X connect 2 0 3 0; +#X connect 4 0 5 0; +#X connect 4 1 1 0; +#X connect 5 0 6 0; +#X connect 7 0 17 0; +#X connect 9 0 11 0; +#X connect 11 0 12 0; +#X connect 12 0 13 0; +#X connect 12 0 14 0; +#X connect 17 0 19 0; +#X restore 24 423 pd Popping_and_Pushing_arrays; +#N canvas 2 30 722 391 Shifting_an_array 0; +#X obj 30 90 bng 15 250 50 0 empty empty Shift_me 18 7 0 8 -24198 -1 +-1; +#X text 16 12 SHIFTING AN ARRAY; +#X text 20 32 The shift method \, in Java \, will remove the first +element of the array and return its value. This is opposite of the +"Pop" method which removes the last element.; +#X obj 30 272 tabread exampleArray; +#X obj 30 354 tabwrite tempArray2; +#X obj 551 11 table tempArray2; +#X obj 30 110 arraysize exampleArray; +#X msg 225 160 \; tempArray2 resize \$1; +#X obj 30 163 until; +#X obj 30 215 f; +#X obj 62 215 + 1; +#X obj 30 136 t f f f; +#X obj 129 167 s \$1-length; +#X obj 160 301 spigot; +#X obj 203 276 < 1; +#X floatatom 160 328 5 0 0 0 - - -; +#X text 209 327 First value.; +#X text 208 345 ...to be deleted.; +#X obj 304 239 - 1; +#X obj 304 212 r \$1-length; +#X obj 30 239 t f f f f; +#X obj 285 263 sel; +#X obj 285 288 s \$2-eof; +#X obj 427 71 r \$2-eof; +#X obj 427 95 t b b; +#X msg 419 304 \; tempArray2 resize \$1 \; exampleArray resize \$1 +; +#X obj 401 256 r \$1-length; +#X obj 401 280 - 1; +#X obj 382 304 f; +#X obj 497 128 until; +#X obj 497 102 f; +#X obj 551 69 r \$1-length; +#X obj 529 155 + 1; +#X obj 574 156 r \$1-length; +#X obj 497 184 mod; +#X obj 497 155 f 1; +#X obj 497 209 t f f; +#X obj 497 257 tabread tempArray2; +#X obj 497 281 tabwrite exampleArray; +#X obj 551 93 - 1; +#X obj 574 179 - 1; +#X obj 497 234 + 1; +#X msg 223 105 0; +#X msg 588 118 1; +#X obj 223 129 s clr; +#X obj 588 94 r clr; +#X obj 49 188 r clr; +#X connect 0 0 6 0; +#X connect 0 0 42 0; +#X connect 3 0 4 0; +#X connect 3 0 13 0; +#X connect 6 0 11 0; +#X connect 8 0 9 0; +#X connect 9 0 10 0; +#X connect 9 0 20 0; +#X connect 10 0 9 1; +#X connect 11 0 8 0; +#X connect 11 1 12 0; +#X connect 11 2 7 0; +#X connect 13 0 15 0; +#X connect 14 0 13 1; +#X connect 18 0 21 1; +#X connect 19 0 18 0; +#X connect 20 0 3 0; +#X connect 20 1 4 1; +#X connect 20 2 14 0; +#X connect 20 3 21 0; +#X connect 21 0 22 0; +#X connect 23 0 24 0; +#X connect 24 0 28 0; +#X connect 24 1 30 0; +#X connect 26 0 27 0; +#X connect 27 0 28 1; +#X connect 28 0 25 0; +#X connect 29 0 35 0; +#X connect 30 0 29 0; +#X connect 31 0 39 0; +#X connect 32 0 35 1; +#X connect 33 0 40 0; +#X connect 34 0 36 0; +#X connect 35 0 32 0; +#X connect 35 0 34 0; +#X connect 36 0 41 0; +#X connect 36 1 38 1; +#X connect 37 0 38 0; +#X connect 39 0 30 1; +#X connect 40 0 34 1; +#X connect 41 0 37 0; +#X connect 42 0 44 0; +#X connect 43 0 35 1; +#X connect 45 0 43 0; +#X connect 46 0 9 1; +#X restore 24 449 pd Shifting_an_array; +#X text 25 32 Arrays in Pd are different than the arrays in other languages +primarily because \, in Pd \, they are designed to be displayed graphically +on screen. This is due to the nature of audio synthesis - we want to +see our wave forms and visually understand the data. That's why arrays +in Pd are complicated by other objects like tables \, graphs and widgets. +PD uses these objects to provide a graphic representation of the array +data. If you're not interested in seeing the array data within your +PD patch \, you can use the [table] object to store the array and corresponding +table in a sub-window. Note that [table]s are more CPU friendly than +their graphical counterpart.; +#X text 26 230 Like all programming languages \, Pd provides numerous +tools to manipulate arrays and their data.; +#N canvas 3 32 718 310 Setting_a_constant_array_value 0; +#X floatatom 26 151 0 0 0 0 - - -; +#X obj 26 185 / 100; +#X msg 26 215 \; exampleArray const \$1; +#X text 18 16 SETTING A CONSTANT ARRAY VALUE; +#X text 27 46 By default \, all array element values are zero. However +\, Pd allows you to change that using the "CONST" message.; +#X text 26 88 This feature is useful to reset all values in an array +\, or with a little creativity can be used to "delete" a slice \, or +create silence in audio samples.; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X restore 24 345 pd Setting_a_constant_array_value; +#N canvas 3 26 727 395 Higher_math_using_arrays 0; +#X text -7 12 HIGHER MATH USING ARRAYS; +#X text -3 226 Normalize; +#X text 78 227 (arg: renormer...a number by which all array values +will be normalized); +#X msg 6 278 \; exampleArray normalize \$1; +#X floatatom 6 256 5 0 0 0 - - -; +#N canvas 5 55 710 432 sine_waves 0; +#X text 34 188 Sinesum; +#X text 98 190 (arg 1: Number of Points - arg 2: list of partial strengths) +; +#X msg 40 293 \; exampleArray sinesum 64 1 0 0.5 0 0.2 0 0.15; +#X msg 40 251 \; exampleArray sinesum 64 1 0.5 0.38 0.3 0.28 0.25 0.2 +; +#X msg 40 210 \; exampleArray sinesum 64 1; +#X text 26 7 SINE WAVES; +#X text 29 30 comment; +#X text 45 29 When the "sinesum" message is sent to the array \, Pd +will want to know two things:; +#X text 58 65 1 How many samples (array elements) should be used? The +higher the number is \, the higher the resolution of the wave form. +; +#X text 58 122 2 What is the relative strength of each "partial" or +"overtone" in the sound? For more info about this \, please lookup +"overtones" or "harmonics" or "partials" on the internet.; +#X text 250 220 a pure sine wave!; +#X text 479 259 a triangle wave; +#X text 412 303 a square wave; +#X text 33 346 Note that these waves aren't exactly triangular or square...instead +they are "smoothed" by the sinesum function to more accurately produce +these wave forms as analog instruments do.; +#X restore 7 42 pd sine_waves; +#X text 141 26 Audio signals in a digital realm are created using a +series of samples. It is digitally possible to create extremely angular +wave forms using Pd arrays \, but the aural result is sometimes distorted +and unpleasant. Hence \, higher math functions help our digital tools +to produce data which can effectively be converted to analog signals +similar to those of our electronic and mechanical predecessors. The +first and one of the most important mathematic functions in digital +synthesis is undoubtebly "sinesum". Pd provides an easy method for +us to integrate these higher math functions in our arrays.; +#N canvas 0 195 750 302 cosine_waves 0; +#X text 11 22 Cosinesum; +#X text 91 22 (arg 1: Number of Points - arg 2: list of partial strengths) +; +#X text 273 84 pure cosine wave!; +#X msg 23 117 \; exampleArray cosinesum 64 0 -0.5 0 -0.2 0.1 0; +#X msg 24 76 \; exampleArray cosinesum 64 0 1; +#X msg 22 159 \; exampleArray cosinesum 64 -0.15 0.2 0.15 -0.15 0.1 +0.1 0.2 -0.2 0.35 -0.25 -0.1 0.1 0.199; +#X restore 6 73 pd cosine_waves; +#X text 222 257 To normalize an audio signal means to alter the average +amplitude of the signal. For the sake of clear \, undistored sounds +\, Pd would like all of your audio signals to never exceed 1 or -1 +The first step in achieving this is "normalization" \, but can be assisted +by more drastic tools like compressors \, limiters \, gain multipliers +\, etc.; +#X connect 4 0 3 0; +#X restore 24 499 pd Higher_math_using_arrays; +#N canvas 2 31 727 416 Files_and_arrays 0; +#X text 24 14 OTHER IMPORTANT STUFF; +#X obj 225 91 savepanel; +#X obj 225 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X msg 225 117 \; exampleArray write \$1; +#X obj 475 70 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 475 89 openpanel; +#X msg 475 113 \; exampleArray read \$1; +#X text 26 29 Using text files can be helpful in saving or loading +arrays in Pd. Note that the "read" message does not resize your array +automatically.; +#X text 29 160 Audio files can be treated in similar ways by incorporating +the [soundfiler] object. The soundfiler object provides Pd with tools +to automatically resize arrays \, and read/write audio files in a variety +of formats.; +#X obj 77 231 openpanel; +#X obj 52 232 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 4 280 symbol read; +#X obj 54 380 soundfiler; +#X obj 54 355 route list; +#X obj 54 332 pack s s s s; +#X obj 100 280 symbol -resize; +#X obj 78 254 t b b s b; +#X obj 145 305 symbol exampleArray; +#X obj 373 231 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1 +-1; +#X obj 375 378 soundfiler; +#X obj 375 353 route list; +#X obj 375 330 pack s s s s; +#X obj 399 253 t b b s b; +#X obj 466 303 symbol exampleArray; +#X obj 398 230 savepanel; +#X obj 317 278 symbol write; +#X obj 421 278 symbol -aiff; +#X connect 1 0 3 0; +#X connect 2 0 1 0; +#X connect 4 0 5 0; +#X connect 5 0 6 0; +#X connect 9 0 16 0; +#X connect 10 0 9 0; +#X connect 11 0 14 0; +#X connect 13 0 12 0; +#X connect 14 0 13 0; +#X connect 15 0 14 1; +#X connect 16 0 11 0; +#X connect 16 1 15 0; +#X connect 16 2 14 2; +#X connect 16 3 17 0; +#X connect 17 0 14 3; +#X connect 18 0 24 0; +#X connect 20 0 19 0; +#X connect 21 0 20 0; +#X connect 22 0 25 0; +#X connect 22 1 26 0; +#X connect 22 2 21 2; +#X connect 22 3 23 0; +#X connect 23 0 21 3; +#X connect 24 0 22 0; +#X connect 25 0 21 0; +#X connect 26 0 21 1; +#X restore 24 526 pd Files_and_arrays; +#N canvas 0 22 719 423 Additional_tools 0; +#X text 18 14 ADDITIONAL TOOLS; +#X text 29 38 The "array" object in Pd accepts special messages to +alter the appearance of the array on screen.; +#X text 19 81 Arrays can be renamed:; +#X msg 203 78 \; exampleArray rename george; +#X msg 431 78 \; george rename exampleArray; +#X msg 303 173 \; exampleArray bounds 0 1 67 -1; +#X text 20 129 You can set the bounds of the rectangle: (the arguments +are:; +#X text 353 146 low x \, high y \, high x \, low y); +#X msg 58 173 \; exampleArray bounds 0 2 67 -2; +#X text 18 219 Array graphs can be given "ticks" on both the x and +y axis to help you visually measure your data. The tick messages require +3 values: (the index or value of the FIRST large tick \, then the interval +between ticks \, then finally the number of ticks overall per large +tick).; +#X msg 488 243 \; exampleArray xticks 0 5 3; +#X msg 471 290 \; exampleArray yticks 0 0.5 4; +#X msg 354 369 \; exampleArray ylabel -5 -2 -1.5 -1 1 1.5 2; +#X msg 26 369 \; exampleArray xlabel 0 10 20 30 40 50 60; +#X text 17 325 Arrays can be given labels to describe the x and y axis. +Give a y value and a bunch of x values or vice versa:; +#X restore 24 553 pd Additional_tools; +#N canvas 375 65 671 598 Populating_an_array 0; +#X text 27 12 POPULATING AN ARRAY; +#X text 41 37 An array in Pd is primarily a storage device for numbers. +The result is a series of numbers that you can do with whatever you +wish...but how does one populate an array?; +#X msg 39 333 \; exampleArray 0 -1 1 -1 0.5 -0.5 0.5 -0.2 0.2 -0.2 +0.1 -0.1 0; +#X text 39 522 Note that if your array is larger than your list \, +then only the first elements will be effected. If your array is smaller +than your list \, then your list will be truncated.; +#X msg 38 381 \; exampleArray 9 -1 1 -1 0.5 -0.5 0.5 -0.2 0.2 -0.2 +0.1 -0.1 0; +#X msg 38 430 \; exampleArray 55 -1 1 -1 0.5 -0.5 0.5 -0.2 0.2 0.2 +0.1 -0.1 0; +#N canvas 225 194 487 361 clearExampleArray 0; +#X obj 199 91 arraysize exampleArray; +#X obj 153 189 moses; +#X obj 124 149 +; +#X obj 162 149 f; +#X msg 162 123 0; +#X msg 123 123 1; +#X obj 153 220 t b b f; +#X obj 184 276 tabwrite exampleArray; +#X msg 184 248 0; +#X obj 55 170 bang; +#X msg 33 92 0; +#X obj 33 67 trigger bang bang; +#X obj 234 168 bang; +#X obj 33 26 inlet; +#X connect 0 0 1 1; +#X connect 1 0 6 0; +#X connect 1 1 12 0; +#X connect 2 0 3 0; +#X connect 2 0 1 0; +#X connect 3 0 2 1; +#X connect 4 0 3 0; +#X connect 5 0 2 0; +#X connect 6 0 9 0; +#X connect 6 1 8 0; +#X connect 6 2 7 1; +#X connect 8 0 7 0; +#X connect 9 0 5 0; +#X connect 10 0 2 0; +#X connect 11 0 10 0; +#X connect 11 1 0 0; +#X connect 12 0 4 0; +#X connect 13 0 11 0; +#X restore 441 483 pd clearExampleArray; +#X obj 419 483 bng 19 250 50 0 empty empty empty 0 -6 0 8 -62784 -1 +-1; +#X text 39 94 Advanced techniques using text or audio files is described +later \, but for now it's important to know that you can send an array +a list. Each element in the list will be assigned to the corresponding +element in the array. Note that the first position in an array is always +zero!; +#X text 39 235 These messages below populate exampleArray on the parent +patch with some values. The first element is the name of the array +to populate. The second element is the position to start at. The rest +of the elements are values to add to the array sequentially.; +#X text 53 185 first position in array = array[0]; +#X text 53 201 second position in array = array[1]; +#X connect 7 0 6 0; +#X restore 24 295 pd Populating_an_array; +#X restore 41 173 pd How_to_manipulate_arrays_in_PD; +#N canvas 132 22 587 609 How_to_create_an_array_in_PD 0; +#X text 22 9 1 Select "array" from the "Put" menu above.; +#X text 21 288 4 If you want Pd to create a new graph for this array +\, then select "in new graph". If you have another location in mind +-- for example if you want to overlap two arrays in a single graph +\, then select "in last graph".; +#X text 19 361 5 Then click "OK" and place the new array anywhere in +this window.; +#X text 19 403 6 Note: if you do not want to see the graph in this +window \, then you can use the [table] object instead...the array will +then be created inside the [table] object and will be seen only if +you manually open the table.; +#X text 22 31 2 A dialogue box appears where you can type the name +of the array and the desired size. Names can be anything you want - +if you want a localized array \, then name it something like \$1-dave +(the dollar sign indicates that part of the name is a variable which +is unique to this patch). The size of the array can be anything greater +than 0 (zero). At a sample rate of 441000 khz \, an array of 882000 +will provide you with 2 seconds of audio data.; +#X text 21 167 3 The "Save contents" checkbox will inform Pure Data +that you want the array saved within the source code of this patch. +This way \, you can ensure that the array will maintain its values +each time you open this patch. This is recommended only for relatively +small arrays...larger arrays should be saved to either a text file +\, or an audio file.; +#X restore 42 106 pd How_to_create_an_array_in_PD; +#N canvas 133 22 646 607 Common_uses_for_arrays_in_PD 0; +#X text 27 26 COMMON USES FOR ARRAYS IN Pd; +#X text 49 60 Arrays are versatile. Their simple structure make them +useful in countless situations. This page discusses perhaps the most +common applications.; +#X text 50 225 2 MIDI Sequencers: array values limited to a range between +0 and 127 are suitable for MIDI output to be used as pitch \, velocity +\, or controller numbers. Some MIDI information requires a much larger +range \, such as pitch benders.; +#X text 50 306 3 Envelopes: an array with four elements can be used +effectively as an ADSR enveloper. There are numerous examples of this +in other Pd help documents.; +#X text 53 377 4 Math and conversion tables: arrays are an excellent +visual tool when performing fourier analysis and other higher mathematic +functions.; +#X text 54 450 5 Wave editing: with proper manipulation of array data +\, Pd can be fully functional wave editor \, complete with mouse-clickable +cut-n-paste \, pitch-shift \, time expansion \, down/upsampling \, +and other tools typically found in commercial wave editors.; +#X text 49 128 1 Audio sample data: when an array's values are limited +to a range between -1 and 1 \, the numbers are suitable for conversion +to analog audio signal. These arrays are typically many thousands of +elements and stored on hard disk in the form of aiff \, wav or pure +text.; +#X restore 40 239 pd Common_uses_for_arrays_in_PD; +#X text 39 309 NOTE: I strongly recommend that you download the [arraysize] +external to your "pd/extra" folder before continuing. Some of these +examples are impossible without it -- I personally feel that [arraysize] +should be considered for permanent inclusion in future Pd distributions. +Check the CVS Repository or Pure-data.org for [arraysize].; +#X text 40 459 This document is meant to supplement the help documentation +for [table] \, [tabread] \, [tabwrite] \, [soundfiler] \, [tabsend~] +\, [tabreceive~] \, [tabplay~] \, etc.; +#X obj 4 4 cnv 15 500 20 empty empty all_about_arrays 20 10 1 18 -233017 +-66577 0; +#X obj 471 5 pddp; +#X text 316 528 updated for Pd 0.38-2; |