#N canvas 438 23 715 538 12;
#X obj 27 17 tabsend~;
#X text 499 499 updated for Pd version 0.43;
#X text 169 259 creation argument: initializes table name, f 22;
#X obj 45 168 osc~ 440;
#X msg 68 205 set table-1;
#X obj 45 267 tabsend~ table-1;
#X msg 76 230 set table-2;
#X text 168 207 use 'set' message to change table's name, f 20;
#X obj 182 500 block~;
#X obj 86 500 send~;
#X obj 233 500 array;
#X obj 27 40 tabreceive~;
#X text 193 363 creation argument: initializes table name, f 23;
#X text 156 313 'set' message to change table name, f 17;
#X obj 46 370 tabreceive~ table-1;
#X msg 65 336 set table-1;
#X msg 46 310 set table-2;
#X obj 46 433 print~;
#X obj 64 402 bng 19 250 50 0 empty empty empty 17 7 0 10 #dfdfdf #000000 #000000;
#X obj 277 500 tabwrite~;
#N canvas 647 144 569 384 Dealing_with_"\$0" 0;
#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 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 especially useful in abstractions so each copy has local names instead of global., f 70;
#X connect 0 0 4 0;
#X connect 0 0 6 0;
#X connect 1 0 0 0;
#X connect 5 0 4 0;
#X connect 6 0 7 0;
#X connect 9 0 1 0;
#X connect 10 0 7 0;
#X restore 483 444 pd Dealing_with_"\$0";
#X text 479 406 open subpatch to see how to deal with '\$0', f 21;
#X obj 8 71 cnv 1 700 1 empty empty empty 8 12 0 13 #000000 #000000 0;
#X obj 7 481 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 21 pd reference;
#X text 632 22 <= click;
#X text 12 499 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 500 pd array-examples;
#X text 29 99 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 500 throw~;
#X text 221 415 <-- 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 415 pd [block~];
#X msg 358 234 \; pd dsp \$1;
#X obj 358 199 set-dsp-tgl;
#X text 389 203 DSP on/off;
#N canvas 577 106 596 554 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;
#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 obj 96 378 cnv 19 198 138 empty empty empty 20 12 0 12 #e0e0e0 #404040 0;
#X obj 323 378 cnv 19 198 138 empty empty empty 20 12 0 12 #e0e0e0 #404040 0;
#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 connect 2 0 0 0;
#X connect 4 0 11 0;
#X connect 5 0 8 0;
#X connect 5 1 9 0;
#X connect 6 0 4 0;
#X connect 7 0 4 1;
#X connect 10 0 9 0;
#X connect 10 0 8 0;
#X connect 12 0 11 0;
#X connect 13 0 11 0;
#X connect 14 0 16 0;
#X connect 15 0 16 0;
#X connect 16 0 5 0;
#X restore 547 367 pd multichannel;
#X text 396 352 mutichannel signal support ----------->, f 20;
#X text 115 40 - read a block of audio from arrays continuously;
#X text 115 16 - write a block of audio to arrays continuously;
#X obj 491 99 cnv 19 198 98 empty empty empty 20 12 0 12 #e0e0e0 #404040 0;
#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 98 graph;
#X obj 491 222 cnv 19 198 98 empty empty empty 20 12 0 12 #e0e0e0 #404040 0;
#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 221 graph;
#X connect 3 0 5 0;
#X connect 4 0 5 0;
#X connect 6 0 5 0;
#X connect 14 0 17 0;
#X connect 15 0 14 0;
#X connect 16 0 14 0;
#X connect 18 0 17 0;
#X connect 33 0 32 0;
