#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;