pd-experiments/life.pd

614 lines
15 KiB
Plaintext

#N canvas 649 102 516 443 12;
#N canvas 179 251 1659 799 life 0;
#X obj 119 475 grid;
#X obj 119 500 route 1;
#X obj 119 525 unpack f f;
#X obj 119 568 +;
#X obj 186 548 * 16;
#X obj 119 443 r grid;
#X obj 481 269 s grid;
#N canvas 245 185 798 675 life-frame 0;
#N canvas 1293 59 508 798 neighbors 0;
#X obj 11 30 inlet;
#X obj 11 165 until;
#X obj 11 190 f;
#X obj 11 220 + 1;
#X obj 64 316 t f f;
#X obj 24 353 mod 3;
#X obj 96 383 div 3;
#X obj 24 403 +;
#X msg 55 165 0;
#X obj 11 138 t f b;
#X obj 64 285 - 1;
#X obj 24 378 * 16;
#X obj 60 454 - 17;
#X obj 24 474 +;
#X obj 24 500 mod 128;
#X text 99 447 has the effect of moving up a row and left a cell to
start neighbor search (which should be correct);
#X obj 60 409 r \$0-cell;
#X obj 57 99 s \$0-cell;
#X msg 11 110 8;
#X obj 24 525 tabread life0;
#X obj 24 550 +;
#X obj 24 575 t f f;
#X obj 6 603 f;
#X obj 6 628 t f b;
#X msg 51 628 0;
#X obj 11 59 t b f, f 7;
#X text 56 551 accumulator by IOhannes on #dataflow;
#X obj 11 245 t f f, f 8;
#X obj 8 270 sel 9;
#X obj 6 653 outlet;
#X text 36 4 Game of life neighborhood count;
#X connect 0 0 25 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 2 1;
#X connect 3 0 27 0;
#X connect 4 0 5 0;
#X connect 4 1 6 0;
#X connect 5 0 11 0;
#X connect 6 0 7 1;
#X connect 7 0 13 0;
#X connect 8 0 2 0;
#X connect 9 0 1 0;
#X connect 9 1 8 0;
#X connect 10 0 4 0;
#X connect 11 0 7 0;
#X connect 12 0 13 1;
#X connect 13 0 14 0;
#X connect 14 0 19 0;
#X connect 16 0 12 0;
#X connect 18 0 9 0;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 21 0 22 1;
#X connect 21 1 20 1;
#X connect 22 0 23 0;
#X connect 23 0 29 0;
#X connect 23 1 24 0;
#X connect 24 0 21 0;
#X connect 25 0 18 0;
#X connect 25 1 17 0;
#X connect 27 0 28 0;
#X connect 27 1 10 0;
#X connect 28 0 22 0;
#X restore 471 233 pd neighbors;
#X msg 302 39 128;
#X obj 301 94 until;
#X obj 301 119 f;
#X obj 301 144 + 1;
#X obj 302 64 t f b;
#X msg 353 98 0;
#X obj 301 169 - 1;
#X obj 471 258 sel 4 3, f 9;
#X msg 531 289 0;
#X msg 501 289 1;
#X obj 475 381 tabwrite life1;
#X obj 386 278 spigot;
#X obj 418 330 tabread life0;
#X obj 25 214 sel 127;
#X obj 57 265 array get life1 0 128;
#X obj 25 239 t b b;
#X obj 57 290 array set life0 0 128;
#X obj 386 303 t b f;
#X msg 452 284 1;
#X msg 386 330 0;
#X obj 302 9 inlet;
#X obj 25 314 v page;
#X obj 25 339 sel 0;
#X obj 25 364 s draw-life;
#X obj 301 193 t f f f f f, f 37;
#X obj 207 337 tabread triggers;
#X obj 207 362 t f f, f 6;
#X obj 246 389 != 0;
#X obj 207 420 spigot;
#X obj 268 236 t f f;
#X obj 289 278 tabread life1;
#X text 344 6 game of life - run a generation \, outlet sends the numbers
of triggers that cells are on this generation;
#X obj 289 303 == 1;
#X obj 207 445 spigot;
#X obj 207 470 outlet;
#X connect 0 0 8 0;
#X connect 1 0 5 0;
#X connect 2 0 3 0;
#X connect 3 0 4 0;
#X connect 4 0 7 0;
#X connect 4 0 3 1;
#X connect 5 0 2 0;
#X connect 5 1 6 0;
#X connect 6 0 3 1;
#X connect 7 0 25 0;
#X connect 8 0 19 0;
#X connect 8 1 10 0;
#X connect 8 2 9 0;
#X connect 9 0 11 0;
#X connect 10 0 11 0;
#X connect 12 0 18 0;
#X connect 13 0 11 0;
#X connect 14 0 16 0;
#X connect 15 0 17 0;
#X connect 16 0 22 0;
#X connect 16 1 15 0;
#X connect 18 0 20 0;
#X connect 18 1 13 0;
#X connect 19 0 12 1;
#X connect 20 0 12 1;
#X connect 21 0 1 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 25 0 14 0;
#X connect 25 1 30 0;
#X connect 25 2 12 0;
#X connect 25 3 0 0;
#X connect 25 4 11 1;
#X connect 26 0 27 0;
#X connect 27 0 29 0;
#X connect 27 1 28 0;
#X connect 28 0 29 1;
#X connect 29 0 34 0;
#X connect 30 0 26 0;
#X connect 30 1 31 0;
#X connect 31 0 33 0;
#X connect 33 0 34 1;
#X connect 34 0 35 0;
#X restore 333 467 pd life-frame;
#X text 66 424 grid I/O;
#X obj 333 429 metro 200;
#X obj 333 401 r playing;
#X obj 393 129 t b b, f 13;
#X text 371 80 drawing;
#X obj 393 154 v playing;
#X text 325 379 run life;
#X obj 393 179 * 8;
#X msg 389 208 lset 15 7 \$1;
#X obj 717 463 loadbang;
#X obj 717 538 s page;
#X obj 119 619 v page;
#X text 704 439 on init \, reset all \, and we're on the life page
(page 0);
#X msg 717 513 0;
#X text 372 54 pages: 0 - life \, 1 - triggers;
#X obj 119 644 pack f f;
#X obj 119 593 t b f, f 8;
#X text 181 644 packs to page \, index;
#N canvas 331 178 651 566 life-page 0;
#X obj 370 95 tabread life0;
#X obj 370 155 tabwrite life0;
#X obj 370 120 == 0;
#X obj 347 68 t b f f;
#X obj 46 92 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 1
;
#X obj 46 112 s playing;
#X obj 14 59 t b b;
#X obj 14 9 inlet;
#X obj 347 178 s draw-life;
#X obj 14 134 s draw-life;
#X obj 14 34 route 127 126, f 48;
#X text 90 17 bottom row keys;
#X msg 203 144 1;
#X obj 203 169 s page;
#X msg 240 94 all 0;
#X obj 240 119 s grid;
#X text 140 187 switch to triggers page;
#N canvas 506 332 718 499 plot-triggers 0;
#X obj 38 37 inlet;
#X obj 38 240 tabread triggers;
#X obj 197 284 mod 16;
#X obj 148 284 div 16;
#X obj 38 400 pack f f f;
#X obj 38 450 s grid;
#X msg 38 425 lset \$3 \$2 \$1;
#X text 94 32 plot all the triggers on the grid.;
#X msg 38 62 128;
#X obj 38 87 t f b;
#X obj 38 112 until;
#X obj 38 137 f;
#X obj 38 162 + 1;
#X msg 80 113 0;
#X obj 38 187 - 1;
#X obj 38 212 t f f, f 18;
#X obj 161 240 t f f;
#X obj 38 265 t f f, f 6;
#X obj 77 295 != 0;
#X obj 38 320 spigot;
#X obj 38 345 * 2;
#X obj 38 370 - 1;
#X connect 0 0 8 0;
#X connect 1 0 17 0;
#X connect 2 0 4 2;
#X connect 3 0 4 1;
#X connect 4 0 6 0;
#X connect 6 0 5 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 9 1 13 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 11 1;
#X connect 12 0 14 0;
#X connect 13 0 11 1;
#X connect 14 0 15 0;
#X connect 15 0 1 0;
#X connect 15 1 16 0;
#X connect 16 0 3 0;
#X connect 16 1 2 0;
#X connect 17 0 19 0;
#X connect 17 1 18 0;
#X connect 18 0 19 1;
#X connect 19 0 20 0;
#X connect 20 0 21 0;
#X connect 21 0 4 0;
#X restore 77 89 pd plot-triggers;
#X obj 180 63 t b b b b;
#X obj 220 233 s grid;
#X msg 220 208 set 14 7 1;
#X connect 0 0 2 0;
#X connect 2 0 1 0;
#X connect 3 0 8 0;
#X connect 3 1 0 0;
#X connect 3 2 1 1;
#X connect 4 0 5 0;
#X connect 6 0 9 0;
#X connect 6 1 4 0;
#X connect 7 0 10 0;
#X connect 10 0 6 0;
#X connect 10 1 18 0;
#X connect 10 2 3 0;
#X connect 12 0 13 0;
#X connect 14 0 15 0;
#X connect 18 0 17 0;
#X connect 18 1 12 0;
#X connect 18 2 20 0;
#X connect 18 3 14 0;
#X connect 20 0 19 0;
#X restore 119 722 pd life-page;
#X obj 393 104 r draw-life;
#N canvas 1011 59 881 1026 plot-life 0;
#X obj 21 356 t f b;
#X obj 21 381 until;
#X obj 21 406 f;
#X obj 21 431 + 1;
#X obj 21 456 - 1;
#X msg 64 382 0;
#X msg 21 331 8;
#X obj 21 562 sel 7;
#X obj 21 481 t f f f, f 14;
#X obj 147 628 tabread life0;
#X obj 147 680 <<;
#X obj 147 705 +;
#X obj 147 730 t f f;
#X obj 129 758 f;
#X obj 129 783 t f b;
#X msg 174 783 0;
#X text 179 706 accumulator by IOhannes on #dataflow;
#X msg 21 230 8;
#X obj 21 255 t f b;
#X obj 21 280 until;
#X msg 218 275 0;
#X obj 21 305 t b b, f 26;
#X obj 200 334 f;
#X obj 200 359 + 1;
#X obj 200 384 - 1;
#X obj 68 576 +;
#X obj 129 833 list;
#X obj 129 808 list prepend;
#X obj 129 908 spigot;
#X obj 200 409 s \$0-step;
#X obj 86 508 r \$0-step;
#X obj 86 533 * 16;
#X obj 189 863 r \$0-step;
#X obj 189 888 == 7;
#X msg 21 36 2;
#X obj 21 61 t f b;
#X obj 21 123 f;
#X msg 73 60 0;
#X obj 21 86 until;
#X obj 21 148 + 1;
#X obj 21 173 - 1;
#X obj 21 200 t b f, f 43;
#X obj 319 235 * 8;
#X obj 319 260 s \$0-offset;
#X obj 99 587 r \$0-offset;
#X obj 68 607 +;
#X text 72 6 this absolute disaster of a subpatch converts the array
into 2 bitmaps to plot on the grid in the minimum amount of OSC messages.
TODO organise and break into subpatches;
#X text 226 814 construct a list of all the values outputted by the
loop and only output once the list is full;
#X text 53 154 run twice \, with offsets of 0 (first half of the grid)
and 8 (second half of the grid);
#X text 60 229 for each row of the grid;
#X text 55 454 loop through each cell in the (8-cell) row);
#X text 177 666 read it and bitshift that value by the position in
the row of the item;
#X text 184 759 add up bitshifted values;
#X obj 129 941 t b a;
#X msg 92 942 0;
#X obj 162 988 list trim;
#X obj 291 918 r \$0-offset;
#X obj 162 963 list prepend map;
#X msg 291 943 map \$1;
#X text 361 940 convert to a grid messsage;
#X obj 162 1013 outlet;
#X obj 21 12 inlet;
#X connect 0 0 1 0;
#X connect 0 1 5 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 3 0 2 1;
#X connect 3 0 4 0;
#X connect 4 0 8 0;
#X connect 5 0 2 1;
#X connect 6 0 0 0;
#X connect 7 0 13 0;
#X connect 8 0 7 0;
#X connect 8 1 25 0;
#X connect 8 2 10 1;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 11 0 12 0;
#X connect 12 0 13 1;
#X connect 12 1 11 1;
#X connect 13 0 14 0;
#X connect 14 0 27 0;
#X connect 14 1 15 0;
#X connect 15 0 12 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 18 1 20 0;
#X connect 19 0 21 0;
#X connect 20 0 22 1;
#X connect 21 0 6 0;
#X connect 21 1 22 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 23 0 22 1;
#X connect 24 0 29 0;
#X connect 25 0 45 0;
#X connect 26 0 27 1;
#X connect 26 0 28 0;
#X connect 27 0 26 0;
#X connect 28 0 53 0;
#X connect 30 0 31 0;
#X connect 31 0 25 1;
#X connect 32 0 33 0;
#X connect 33 0 28 1;
#X connect 34 0 35 0;
#X connect 35 0 38 0;
#X connect 35 1 37 0;
#X connect 36 0 39 0;
#X connect 37 0 36 1;
#X connect 38 0 36 0;
#X connect 39 0 40 0;
#X connect 39 0 36 1;
#X connect 40 0 41 0;
#X connect 41 0 17 0;
#X connect 41 1 42 0;
#X connect 42 0 43 0;
#X connect 44 0 45 1;
#X connect 45 0 9 0;
#X connect 53 0 54 0;
#X connect 53 1 57 0;
#X connect 54 0 27 1;
#X connect 55 0 60 0;
#X connect 56 0 58 0;
#X connect 57 0 55 0;
#X connect 58 0 57 1;
#X connect 61 0 34 0;
#X restore 481 153 pd plot-life;
#X obj 119 669 route 0 1;
#N canvas 1092 401 784 561 trigger-page 0;
#X obj 14 9 inlet;
#X text 54 16 bottom row keys;
#X obj 14 147 s page;
#X msg 14 122 0;
#X obj 14 59 t b b;
#X obj 46 87 s draw-life;
#X obj 214 102 tabread triggers;
#X obj 272 225 tabwrite triggers;
#X obj 214 67 t f f, f 19;
#X obj 214 127 + 1;
#X obj 329 154 mod 16;
#X obj 344 99 t f f f;
#X obj 280 154 div 16;
#X obj 237 265 pack f f f;
#X obj 237 315 s grid;
#X msg 237 290 lset \$3 \$2 \$1;
#X obj 214 152 mod 9;
#X text 230 29 increment (looping so there's 8 samples) the pressed
key in the triggers \, and reflect that on the grid;
#X obj 237 205 * 2;
#X obj 237 230 - 1;
#X obj 14 34 route 126 127, f 29;
#X obj 96 413 sampler-abstraction;
#X obj 89 290 - 1;
#X obj 214 177 t f f f;
#X obj 96 438 dac~;
#X obj 128 348 != -1;
#X obj 89 315 t f f, f 6;
#X obj 89 380 spigot;
#X connect 0 0 20 0;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 4 1 5 0;
#X connect 6 0 9 0;
#X connect 8 0 6 0;
#X connect 8 1 11 0;
#X connect 9 0 16 0;
#X connect 10 0 13 2;
#X connect 11 0 12 0;
#X connect 11 1 10 0;
#X connect 11 2 7 1;
#X connect 12 0 13 1;
#X connect 13 0 15 0;
#X connect 15 0 14 0;
#X connect 16 0 23 0;
#X connect 18 0 19 0;
#X connect 19 0 13 0;
#X connect 20 0 4 0;
#X connect 20 2 8 0;
#X connect 21 0 24 0;
#X connect 21 0 24 1;
#X connect 22 0 26 0;
#X connect 23 0 22 0;
#X connect 23 1 18 0;
#X connect 23 2 7 0;
#X connect 25 0 27 1;
#X connect 26 0 27 0;
#X connect 26 1 25 0;
#X connect 27 0 21 0;
#X restore 149 699 pd trigger-page;
#X obj 335 712 dac~;
#X obj 1135 512 openpanel;
#X obj 1154 566 pack s s;
#X msg 1154 595 read -resize \$1 \$2;
#X obj 1207 512 makefilename b%d;
#X obj 1154 620 soundfiler;
#X obj 333 492 - 1;
#X obj 335 668 clone sampler-abstraction 8;
#X obj 335 613 t f f;
#X obj 335 638 pack f f;
#X text 1132 461 load samples;
#X obj 152 5 bng 15 250 50 0 empty empty reset 17 7 0 10 -262144 -1
-1;
#X obj 152 25 s \$0-reset;
#X obj 807 468 r \$0-reset;
#X obj 1135 489 r \$0-load;
#X obj 47 279 bng 15 250 50 0 empty empty load 17 7 0 10 -4034 -1 -1
;
#X obj 48 326 s \$0-load;
#X floatatom 7 276 5 0 7 2 sample - -;
#X obj 7 300 s \$0-sample-num;
#X obj 1207 489 r \$0-sample-num;
#X obj 467 391 r \$0-speed;
#X obj 199 145 vsl 15 128 50 400 0 0 empty empty rate 0 -9 0 10 -204786
-1 -1 7700 1;
#X floatatom 199 281 5 0 0 0 - - -;
#X obj 199 305 s \$0-speed;
#X text 367 6 this could all be optimised \, but I went for a "simple"
solution \, and I'm bad at patching.;
#X msg 90 107 connect;
#X obj 8 69 bng 15 250 50 0 empty empty connect 17 7 0 10 -4034 -1
-1;
#X text 6 47 grid I/O;
#X obj 90 132 s grid;
#X obj 8 87 bng 15 250 50 0 empty empty disconnect 17 7 0 10 -258113
-1 -1;
#X text 3 4 cellular samples;
#X obj 717 488 t b b, f 10;
#X msg 784 524 \; life0 const 0 \; triggers const 0 \; b0 const 0 \;
b1 const 0 \; b2 const 0 \; b3 const 0 \; b4 const 0 \; b5 const 0
\; b6 const 0 \; b7 const 0;
#X obj 333 517 t f f;
#X obj 365 548 != -1;
#X obj 333 572 spigot;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b0 8545 float 2;
#X coords 0 1 8545 -1 100 20 1 0 0;
#X restore 244 20 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b1 6048 float 2;
#X coords 0 1 6048 -1 100 20 1 0 0;
#X restore 243 55 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b2 6644 float 2;
#X coords 0 1 6644 -1 100 20 1 0 0;
#X restore 243 91 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b4 10869 float 2;
#X coords 0 1 10869 -1 100 20 1 0 0;
#X restore 243 161 graph;
#N canvas 1468 59 450 250 (subpatch) 0;
#X array b5 100 float 3;
#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0;
#X coords 0 1 100 -1 100 20 1 0 0;
#X restore 243 196 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b6 100 float 3;
#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0;
#X coords 0 1 100 -1 100 20 1 0 0;
#X restore 243 230 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b7 100 float 3;
#A 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0;
#X coords 0 1 100 -1 100 20 1 0 0;
#X restore 243 265 graph;
#N canvas 0 50 450 250 (subpatch) 0;
#X array b3 6048 float 2;
#X coords 0 1 6048 -1 100 20 1 0 0;
#X restore 243 126 graph;
#X msg 8 107 disconnect;
#X obj 615 69 table life0 128;
#X obj 615 92 table life1 128;
#X obj 615 115 table triggers 128;
#X connect 0 0 1 0;
#X connect 1 0 2 0;
#X connect 2 0 3 0;
#X connect 2 1 4 0;
#X connect 3 0 24 0;
#X connect 4 0 3 1;
#X connect 5 0 0 0;
#X connect 7 0 37 0;
#X connect 9 0 7 0;
#X connect 10 0 9 0;
#X connect 11 0 13 0;
#X connect 11 1 28 0;
#X connect 13 0 15 0;
#X connect 15 0 16 0;
#X connect 16 0 6 0;
#X connect 17 0 62 0;
#X connect 19 0 23 0;
#X connect 21 0 18 0;
#X connect 23 0 29 0;
#X connect 24 0 19 0;
#X connect 24 1 23 1;
#X connect 27 0 11 0;
#X connect 28 0 6 0;
#X connect 29 0 26 0;
#X connect 29 1 30 0;
#X connect 32 0 33 0;
#X connect 33 0 34 0;
#X connect 34 0 36 0;
#X connect 35 0 33 1;
#X connect 37 0 64 0;
#X connect 38 0 31 0;
#X connect 38 0 31 1;
#X connect 39 0 40 0;
#X connect 39 1 40 1;
#X connect 40 0 38 0;
#X connect 42 0 43 0;
#X connect 44 0 62 0;
#X connect 45 0 32 0;
#X connect 46 0 47 0;
#X connect 46 0 48 0;
#X connect 48 0 49 0;
#X connect 50 0 35 0;
#X connect 51 0 9 1;
#X connect 52 0 53 0;
#X connect 53 0 54 0;
#X connect 56 0 59 0;
#X connect 57 0 56 0;
#X connect 60 0 75 0;
#X connect 62 0 21 0;
#X connect 62 1 63 0;
#X connect 64 0 66 0;
#X connect 64 1 65 0;
#X connect 65 0 66 1;
#X connect 66 0 39 0;
#X connect 75 0 59 0;
#X coords 0 -1 1 1 350 300 2 0 0;
#X restore 79 51 pd life;
#X coords 0 0 1 1 85 60 0;