#N canvas 438 23 714 548 12;
#X obj 27 23 tabsend~;
#X text 499 508 updated for Pd version 0.43;
#X text 169 268 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 177 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 214 set table-1;
#X obj 45 276 tabsend~ table-1;
#X msg 76 239 set table-2;
#X text 168 216 use 'set' message to change table's name, f 20;
#X obj 182 509 block~;
#X obj 86 509 send~;
#X obj 233 509 array;
#X obj 27 46 tabreceive~;
#X text 193 372 creation argument: initializes table name, f 23;
#X text 156 322 'set' message to change table name, f 17;
#X obj 46 379 tabreceive~ table-1;
#X msg 65 345 set table-1;
#X msg 46 319 set table-2;
#X obj 46 442 print~;
#X obj 64 411 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 277 509 tabwrite~;
#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 21;
#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 698 99 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 obj 24 20 tabsend~;
#X obj 27 276 tabreceive~;
#X text 106 406 1) symbol -;
#X text 112 19 - write a block of audio to arrays continuously.;
#X text 115 276 - read a block of audio from arrays continuously.;
#X text 85 88 set <list> - set table names.;
#X text 91 68 signal(s) - 1 or more channels to write to corresponding arrays., f 64;
#X text 124 162 1) list - set table names (default: empty symbol).;
#X text 109 324 set <list> - set table names.;
#X text 189 406 set table names (default: empty symbol).;
#X text 104 363 signal(s) - outputs 1 or more channels from matching arrays.;
#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 text 221 424 <-- example with a different block size, 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 427 229 <- click;
#X text 214 113 <-;
#X text 45 17 Like pairs of [send~]/[receive~] and delay lines \, [tabsend~] and [tabreceive~] work with any block sizes. The default block size is 64 but you can change it with the [block~] object.;
#X connect 1 0 6 0;
#X connect 7 0 4 0;
#X connect 8 0 4 0;
#X restore 134 424 pd [block~];
#X msg 358 243 \; pd dsp \$1;
#X obj 358 208 set-dsp-tgl;
#X text 389 212 DSP on/off;
#N canvas 577 106 609 529 multichannel 0;
#X msg 453 278 \; pd dsp \$1;
#X text 485 241 DSP on/off;
#X obj 453 237 set-dsp-tgl;
#X text 41 14 [tabsend~] and [tabreceive~] have support for multichannel signals in a similar fashion to the way [tabwrite~] and [tabplay~] work. This way \, [tabsend~] takes multichannel signals and distributes it to arrays and [tabreceive~] generates multichannel signals if it has more than one table argument. The set message also replaces all table names., f 71;
#N canvas 0 50 450 250 (subpatch) 0;
#X array array55 64 float 0;
#X coords 0 1 63 -1 200 140 1 0 0;
#X restore 95 377 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array array66 64 float 0;
#X coords 0 1 63 -1 200 140 1 0 0;
#X restore 322 377 graph;
#X obj 58 193 snake~ in;
#X obj 285 224 snake~ out;
#X obj 58 129 osc~ 500;
#X obj 118 159 osc~ 1000;
#X obj 285 301 print~ L;
#X obj 352 302 print~ R;
#X obj 303 262 bng 19 250 50 0 empty empty empty 0 -10 0 12 #dfdfdf #000000 #000000;
#X obj 58 309 tabsend~ array55 array66;
#X msg 76 230 set array55 array66;
#X msg 88 261 set array66 array55;
#X msg 297 155 set array66 array55;
#X msg 285 125 set array55 array66;
#X obj 285 190 tabreceive~ array55 array66;
#X connect 2 0 0 0;
#X connect 6 0 13 0;
#X connect 7 0 10 0;
#X connect 7 1 11 0;
#X connect 8 0 6 0;
#X connect 9 0 6 1;
#X connect 12 0 11 0;
#X connect 12 0 10 0;
#X connect 14 0 13 0;
#X connect 15 0 13 0;
#X connect 16 0 18 0;
#X connect 17 0 18 0;
#X connect 18 0 7 0;
#X restore 547 376 pd multichannel;
#X text 396 361 mutichannel signal support ----------->, f 20;
#X text 115 46 - read a block of audio from arrays continuously;
#X text 115 22 - write a block of audio to arrays continuously;
#X connect 4 0 7 0;
#X connect 6 0 7 0;
#X connect 8 0 7 0;
#X connect 16 0 19 0;
#X connect 17 0 16 0;
#X connect 18 0 16 0;
#X connect 20 0 19 0;
#X connect 35 0 34 0;
