#N canvas 391 23 714 548 12;
#X obj 27 23 tabsend~;
#X text 499 508 updated for Pd version 0.43;
#X text 169 292 creation argument: initializes table name, f 22;
#N canvas 0 22 450 278 (subpatch) 0;
#X array table-1 64 float 0;
#X coords 0 1 63 -1 200 100 1 0 0;
#X restore 490 107 graph;
#X obj 45 197 osc~ 440;
#N canvas 0 22 450 278 (subpatch) 0;
#X array table-2 64 float 0;
#X coords 0 1 63 -1 200 100 1 0 0;
#X restore 490 230 graph;
#X msg 68 234 set table-1;
#X obj 45 296 tabsend~ table-1;
#X msg 357 244 \; pd dsp \$1;
#X obj 357 218 tgl 19 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000 0 1;
#X msg 76 259 set table-2;
#X text 168 236 use 'set' message to change table's name, f 20;
#N canvas 794 185 528 353 block 0;
#X obj 117 113 block~ 1024;
#X obj 49 159 noise~;
#X text 232 183 arrays can also be defined with the array object., f 27;
#X text 235 113 this subpatch runs with a block size of 1024 samples., f 27;
#X obj 49 293 print~;
#X obj 227 228 array define \$0-buffer 1024;
#X obj 49 195 tabsend~ \$0-buffer;
#X obj 49 235 tabreceive~ \$0-buffer;
#X obj 69 265 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X text 45 17 Unlike [send~]/[receive~] and [throw~]/[catch~] \, you can use [tabsend~] and [tabreceive~] to work with with block sizes different than 64 samples. This is useful for working with FFT \, for instance. For that \, you need to change the block size with the [block~] object., f 59;
#X text 427 229 <- click;
#X text 214 113 <-;
#X connect 1 0 6 0;
#X connect 7 0 4 0;
#X connect 8 0 4 0;
#X restore 401 365 pd block;
#X obj 182 509 block~;
#X obj 86 509 send~;
#X obj 233 509 array;
#X text 115 22 - write a block of a signal to an array continuously;
#X obj 27 46 tabreceive~;
#X text 115 46 - read a block of a signal from an array continuously;
#X text 206 416 creation argument: initializes table name, f 23;
#X text 169 359 'set' message to change table name, f 17;
#X obj 59 416 tabreceive~ table-1;
#X msg 78 382 set table-1;
#X msg 59 356 set table-2;
#X obj 59 449 print~;
#X obj 30 415 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 277 509 tabwrite~;
#X text 470 365 <= example with a different block size, f 22;
#X text 380 218 DSP on/off;
#N canvas 647 144 569 384 Dealing_with_"\$0" 0;
#X text 36 33 '\$0' - the patch ID number used to force locality in Pd - is widely used in send/receive names as well as array names. This is specially useful in abstractions so each copy has local names instead of global., f 70;
#X msg 167 212 set \$1;
#X obj 167 186 symbol \$0-x;
#X text 189 159 click to set name;
#X obj 309 221 array define \$0-x 64;
#X obj 94 250 tabsend~;
#X obj 94 202 noise~;
#X obj 167 268 tabreceive~;
#X obj 167 336 print~;
#X text 36 86 You can use "\$0" in an array name and if you need to set the array name you can load it in a symbol object \, since "\$0" doesn't work in messages., f 70;
#X obj 167 159 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 183 304 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X connect 1 0 5 0;
#X connect 1 0 7 0;
#X connect 2 0 1 0;
#X connect 6 0 5 0;
#X connect 7 0 8 0;
#X connect 10 0 2 0;
#X connect 11 0 8 0;
#X restore 483 453 pd Dealing_with_"\$0";
#X text 479 415 open subpatch to see how to deal with '\$0', f 22;
#X obj 8 80 cnv 1 700 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X obj 7 490 cnv 1 700 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#N canvas 701 87 576 461 reference 0;
#X obj 8 53 cnv 5 550 5 empty empty INLET: 8 18 0 13 #202020 #000000 0;
#X obj 8 117 cnv 2 550 2 empty empty OUTLETS: 8 12 0 13 #202020 #000000 0;
#X obj 8 154 cnv 2 550 2 empty empty ARGUMENT: 8 12 0 13 #202020 #000000 0;
#X obj 7 195 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0;
#X obj 8 351 cnv 2 550 2 empty empty OUTLET: 8 12 0 13 #202020 #000000 0;
#X obj 8 396 cnv 2 550 2 empty empty ARGUMENT: 8 12 0 13 #202020 #000000 0;
#X obj 7 433 cnv 5 550 5 empty empty empty 8 18 0 13 #202020 #000000 0;
#X text 126 127 NONE;
#X obj 8 311 cnv 5 550 5 empty empty INLET: 8 18 0 13 #202020 #000000 0;
#X text 189 406 receive name symbol (default: empty symbol).;
#X obj 24 20 tabsend~;
#X text 112 19 - write a block of a signal to an array continuously;
#X obj 27 276 tabreceive~;
#X text 115 276 - read a block of a signal from an array continuously;
#X text 109 324 set <name> - set table name.;
#X text 138 362 signal - outputs signal from a matching tabsend~ object.;
#X text 92 87 set <name> - set table name.;
#X text 119 67 signal - signal to send to matching tabreceive~ object(s).;
#X text 124 162 1) symbol - send symbol name (default: empty symbol).;
#X text 106 406 1) symbol -;
#X restore 535 27 pd reference;
#X text 632 28 <= click;
#X text 12 508 see also:;
#N canvas 643 412 384 186 array-examples 0;
#N canvas 491 316 457 285 open 0;
#X obj 120 23 inlet;
#X obj 173 121 pdcontrol;
#X msg 173 94 dir;
#X obj 120 181 pack s s;
#X obj 173 64 loadbang;
#X msg 120 212 \; pd open \$1 \$2;
#X obj 173 151 makefilename %s/../2.control.examples;
#X connect 0 0 3 0;
#X connect 1 0 6 0;
#X connect 2 0 1 0;
#X connect 3 0 5 0;
#X connect 4 0 2 0;
#X connect 6 0 3 1;
#X restore 52 131 pd open;
#X msg 52 76 15.array.pd;
#X msg 62 102 16.more.arrays.pd;
#X text 144 77 <-- click to open examples.;
#X text 47 22 See also and the "array" examples from the section 2 of Pd's tutorial:, f 39;
#X connect 1 0 0 0;
#X connect 2 0 0 0;
#X restore 349 509 pd array-examples;
#X text 29 108 Use [tabsend~]/[tabreceive~] to write a block of audio to and receive it from an array. By default a block is 64 samples but this can be changed with the [block~] object.;
#X obj 131 509 throw~;
#X connect 4 0 7 0;
#X connect 6 0 7 0;
#X connect 9 0 8 0;
#X connect 10 0 7 0;
#X connect 21 0 24 0;
#X connect 22 0 21 0;
#X connect 23 0 21 0;
#X connect 25 0 24 0;
