#N canvas 471 109 1051 855 12; #X obj 142 173 grid; #X msg 65 153 connect; #X obj 49 325 pack f f f; #X msg 49 350 set \$1 \$2 \$3; #X obj 68 417 s grid; #X obj 142 115 r grid; #X obj 49 288 r x; #X obj 82 288 r y; #X obj 116 287 r s; #X obj 115 224 s x; #X obj 154 225 s y; #X obj 176 256 r x; #X obj 194 291 r y; #X obj 182 225 s s; #X text 257 252 when a key is pressed \, get the column \, subtract 7 and abs (so that the columns run bottom-top) \, multiply by 5 (to create stacked 4ths) and add 40 (for a root note of E like a bass). Then add the x position to that as a semitone.; #X obj 705 310 until; #X obj 705 367 f; #X obj 705 392 + 1; #X obj 729 418 div 16; #X obj 705 287 t f b; #X msg 51 185 all 0; #X msg 749 310 -1; #X obj 659 419 mod 16; #X obj 729 529 + 40; #X obj 711 559 +; #X obj 729 496 * 5; #X obj 729 470 abs; #X obj 729 445 - 7; #X obj 721 662 mod 12; #X obj 721 687 == 0; #X obj 682 723 spigot; #X obj 642 663 list; #X obj 682 773 s grid; #X obj 36 448 s draw-scale; #X msg 682 748 lset \$1 \$2 2; #X obj 36 387 t b a; #X msg 705 263 127; #X text 222 96 keyboard on the grid using the 4th string layout (like a bass guitar). TODO: sort out C-lighting mess.; #X obj 705 211 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1 -1; #N canvas 2 639 450 250 (subpatch) 0; #X array mapping 128 float 3; #A 0 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 0; #X coords 0 40 128 80 200 140 1 0 0; #X restore 665 32 graph; #X obj 711 591 tabwrite mapping; #X obj 196 378 +; #X obj 196 451 tabread mapping; #X obj 196 546 noteout; #X obj 219 488 r s; #X obj 219 513 * 127; #X obj 196 353 * 15; #X obj 244 417 print; #X connect 0 0 9 0; #X connect 0 1 10 0; #X connect 0 2 13 0; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 35 0; #X connect 5 0 0 0; #X connect 6 0 2 0; #X connect 7 0 2 1; #X connect 8 0 2 2; #X connect 11 0 41 1; #X connect 12 0 46 0; #X connect 15 0 16 0; #X connect 16 0 17 0; #X connect 17 0 16 1; #X connect 17 0 18 0; #X connect 17 0 22 0; #X connect 17 0 40 1; #X connect 18 0 27 0; #X connect 19 0 15 0; #X connect 19 1 21 0; #X connect 20 0 0 0; #X connect 21 0 16 0; #X connect 22 0 24 0; #X connect 23 0 24 1; #X connect 24 0 40 0; #X connect 25 0 23 0; #X connect 26 0 25 0; #X connect 27 0 26 0; #X connect 28 0 29 0; #X connect 29 0 30 1; #X connect 30 0 34 0; #X connect 31 0 30 0; #X connect 34 0 32 0; #X connect 35 0 33 0; #X connect 35 1 4 0; #X connect 36 0 19 0; #X connect 38 0 36 0; #X connect 41 0 42 0; #X connect 41 0 47 0; #X connect 42 0 43 0; #X connect 44 0 45 0; #X connect 45 0 43 1; #X connect 46 0 41 0;