#N canvas 18 26 722 672 10;
#X obj 43 91 keyname;
#X symbolatom 90 117 10 0 0 0 - - -;
#X obj 249 88 loadbang;
#X obj 249 108 symbol \$1;
#X msg 264 201 list a w s e d f t g z h u j k o l p ö ä + #;
#X text 595 225 FR;
#X text 607 251 ES;
#X text 582 202 DE_de DE_at;
#X text 557 177 EN_us EN_gb;
#X msg 281 226 list q z s e d f t g y h u j k o l p m ù $;
#X obj 249 132 select en us de fr es;
#X obj 43 116 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
1;
#X obj 61 116 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144 -1
-1;
#X obj 43 502 swap;
#X obj 43 528 pack;
#X obj 43 605 outlet;
#X text 41 624 note on/off;
#X obj 150 396 * 12;
#X obj 176 90 key;
#X obj 89 374 nbx 5 14 -1e+37 1e+37 0 0 empty empty note 0 -8 0 10
-262144 -1 -1 3 256;
#X obj 150 375 nbx 5 14 -1e+37 1e+37 0 0 empty empty octave 0 -8 0
10 -262144 -1 -1 5 256;
#X obj 425 85 inlet;
#X obj 425 106 list trim;
#X obj 426 124 list prepend symbol;
#X obj 426 142 list trim;
#X text 469 88 digest selector and symbol;
#N canvas 1054 261 233 228 octave 0;
#X obj 47 80 moses 49;
#X text 127 98 >=;
#X text 52 96 <;
#X obj 48 111 select 48;
#X obj 129 133 - 49;
#X obj 48 195 outlet;
#X obj 48 47 inlet;
#X obj 129 112 moses 58;
#X msg 48 132 9;
#X connect 0 0 3 0;
#X connect 0 1 7 0;
#X connect 3 0 8 0;
#X connect 4 0 5 0;
#X connect 6 0 0 0;
#X connect 7 0 4 0;
#X connect 8 0 5 0;
#X restore 150 333 pd octave;
#N canvas 624 223 411 391 findsymbol 0;
#X obj 61 37 inlet;
#X obj 222 35 inlet;
#X text 221 12 list of symbols;
#X text 58 15 symbols;
#X obj 60 125 list split 1;
#X obj 60 103 list;
#X obj 60 247 f;
#X msg 260 113 0;
#X obj 243 189 f;
#X obj 274 189 + 1;
#X obj 187 136 list;
#X obj 38 163 t b a b;
#X obj 61 192 select sym;
#X obj 61 63 t b a b a;
#X obj 60 328 outlet;
#X obj 238 304 symbol;
#X obj 239 327 outlet;
#X text 58 346 index of found symbol;
#X text 237 346 symbol not found;
#X obj 60 276 t a b;
#X obj 186 116 spigot;
#X msg 224 91 1;
#X msg 191 92 0;
#X connect 0 0 13 0;
#X connect 1 0 5 1;
#X connect 4 0 11 0;
#X connect 4 1 10 1;
#X connect 4 2 15 0;
#X connect 5 0 4 0;
#X connect 6 0 19 0;
#X connect 7 0 8 1;
#X connect 8 0 6 1;
#X connect 8 0 9 0;
#X connect 9 0 8 1;
#X connect 10 0 4 0;
#X connect 11 0 20 0;
#X connect 11 1 12 0;
#X connect 11 2 8 0;
#X connect 12 0 6 0;
#X connect 13 0 5 0;
#X connect 13 1 12 1;
#X connect 13 2 7 0;
#X connect 13 2 21 0;
#X connect 13 3 15 1;
#X connect 15 0 16 0;
#X connect 19 0 14 0;
#X connect 19 1 22 0;
#X connect 20 0 10 0;
#X connect 21 0 20 1;
#X connect 22 0 20 1;
#X restore 90 239 pd findsymbol;
#X obj 151 302 swap;
#X msg 151 282 0;
#X obj 27 11 cnv 15 650 40 empty empty kbd 10 10 0 14 -233017 -66577
0;
#X obj 151 263 t b b;
#X obj 43 480 spigot;
#X obj 88 418 t f b;
#X msg 120 442 1;
#X msg 183 443 0;
#N canvas 815 329 482 457 display 0;
#X msg 211 148 list c c# d d# e f f# g g# a a# b;
#X obj 165 28 loadbang;
#X obj 142 233 list split;
#X obj 209 208 % 12;
#X obj 142 257 list split 1;
#X obj 274 214 / 12;
#X obj 274 237 int;
#X obj 142 210 list;
#X obj 142 149 t b a a;
#X obj 63 31 inlet;
#X obj 63 56 unpack;
#X obj 63 85 upp.dilemma;
#X obj 63 397 outlet;
#X obj 142 296 list append;
#X msg 63 328 symbol;
#X msg 142 328 symbol \$1\$2;
#X obj 274 258 - 2;
#X connect 0 0 7 1;
#X connect 1 0 0 0;
#X connect 1 0 14 0;
#X connect 2 1 4 0;
#X connect 3 0 2 1;
#X connect 4 0 13 0;
#X connect 5 0 6 0;
#X connect 6 0 16 0;
#X connect 7 0 2 0;
#X connect 8 0 7 0;
#X connect 8 1 3 0;
#X connect 8 2 5 0;
#X connect 9 0 10 0;
#X connect 10 0 11 0;
#X connect 10 1 11 1;
#X connect 11 0 14 0;
#X connect 11 1 8 0;
#X connect 13 0 15 0;
#X connect 14 0 12 0;
#X connect 15 0 12 0;
#X connect 16 0 13 1;
#X restore 341 473 pd display;
#X obj 89 398 +;
#X obj 341 297 loadbang;
#X msg 341 319 5;
#X text 371 321 default octave;
#X obj 374 519 nbx 2 14 -3 9 0 0 empty empty empty 0 -8 0 9 -262144
-1 -1 3 256;
#X obj 337 500 hradio 15 1 0 4 empty empty EN_DE_FR_ES 3 10 0 8 -262144
-258113 -1 1;
#X obj 237 541 route 0 1 2 3;
#X msg 249 175 list a w s e d f t g y h u j k o l p;
#X msg 303 251 list a w s e d f g y h u j k o l p ñ;
#X text 34 53 Caution: there are key (chord) combinations \, that are
not possible \, e.g. a-d-k simultaneously on the US keyboard.;
#X obj 337 517 cnv 5 40 15 empty empty empty 20 12 0 14 -233017 -66577
0;
#X symbolatom 349 519 4 0 0 0 - - -;
#X obj 338 520 bng 10 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
#X obj 372 447 - 2;
#N canvas 838 104 511 661 fltrep 0;
#X obj 227 153 inlet;
#X obj 79 607 outlet;
#X obj 250 339 timer;
#X obj 372 413 unpack;
#X obj 296 413 unpack;
#X obj 411 447 == 0;
#X obj 335 449 == 1;
#X obj 296 449 ==;
#X obj 335 470 *;
#X obj 296 470 *;
#X obj 250 359 < 10;
#X obj 372 275 list;
#X obj 64 282 spigot;
#X obj 250 550 == 0;
#X obj 250 602 select 0;
#X text 240 529 1...is repetition;
#X obj 250 495 *;
#X obj 250 310 t b b a;
#X text 43 20 Key repetitions are characterized by a sequence of key-up/key-down
combinations in <10ms time intervals.;
#X text 44 54 We filter these by delaying a key-stroke for 10ms \,
checking if there is any close follow-up key-down of the same key.
;
#X obj 78 586 pack;
#X obj 64 324 unpack;
#X text 294 396 check if old and new match;
#X text 254 293 new;
#X text 377 294 old;
#X obj 37 359 upp.dilemma;
#X text 45 92 It is sufficient to delay key-up messages only \, therefore
let pass unfiltered key-downs to avoid unnecessary latency.;
#X obj 37 500 list;
#X obj 37 525 t a b;
#X text 76 525 clear;
#X obj 37 549 route float;
#X obj 226 177 t a a b a;
#X obj 250 572 t a a;
#X obj 37 441 pipe 10;
#X msg 117 442 clear;
#X connect 0 0 31 0;
#X connect 2 0 10 0;
#X connect 3 0 7 1;
#X connect 3 1 5 0;
#X connect 4 0 7 0;
#X connect 4 1 6 0;
#X connect 5 0 8 1;
#X connect 6 0 8 0;
#X connect 7 0 9 0;
#X connect 8 0 9 1;
#X connect 9 0 16 1;
#X connect 10 0 16 0;
#X connect 11 0 3 0;
#X connect 12 0 21 0;
#X connect 13 0 32 0;
#X connect 14 0 34 0;
#X connect 16 0 13 0;
#X connect 17 0 2 0;
#X connect 17 1 2 1;
#X connect 17 2 4 0;
#X connect 20 0 1 0;
#X connect 21 0 25 0;
#X connect 21 1 20 1;
#X connect 21 1 25 1;
#X connect 25 0 33 0;
#X connect 25 1 27 0;
#X connect 27 0 28 0;
#X connect 28 0 30 0;
#X connect 28 1 27 1;
#X connect 30 0 20 0;
#X connect 31 0 12 0;
#X connect 31 1 17 0;
#X connect 31 1 11 1;
#X connect 31 2 11 0;
#X connect 32 0 14 0;
#X connect 32 0 12 1;
#X connect 33 0 27 0;
#X connect 34 0 33 0;
#X restore 42 573 pd fltrep;
#X text 564 15 grrrr.org \, 2012;
#X text 34 32 play MIDI notes with octave shift and inhibited repetition
;
#X connect 0 0 11 0;
#X connect 0 0 12 0;
#X connect 0 1 1 0;
#X connect 1 0 27 0;
#X connect 2 0 3 0;
#X connect 3 0 10 0;
#X connect 4 0 27 1;
#X connect 9 0 27 1;
#X connect 10 0 44 0;
#X connect 10 1 44 0;
#X connect 10 2 4 0;
#X connect 10 3 9 0;
#X connect 10 4 45 0;
#X connect 10 5 44 0;
#X connect 11 0 32 0;
#X connect 13 0 14 0;
#X connect 13 1 14 1;
#X connect 14 0 51 0;
#X connect 17 0 37 1;
#X connect 18 0 28 1;
#X connect 19 0 37 0;
#X connect 20 0 17 0;
#X connect 20 0 50 0;
#X connect 21 0 22 0;
#X connect 22 0 23 0;
#X connect 23 0 24 0;
#X connect 24 0 3 0;
#X connect 26 0 20 0;
#X connect 27 0 19 0;
#X connect 27 1 31 0;
#X connect 28 0 26 0;
#X connect 29 0 28 0;
#X connect 31 0 29 0;
#X connect 31 1 35 0;
#X connect 32 0 13 0;
#X connect 33 0 13 1;
#X connect 33 1 34 0;
#X connect 34 0 32 1;
#X connect 35 0 32 1;
#X connect 36 0 48 0;
#X connect 36 0 49 0;
#X connect 37 0 33 0;
#X connect 38 0 39 0;
#X connect 39 0 20 0;
#X connect 42 0 43 0;
#X connect 43 0 44 0;
#X connect 43 1 4 0;
#X connect 43 2 9 0;
#X connect 43 3 45 0;
#X connect 44 0 27 1;
#X connect 45 0 27 1;
#X connect 50 0 41 0;
#X connect 51 0 15 0;
#X connect 51 0 36 0;
#X coords 0 -1 1 1 90 35 1 310 500;
