From b5345f034539f4117973d9989f7d36b5434b9ef5 Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Mon, 8 Jun 2026 23:34:32 -0700 Subject: [PATCH] use real sounds from kbsim --- README.md | 30 ++- assets/samples/cherry-mx-blue.wav | Bin 8684 -> 0 bytes assets/samples/cherry-mx-brown.wav | Bin 6764 -> 0 bytes assets/samples/cherry-mx-red.wav | Bin 4844 -> 0 bytes .../samples/kbsim/alpaca/press/BACKSPACE.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/alpaca/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/alpaca/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/alpaca/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/alpaca/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/alpaca/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/alpaca/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/alpaca/press/SPACE.mp3 | Bin 0 -> 2506 bytes .../kbsim/alpaca/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/alpaca/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/alpaca/release/GENERIC.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/alpaca/release/SPACE.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/press/BACKSPACE.mp3 | Bin 0 -> 3342 bytes assets/samples/kbsim/alpsblue/press/ENTER.mp3 | Bin 0 -> 4478 bytes .../kbsim/alpsblue/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/alpsblue/press/SPACE.mp3 | Bin 0 -> 2506 bytes .../kbsim/alpsblue/release/BACKSPACE.mp3 | Bin 0 -> 2924 bytes .../samples/kbsim/alpsblue/release/ENTER.mp3 | Bin 0 -> 2506 bytes .../kbsim/alpsblue/release/GENERIC.mp3 | Bin 0 -> 2088 bytes .../kbsim/alpsblue/release/GENERIC_long.mp3 | Bin 0 -> 2924 bytes .../samples/kbsim/alpsblue/release/SPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/boxnavy/press/BACKSPACE.mp3 | Bin 0 -> 2924 bytes assets/samples/kbsim/boxnavy/press/ENTER.mp3 | Bin 0 -> 2088 bytes .../kbsim/boxnavy/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../kbsim/boxnavy/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../kbsim/boxnavy/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../kbsim/boxnavy/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../kbsim/boxnavy/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/boxnavy/press/SPACE.mp3 | Bin 0 -> 2924 bytes .../kbsim/boxnavy/release/BACKSPACE.mp3 | Bin 0 -> 4178 bytes .../samples/kbsim/boxnavy/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/boxnavy/release/GENERIC.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/boxnavy/release/SPACE.mp3 | Bin 0 -> 2506 bytes .../kbsim/buckling/press/BACKSPACE.mp3 | Bin 0 -> 2924 bytes assets/samples/kbsim/buckling/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../kbsim/buckling/press/GENERIC_R0.mp3 | Bin 0 -> 3342 bytes .../kbsim/buckling/press/GENERIC_R1.mp3 | Bin 0 -> 3342 bytes .../kbsim/buckling/press/GENERIC_R2.mp3 | Bin 0 -> 3342 bytes .../kbsim/buckling/press/GENERIC_R3.mp3 | Bin 0 -> 3342 bytes .../kbsim/buckling/press/GENERIC_R4.mp3 | Bin 0 -> 3342 bytes assets/samples/kbsim/buckling/press/SPACE.mp3 | Bin 0 -> 3342 bytes .../kbsim/buckling/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/buckling/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../kbsim/buckling/release/GENERIC.mp3 | Bin 0 -> 2924 bytes .../samples/kbsim/buckling/release/SPACE.mp3 | Bin 0 -> 2924 bytes .../samples/kbsim/cream/press/BACKSPACE.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/cream/press/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/cream/press/SPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/cream/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/cream/release/GENERIC.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/cream/release/SPACE.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/BACKSPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/holypanda/press/ENTER.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../kbsim/holypanda/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/holypanda/press/SPACE.mp3 | Bin 0 -> 5850 bytes .../kbsim/holypanda/release/BACKSPACE.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/holypanda/release/ENTER.mp3 | Bin 0 -> 1252 bytes .../kbsim/holypanda/release/GENERIC.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/holypanda/release/SPACE.mp3 | Bin 0 -> 1252 bytes .../kbsim/inkblack/press/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/inkblack/press/ENTER.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/inkblack/press/SPACE.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/release/BACKSPACE.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/inkblack/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../kbsim/inkblack/release/GENERIC.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/inkblack/release/SPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/inkred/press/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/inkred/press/ENTER.mp3 | Bin 0 -> 2924 bytes .../samples/kbsim/inkred/press/GENERIC_R0.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/inkred/press/GENERIC_R1.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/inkred/press/GENERIC_R2.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/inkred/press/GENERIC_R3.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/inkred/press/GENERIC_R4.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/inkred/press/SPACE.mp3 | Bin 0 -> 2506 bytes .../kbsim/inkred/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/inkred/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/inkred/release/GENERIC.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/inkred/release/SPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/manifest.json | 231 ++++++++++++++++++ .../samples/kbsim/mxblack/press/BACKSPACE.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/mxblack/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxblack/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../kbsim/mxblack/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../kbsim/mxblack/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../kbsim/mxblack/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../kbsim/mxblack/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/mxblack/press/SPACE.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxblack/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblack/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblack/release/GENERIC.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/mxblack/release/SPACE.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/mxblue/press/GENERIC_R0.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblue/press/GENERIC_R1.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblue/press/GENERIC_R2.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblue/press/GENERIC_R3.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblue/press/GENERIC_R4.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxblue/release/GENERIC.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/mxbrown/press/BACKSPACE.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/mxbrown/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxbrown/press/GENERIC_R0.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxbrown/press/GENERIC_R1.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxbrown/press/GENERIC_R2.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxbrown/press/GENERIC_R3.mp3 | Bin 0 -> 2506 bytes .../kbsim/mxbrown/press/GENERIC_R4.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/mxbrown/press/SPACE.mp3 | Bin 0 -> 1670 bytes .../kbsim/mxbrown/release/BACKSPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxbrown/release/ENTER.mp3 | Bin 0 -> 4596 bytes .../samples/kbsim/mxbrown/release/GENERIC.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/mxbrown/release/SPACE.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/topre/press/BACKSPACE.mp3 | Bin 0 -> 2924 bytes assets/samples/kbsim/topre/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/topre/press/GENERIC_R0.mp3 | Bin 0 -> 3342 bytes .../samples/kbsim/topre/press/GENERIC_R1.mp3 | Bin 0 -> 3342 bytes .../samples/kbsim/topre/press/GENERIC_R2.mp3 | Bin 0 -> 3342 bytes .../samples/kbsim/topre/press/GENERIC_R3.mp3 | Bin 0 -> 3342 bytes .../samples/kbsim/topre/press/GENERIC_R4.mp3 | Bin 0 -> 3342 bytes assets/samples/kbsim/topre/press/SPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/topre/release/BACKSPACE.mp3 | Bin 0 -> 2506 bytes assets/samples/kbsim/topre/release/ENTER.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/topre/release/GENERIC.mp3 | Bin 0 -> 2088 bytes assets/samples/kbsim/topre/release/SPACE.mp3 | Bin 0 -> 2088 bytes .../kbsim/turquoise/press/BACKSPACE.mp3 | Bin 0 -> 2088 bytes .../samples/kbsim/turquoise/press/ENTER.mp3 | Bin 0 -> 2506 bytes .../kbsim/turquoise/press/GENERIC_R0.mp3 | Bin 0 -> 2506 bytes .../kbsim/turquoise/press/GENERIC_R1.mp3 | Bin 0 -> 2506 bytes .../kbsim/turquoise/press/GENERIC_R2.mp3 | Bin 0 -> 2506 bytes .../kbsim/turquoise/press/GENERIC_R3.mp3 | Bin 0 -> 2506 bytes .../kbsim/turquoise/press/GENERIC_R4.mp3 | Bin 0 -> 2506 bytes .../samples/kbsim/turquoise/press/SPACE.mp3 | Bin 0 -> 2088 bytes .../kbsim/turquoise/release/BACKSPACE.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/turquoise/release/ENTER.mp3 | Bin 0 -> 1670 bytes .../kbsim/turquoise/release/GENERIC.mp3 | Bin 0 -> 1670 bytes .../samples/kbsim/turquoise/release/SPACE.mp3 | Bin 0 -> 1252 bytes backend/audio_export.py | 41 ++-- backend/key_sound_map.py | 83 +++++++ backend/models.py | 30 ++- frontend/src/App.svelte | 41 +++- frontend/src/lib/audio/engine.ts | 168 +++++++++++-- frontend/src/lib/audio/keySoundMap.ts | 83 +++++++ frontend/src/lib/keyboard.ts | 45 ++-- frontend/src/lib/project.ts | 33 ++- frontend/src/lib/store.svelte.ts | 11 +- frontend/src/lib/types.ts | 36 ++- scripts/fetch_kbsim_samples.sh | 81 ++++++ scripts/generate_samples.py | 83 ------- 168 files changed, 815 insertions(+), 181 deletions(-) delete mode 100644 assets/samples/cherry-mx-blue.wav delete mode 100644 assets/samples/cherry-mx-brown.wav delete mode 100644 assets/samples/cherry-mx-red.wav create mode 100644 assets/samples/kbsim/alpaca/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/alpaca/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/alpaca/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/alpaca/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/alpaca/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/alpaca/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/alpsblue/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/alpsblue/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/alpsblue/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/alpsblue/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/alpsblue/release/GENERIC_long.mp3 create mode 100644 assets/samples/kbsim/alpsblue/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/boxnavy/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/boxnavy/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/boxnavy/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/boxnavy/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/boxnavy/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/buckling/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/buckling/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/buckling/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/buckling/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/buckling/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/buckling/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/buckling/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/buckling/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/buckling/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/buckling/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/buckling/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/buckling/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/cream/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/cream/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/cream/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/cream/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/cream/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/cream/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/cream/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/cream/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/cream/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/cream/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/cream/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/cream/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/holypanda/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/holypanda/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/holypanda/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/holypanda/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/holypanda/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/inkblack/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/inkblack/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/inkblack/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/inkblack/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/inkblack/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/inkred/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/inkred/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/inkred/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/inkred/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/inkred/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/inkred/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/inkred/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/inkred/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/inkred/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/inkred/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/inkred/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/inkred/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/manifest.json create mode 100644 assets/samples/kbsim/mxblack/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/mxblack/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/mxblack/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/mxblack/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/mxblack/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/mxblack/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/mxblue/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/mxblue/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/mxblue/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/mxblue/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/mxblue/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/mxblue/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/mxbrown/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/mxbrown/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/mxbrown/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/mxbrown/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/mxbrown/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/topre/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/topre/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/topre/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/topre/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/topre/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/topre/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/topre/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/topre/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/topre/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/topre/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/topre/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/topre/release/SPACE.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/ENTER.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/GENERIC_R0.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/GENERIC_R1.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/GENERIC_R2.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/GENERIC_R3.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/GENERIC_R4.mp3 create mode 100644 assets/samples/kbsim/turquoise/press/SPACE.mp3 create mode 100644 assets/samples/kbsim/turquoise/release/BACKSPACE.mp3 create mode 100644 assets/samples/kbsim/turquoise/release/ENTER.mp3 create mode 100644 assets/samples/kbsim/turquoise/release/GENERIC.mp3 create mode 100644 assets/samples/kbsim/turquoise/release/SPACE.mp3 create mode 100644 backend/key_sound_map.py create mode 100644 frontend/src/lib/audio/keySoundMap.ts create mode 100755 scripts/fetch_kbsim_samples.sh delete mode 100644 scripts/generate_samples.py diff --git a/README.md b/README.md index 35acda5..550047c 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,14 @@ Annotate keyboard key presses on a video timeline and preview/export mechanical switch sounds mixed with the video audio. +Keyboard sounds are sourced from [kbsim](https://github.com/tplai/kbsim) (MIT license) — recorded press and release samples with per-key variation. + ## Requirements - [uv](https://docs.astral.sh/uv/) (Python package manager) - Node.js 18+ and npm - **ffmpeg** on your PATH (required by pydub for audio export) +- **git** (to fetch kbsim sample assets) ```bash # macOS @@ -21,6 +24,9 @@ uv sync # Frontend dependencies cd frontend && npm install + +# Download kbsim switch samples (~151 MP3 files) +./scripts/fetch_kbsim_samples.sh ``` ## Development @@ -50,8 +56,10 @@ Open http://127.0.0.1:8000 1. **Open Video** — load an MP4 file 2. Press keys while the playhead is at the desired time to add markers (works while playing or paused) + - Press sound plays on keydown; release sound plays on keyup + - Each physical key maps to a stable press variant (same key always sounds the same) 3. Select markers to override keys, nudge with arrow keys, or multi-select with marquee drag -4. Choose a mechanical switch sound from the dropdown +4. Choose a mechanical switch sound from the dropdown (13 kbsim profiles) 5. **Save Project** / **Open Project** — JSON with version, markers, and switch setting (no video path) 6. **Export Audio** — download a WAV file of keyboard sounds only, full video length @@ -69,19 +77,31 @@ Open http://127.0.0.1:8000 ```json { - "version": 1, - "switch": "cherry-mx-blue", + "version": 2, + "switch": "mxbrown", "markers": [ - { "id": "m1", "time": 1.234, "key": "a" } + { "id": "m1", "time": 1.234, "key": "a", "code": "KeyA", "releaseTime": 1.312 } ] } ``` +- `time` — press timestamp (seconds) +- `releaseTime` — keyup timestamp; omitted in v1 projects default to press + 80ms at playback/export +- `code` — `event.code` for stable per-key sound mapping (e.g. `KeyA`, `Digit1`) + +v1 projects with `cherry-mx-blue` / `cherry-mx-red` / `cherry-mx-brown` switches are migrated automatically. + Re-open the video manually after loading a project file. ## Switch samples -Bundled samples are short synthetic click sounds representing Cherry MX Blue (clicky), Red (linear), and Brown (tactile) switches. +Samples live in `assets/samples/kbsim/` and are fetched via `scripts/fetch_kbsim_samples.sh`. Available profiles: + +NovelKeys Creams, Holy Pandas, Alpacas, Turquoise Tealios, Gateron Black Inks, Gateron Red Inks, Cherry MX Blacks, Cherry MX Browns, Cherry MX Blues, Kailh Box Navies, Buckling Spring, SKCM Blue Alps, Topre. + +## Attribution + +Keyboard sound samples from [tplai/kbsim](https://github.com/tplai/kbsim) by Thomas Lai (MIT license). ## Known limitations diff --git a/assets/samples/cherry-mx-blue.wav b/assets/samples/cherry-mx-blue.wav deleted file mode 100644 index 39f0e8af31fde3e8793a9734dc1f3b8ce7fcb568..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8684 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 cqJ6eFK2cWQ%<+s>d__ftFT0F8}}l literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/press/ENTER.mp3 b/assets/samples/kbsim/alpaca/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc65e0673aeb220cff4eff651f951956e86d9841 GIT binary patch literal 2506 zcmeH|c{JOJ7RP@`R4f${ON1v4QZ%-)$1-XUH6ldYC@o`OYF~nmsI9!A*0jl^m_boW zZKWf2t)!&2bg?|tJfoN@L0goJzH{dN@m~LZf4%oP=bn4cy?@+$?)RR1c?bDJz`ujP z>K}d_6F)XE06^G)?tkL{73g1K^egbb!f`F!xwB3-x|%xL+I(YwwgjgtgK?GsK>gAO z&ROjJpNan!&-SSv4?@u1UR9i z$37Kh4-*xa*7EA%=~XK-H<*dL@4Fm`Wx9sUBmbZUUEQSlb@^&ckb{;NGwI`r{yq!n zOYyWfM<`>-ti?r?&<~!ARFv#~|K>q7%dc%l9(l&5X0pBm6iu--!=e<3nHtIzZ<9+b{MI^eN*lA^VA?ubw!2q+F`rlppELMPE5&LYXj+Fy^^p3x5Yk|sf-kP`crLwkG$x% z6Tj02cBWt|Ub+sG*FcdFN#7D_vy+u*rz|IK1;}LGOHoK8lnRlX1Q{|4woNzVxd~DY zJo6r29P@nSa%do>acyT#Fh*dic?dUVm|OqhlS@gGU+e{IOBhs1DTqogwB49vOU#P$ z4hn~a0a;^Dm%UPezo01~zPS$|@sOuXX<+aghmE{0d;NA^eS@Oy?Hbiig1)J*8=oz$ zwS+Pf#>0)zUd5Bhu1OcUI&ZmbMMH}3D`wuuycAcN5BpK=S+*XITJFSC<6IYz0 zkuh|b@5I8un5J>EJIym1=g~TC>L_=@ld}`jzS-o?Nj{*j?=n{&y}B*tPgXX;qc(g(-w8~XO+6;X4=`6eE;M(QEP632^tVPGm* zE5bYIc@-1P^~gAMO~Pte-^ghQCEaG1$KjUF+Pt)o3sDQXNO*CBAL<67(*9BXMIi+M zFKl3JZjNPUplZ`qPiX??N^YEJ<<&2k1hg?G!E6XTZ~9G$T*4 zcz_SIZ1udPZ#kjZxu{UP+fT<_xzRd37bC)j@2)>-#M&-PNsQy1E3wFdsW{_9*U<=X zxsKEK9ZTChz%q?iN7rIEFgEudIX-M}xr}spqqf^xRg+_v{5J+-7&DbqO*lJHnl98m zzmU790p0e?KJO+0ftAgfDg`!cSC*ed*Vph>3t*Qf?*0NrfO;Fpv)Kq=_Z`7;V9{7R zY~{NNL|OvZ=wx;V>eQkt zeQAWk<(MF_)>$0Qe9iFR{ilcV?iIs>U^qO=mKud&PrVl#Q8qvQYfy@!GyW>~13Mu! zI*op}q%dzdhEl@{`h2gsw`ir3ZEi=YrTCzIASOQ!Swd|IMLHE!hxB58=}RpR!f+5C zU8%mBYek^fdN&mOm5}R}5sWw|0k0^XyXGop$B@j#KYf5Y_^HS9v6$l*g;W43m!faq zd7oOFZSyy)!JuN##(s0d(7eC6e)*@88ECmniF;sn8u6VIX&HN&BU!8->}23w5;sUv z+S5R^W|66{@t(UJ+Rzq0QzEUUO&qY2sY7jX=CE8D-@$BLoLd?)e0?-sGJ zq^E`=d-mxVtw*7IPUV3%+DA>nvGO)O-&i>(mVilAKzPiYzqHY2%@yIB2p{yiRq&YV zR}kdnG^i!nG2c7>`sW>^GTOOYb-}t5EwGO=wHg8htaSFzsh9FS6!7?Qjq4k;(;*jw z9*XB(aEqE=oeVy21zS^;Z{F5alp;*22VkDMS{yWnCm%oWXXIZ7Xo_DH!lg~tRf=G> zqelQh@AzPVM&I*xZmXYc6t4}IRnR2*fifSkXp%(ugQvWe&-!`FLeO=wD-}>5(!U-% K>Hqwi)+$bQ}C?Iz+Tw(>W_yojfML_cK&Fj3GH{)OL&wgfhc4qgF-P!N%taK}* z7x-VC!h<7rWBYdv3;+s-0Pzd(zC_oTkba5XS_Bt+SF+_{a|{MF_*Y9Xo}LVs1OU9x zedx+why0cJyLjop1=`ogwZDS}kWmLlxMLv-*qgb+PvX11N^60`TVo7X)(*$% zQ(M*nA9aa5wRHh#F|$+oHZOL>h^$;4>nL&d!afHgi*B zlb)fFsecknW0Z*^dd?{UEiONn5-mCzrh(l=m=JuSMV0EPT8OfgPYgku3%Jw@?p)pT=!AFjvO z>eHY+TAq0C5f&vY*O(0Exo($f1eSQXlpJ!P2gol>UwP%5KBg~H^dz=~BlYS%wws2G zek@obOm_>O*o^h$$ywSST)s9{pQKKo@X3qr50^m| zs6~giC0D2QaWp##!ZR$tSt1|$-7-q&^x?-@=c!Xwp55nV&CSeeqF8FtHe&p6PE7mn zF>KrEviOtC?m{~0s-L@ESI5IH@$K~V6-HFYsc$Ed8`AYimi8OLvBtMoH|zU`pp7?2 zif8P32D{fR9@R;KvwQHO_q-<#wZgnM(-&?%-HJk|;o9fuuA*D{YLP)$5A0@dso8^MdkcAA1-(KMij1U#suyc+<5H5I9?(bRPmZ)8b)Ya6;kKH znF;XPMbn;ux{&utSK0&W2>5JVM);|7ds`Z^?iBe;bDS|jh&l@v^(Ed3Mlg;vUAHx5 zkZPIc72=Aq)vcWPxpE1O!7JxF-m#ENA-_2oGYFLh=N2kacS<%m5S1c(IatUP-ivZ1 zNY+SvH2Uz@Ca}GRf-?DV&g5@ze)@GLI8|@F$;3xB`x>n}RI1zLV0qS=@xGH%b?+E(6GDzdIk?IBFK!( zgu!9RjslF5y+6;8nKV5_(45%ot^8PCR1qvlw7XCD zXO>#9oZVbqsxoU)Au)CEq>1&x)5n5*XS&GP#!3=Qk{6{vx8*Ppu6Tv5 zdn*eYCOD17ck$|Ia4rQe@ggT(+6Q95CG6s7#?9Bx8yb$Y@4VI>Uw>p}XT7Li`LI9i dC6^uTovm>|agRe>wbxm_tPlTvsiOane*rNGUCsai literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/press/GENERIC_R1.mp3 b/assets/samples/kbsim/alpaca/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..057f144ea91a039dde0d261c19f46245cddec2f1 GIT binary patch literal 2088 zcmd^=Yc$l08pi+Qwnc6u*AiiJOUSTIj!ZM@7}uF$)VLHCGHr>CA$=d67`oVEIRKAqoM?|RpI-w*Gzp6A00Ze>4wgqP%*`P$|B|$iqAx~90RZKz zj%6q=^RLDKO9%fIko=w~yLvdFT+M^6Sk*w>P0^5*x2Y#j@g_l`2`Dt`+{**O>COqs z!Kua@li*T#IJs>MD|jub?B+KPj*t2J{(edai<6H^*~C4<{@ZXdY#cs-Ug(5PQ>Rmr zF4CR@5^@>v`u-zQNb2R%*-A%vfVc?M@xq_gITneMRIv)|xxCa6LM%dQ%GIX$=g$i% zsq)Fch_(?Zl7LYoC|`}u6p;It5sc(e0 z46RHiJxrws<1HZ=AKv@XtCSMyOvw)qsi9{`0Nt@d9HJ#vKrp{$^JG|O@2;5=` z)F>L^1oQ?Mkd>{zq}MC5FM0MNZYfuuAvMfWM{ff2JqPK)89#u0H05+^_PI z$efq^+bW#n05f~Qb@wsEz2az5Jdz4^yxT35mhL8}-(7(Q4fU)yv+0shro(whZpmiK zp_zvF%&kQ*x}bcmkkhD#%O@j7S~0j%X7t5Et5FeA4IeW+P)GthMhZ z0SKZyIZ<9lF{Rw-ayv3P@7fT}+V%&;m0Y5o;!Tq3i;`IaHj1aCTQ*2Aj6A7yj#v_D^8V14e)S`&wG5@Rd?sO%emPN zMNiQdAHIF_Ox#O( zSBvkU-k-VA#kdNSxTjAh?yLA3b7n@CukNLekzvbr#C}F}E;ZZL0SumZTHBaziJv~i zcS-fVa1hZ_S>9Q2jceU}c+*W z^i|Le-$lP*>U!9${HAB%@BT9Vl`qVw+XHf(TmNR>x*@T2gDMdfs^tAOAuWpXG!?OE z{<=@yrj&Cpe@VqMn#np>Gotiv*I!FhBO|oTlr$3}!YjlsTx|4Y#M0#UlwS~otqvQd zG3KvVILw^$12dMqv-bIvd)+B`M{{O#$)UjmgA?r8>K{*>uoew&zg_Q^O~CpHg#08c zA+(H>mTs&Ah<8N?bm;7bQih-mL%_*j;KC%GDFtS^S4(zuKR zu+xv&*Y?RMJ7neCXUA8idw^mWM)vx7l^Ye+yqTv2b9_u*C)Ya`O?bqF>CgK-kstEsioP_@s Fe*!$_azg+B literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/press/GENERIC_R2.mp3 b/assets/samples/kbsim/alpaca/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e51670b7ffbd6bf575d5011aad3f61d8daa14a84 GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/press/GENERIC_R4.mp3 b/assets/samples/kbsim/alpaca/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..619e6f903162590c6ef9b4e863ca515aab7d201e GIT binary patch literal 2088 zcmd^=Sy0ny62Si6hROf#VCQ*KsXZQ za#lbhpcsr%V9`M%cOcx5fdLOdx#SvfMkCP-PSxzgR{6M3`>X2us=6P#yMER6Nw@Ob zf&a$+ROIRH+>Ypp`taQX(+Z^8c-(r>Zd%hv1QVZ6mY3>ppU`+Focs)5WoX8@pn zog@2Y;lsZR|1YofFF~s7QpDL}D%jE3a0J8M-W^m@09K(n6kGvinQ2)@3&!Z39yQ(8 zP1&VISvs_7D4u2y;bNF6qvHNx!Gx&Fd|DSk$hH!m9_+f;%&CC}7Ry_Azf7u(J$L|l zDh?*6xI!IqnOOd9w!1WSqkLPECr^A4`&_04?jG7^mjA0$mv-H%*4+ z>z&QzOf4*ws-9K^kVh28C)>OwC7a61or+y5UZ@;6Dy(wFO^5MV25g0HrdGCHo&l0z zkb?n7@SNc=BR&yPs3Nly3WO=)JWcKxUqHk~-QhLoB-{FH%aS))8Wf+p&>L^3ew;Ep z4VULV_dZfRN$(iz*#CL>QetPuhmX>=i!r$p8`ORA=!>a(Kg!d!3tz&YtzP`aQEB6k zfM703Lxieo_fL@~$L0IR_rUa2&<`~IoDTp7SDItj$^GXvV!z{7wvx?YjWg2l0nnXn>Y?eROh>mR=(GCt`quGd3?9v%V1GpbE()`N~^Xu}5Q02Cnep z{2}aPk?<7D(OvfbeNu9CL93{$^7d`=QfXA}4-FcU^x@%0qK2O5!?k;7MDCSCZ$|u% z6Z??w@6B}4N9ngNE&sG9{YiJJyv^Pk_^FsjnCR9DU{zTu2;)~v@wMU-`D2E{Ib->R zQtbhha)b4!J>QFpk;!_ z9Gc#r=iC&$d=}LxE{+vNAP1%#iOW%@^bFhs z#S`aU1b0E!ssLzD{IY6=EC>x$pc8-uICxJWl8=%aUvE-Fl5=^PhP*mke2WRp8L`lf z%a#GdVe>`~)UpNr3{SF~y^I0vF!-Z|tNZL}3sMr^$wCfWy8yCGa3T_N+3qghZo~T+ zUX8oSetS;^o|(8D?h&nkv%*sA4X^I!)h-+40Mq`3^|*-I-{J@JJZCg_WyjKJ>0b?b zQg?SeSC4FXl?_F<^Y?7>^NaWdC)T6n?$@isnspsxZ?z9tjEFrW) z1J;2R)|GUJ{3GvpPMKXbuB_ZPp^Z^_)K2SP=th5IJ|46#i%@hb1VT9A{CRs-`7CSt zF+IL%CYOzb;nUB;SK2u$5lo{6b*QXMjnTlSa+xPn_OaaK;HzWq{quwsC$gskpclP; z*_bJCiIbQ`qh90Vd&i%2D(i3}y;Yui{Y>Pa^tpoQfZV9CdGtHlOC7o&>7RqZpM)e* zU{?)4g$#x(!5wg(bb`B$k!eREsCsuy?XOm>1QVE;M8p_jP)jvRl>COThAaTxJ9XNO zw~U@cW)aC*nu~pI;mUd!c_y1ncxl$_@vs+!(zGEI^RQp0wE#T%dMcl<4yF2Lo>Vx} zx^cURah}rT`pw5O3^^-!*HV;bcdR<{dwwsxKr44$x+no8 zisEPCt&QykfS#~O=0uW{c7JmL!l1~NXIT1UC3B-fonDt1=I9@!LK_?hU7M}*dLha! z4-zb<@;vPJr@mo(zj9V(-JG=_3t&b>2L3_%bjBooEGTZT`jCx2p=r}*%Rfe-!x9$g zKQt0f3)16Ad{c-4OR&>AIc1{!_`n4N)(vx9!)D9*@+|@T#Py?shU~|u>HqmQ@BZ)j E6GJy^SpWb4 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/press/SPACE.mp3 b/assets/samples/kbsim/alpaca/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5351e127a17dd5b9a95bdae6602a9fa749897542 GIT binary patch literal 2506 zcmeH}`#aNrAICqNp^b7rM3cirL@J{wX80B(6S0)cVGd29;`=qeHqi)4?lC%{$nrJ$ zVrt|N%NXiwIYd}FRCmd&95S+-uIqdMaNqq0_x-r8*Y&=x=kt2MU$5)+{N*iK$>9M1 ziOadrsC7+Yy`%vE$^-WOH=#eF@F(>A1j$cW?`7lW;O@N7e2;|%sQ2%YR4E7u84UoG zjXBakkKFs)_+L3CKLS!wB5U?@DN?`vX(F+hlLAoS?D$PoNNa($QA?(vJz4jNvVuuv z$Y2y1G|_AuXsk%-hh7TLql5z}S%9Ge366grL6<7YtriFrx3`dg-v~f-SSV;o`o6Nl z&(U!zmsmHg?L2aAa(t<2Nths!lnF(y$7t*Jl1P}Av7puTU35h0$JMW{UICIH?tFQZ zaP48j`Xj4}_Ss}v5X6gm7=2z^*8%n-ZJ=hruPt0y6_=I6=sEMWcS~{p9jvReC#2X> zRxc)FmvTv~6bi*P9!bJ(a~PD;oRTlTW~HLMYHov7?oiVdnmMN~Zm(FR%LWD{T5?Sx zk)2q07^n-fXp33hvzCKM?qnae#z}|;JZEJMBsfrR$4B-kz5lS|XJK@o+#}-{R))m^ z?q0>mn9i3>T*B>-g|pc{9T%>IOty>BS2p?Bg^-@FZHudmSc|RMZ=ku*XzePhSm+tK zeDgioJK0S#{MF9Dof-OJTOVjef}aC*6ev#sHH)SwZx>&x)hN zeOS;nIS~%_Nn~jv5V^o$a{=GnQ(_SS$Xtfu?>U7T)I;c@!aeExwPYgqBv#5f;N@32 zYVKHA5mesB;*_T`imITVW?8z6FV)YfOa@R&5Qox#$a>7BIEBa@1mHo=lNEWztn|rC z-GTD9(ne2B29Ae3uI$>1%LnDamjNp;bb7Y&;3VQic_63C_z!v4K>lzC-tcA``GAo$I4`t5*f7faKK;gY z1NB)OWCR5O;Ng-9JT)&_c8dwL?)HcNyEA#+ST$e2>ho!PcV+hU324AZLaKm9JbmX? zixFO!WjK-cw$Jm4S7FG!^ zrPuF5T@D!gLQ~ZzlC<2?pADIhg6j<;&NmAYURSIpj*QU>B~WmRK6X$E9TGrYK63~D zs*YOU_e(8CI_OQ~YonW$lgb|de8X!;m!=1KB6|(eyu`~fUYGZ9V9}w&`4_*eY+Gu9 zb;`^HV`f|my4GIWiS27A13C=9CVt7SEmWVP-jsxOk+<^qzZb`F?x-|+ufEfFfC1K6 z04QI?=Tipj&{zz~pOyrHg@Lz~WEguZ&!}fTiToX3(CHn)do<0ISFJ97maEpK%RNRr z$|eF%R-nzBP0ejxJcAuBw?0*QdsM?B^{!&s-Xql$v&hg7{L!h6gmzQ5FP9m_-U7f6 z?uWHl%mMRB1hZb9p~OSd4=vN2k-kCE-9!2}V)5^A;%`%ic{A;6V~*$RAo ziq1DX215oGXbz8nwARaA?|g{vG~s+qtJbe9SCE>Eu{J00o6W60U;J2Q@+#{1;~tq$ z&Nt+!W5nO=V?k`H>FZ|E*^IvV>-u8!*#!5X*9lr@K8lyh0{K-B4_S`htsRS?ntonM z6vmI+El6$tt33Qc2h-hZl6$|k1-jsNyGH>qj>51Wr!K0a&U>V2>>i9 z007a0LpM=#XgjVkmQPhVW(SQPP2Y3Ye8&}jNrF0S>~vE?K)46)c*RgdkcVDRgJku@ z0=bvyPtHUqiifN4gUv7Uc<&on%y5q)-vA_&c+zi>Rk^(QC-m$4K4#RqYIl|B!)D@} gNDJ%Ar3QIbwQp@OTZuqChxK&*_h+Hv|7>jFUzIO?H2?qr literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/release/BACKSPACE.mp3 b/assets/samples/kbsim/alpaca/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..969e3f38af10be44d4f498814f021d1a4009db64 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(OzX%ZY)Z0pyO9Wsi(t5+jBF4~`)I)I^mplNqEhT0O5eZD15(5Sd)K;E=(NoVk1F z2sm*mI5bRPV^;Hf_wJFBvfRlD3Jy(zvL^(3zLyvFRT`D2oDk^f=y0^&fA8I6+j%}S zt^Y3m_syY^McLZXsG5aCpy&VH$!dPT9a}gA`UT&8-y*#GLn4!4d3pVj`2TnB{TFax zIRAsmz`(|){=fS|Q9(^kVBj|}G&L}+{GjrX`IM`(-R43aw#=ZknF<0%Qx~zU5fYUP zzPj$f=?5X*UJUJXoIOq-6L>1g-S}})&&pcvc720JfyhNO{?725EEwa^<9H|a^i+oR zn=fZiFt<7{+qu% zj%=DYf7{EqhbNtueC`=!%5!I`bHG`VvRKKbYqKNk_J6%s|N4LJ-*3lc{{I8&0E53- zF}~NdxKjie82WiaSlrmS#n`x8v?gunVpwZx;Ca2U=l}0XNB9`T7cN$}-QK|DXY{h@oE}1;)kzaD6Rq0GydGmpo+x=G#={np=nP0$f zp;omtsPd(%4#(LK4~>6*JMrGjsy5%_@H_FgS3JM3{m!v=oA~vsob(%u)&C1_AJ;qc zv*e`J=dJDa5ryYI-+QO^s=~KO>t6W1jmml3k53OwKEJDcgKqYF^JDgVw@%~UHS6Bg z>&xCp>|TE__w}l%dEU_>cXo)?Y)dm%nB<|^*O1PCvBp#3h~p8iRuk5Mz0uv%HA7DG zJ#j1&VRV-l=TMl!#hRdH@#gV{M->{SJXYr?JPz92cWn7mpIf{v^92?!-Cz{yA3Hx+ zEPZCYvc6Sm%(Kt)w{11DE~`Fx?C7n>3!id3Tv}~&Azdl5XOBytchIlj5A!_je!aK! zzUQze_;uFlbMNO}`9F2LQ5Wm1&N35~pxl*bw}%xL87HmeydxjVSskphWnEJ3%3UR@ z)l>O8Sr3GK_|s#%EapzBk5O#J^fb?u^%>U=)lTm}|EAPyH*-nrz2EV#4hgT1>Me@# zsSPUHa)9#>+J`Se~5|u)vezP)l^uNA3<)Govp)Xw*6o|zRet*S^<3ptdo$^za^9JZ7oRq~k}P_5O;Xakc3H0l z&xXD^n{GZi=*-O4ue0fj(YHGTicB2UOx+Lw02C7?WdHyG literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpaca/release/ENTER.mp3 b/assets/samples/kbsim/alpaca/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..08d112d86199044760197873785b4e1aeb5bd4d9 GIT binary patch literal 2088 zcmd^=doTC(ARkQHKbo-`<4~O-t`#qpeca>>-`c*6~f9?kO2Vt zoMYsPsos~x|4WztTadCCr>MFH>_`w8uA4(UfJ16CrIc+sO2DF;Oz^=UhK~F&L>6+d z#=(qSY#%4XbnN6H3NneXU%zCcGrgxnVB|u~7~cb+VbD3P-mUT%`IVG%WuQ<+Zo;3t zI?X@>fSt}xSZOvEjYcy3t$PzC`-^LDpKOg^O;bW%IK4l5!VN!eq&*mUXC+L`vX!=NNvD^0 zNf$jZd3U;BNoFb*8#ZX>kr%6O&owT!L=P>!rNPK3IKaq{y8^wJgG}x6!qf&7WAM_= z+zxr5z%awQ@cSRb6LsqDYktaPZ~uQqcCZh< z{WFj=vcidpbdSXf4&Wk>bMgBvT^LCT zC;R#SCK@{5jm&G|24u`cbIF6waL-}H*#p)bOS&&9_W5}f&o(qC?K^ZhssG7PWbC=P zV2K-+L(;Ujm_I!9Y&^~BQH^z-kEpWX^-m=&O|M3y;LSsaBFq{+H}~DObG^K$EV`!H zR?7VbVFv(L0o5n=3J52|Uz0pL3=vh5v_r*&rB8IknD#}EXVs{2<#G(;h0?txpK7OW zqtAvg5Zb&<-?-JJ{iT^Cw%`WOHd|DXxOak^Eb6aMY}QTFXU<%DK9TOmQR-?2Jq~6* zuKz^N3m?kfM>jI=`imYHeo&>SPHwkB3c`lTf)tMXPs%sLRqS2)8lWEu^swMI^{SOM z^?C~$DK}HGOkOq7Qfgv0MiqnBl|5VmTN)(pE}4AqozfEHbA2IYZO)8(z&GM@r`XrJ z8y9fJjCw7EFY~?EeDrEEPn*#1=zv5hlJ)WpN;(HAV-P!7dqJi)JQM%)G%HeX+4UEwegN&@yhEWBBwu{$=l;Z#pVJ_R zDGOcJzlAnBUFdy!Hp!|$);5$-OcuWPmfu~Kt1)RtsD1p&;wH0H&!9--H-gYWje$It zs^=NwmU-Y#_zb!(BPX!Q&9pBy>MhwS4RVi3gAV|*FuqpxoK}V-;-(%6jgkp`=-wcz z8$jHD`eM0;6P@C6Dr@P!X2=JO57(tr1H(yeU}eI-{iS^nbJ?d3>7nE@s;T(dkUq2r zY|-4=YTC{uFwT{8O$RH&9BB#X`9JdTo!F5Rcg2)qJ#c-0*$1Xua9u*ys-zK%ikgLm!`ikAl_TfsF1yz+tW@vmKUY-U#^Id_J;L-U`6>P9rtl{8c8Fe yX!r5cnn#$8!UXnhOaHdUzNy#7=2V(^S~J0%(%_Y2ln(yf#`2*4=Vwy?r~D1R za}x#z!3>R*Y5Ezm?ayyAHMNN`HC%K(`d0AZf(niK|DJa5f2X0Lp&9g@b>8UEP-w%a-=X>`@)k~@9`5xwiKUG{@l0lt8@BUc7==_`ao@0_mQr`Ol zy~+m+f-EI=im%pAJhhC?#nVRUhGD~usW)BH ztu}9$-Tt%fK)BNNPtRXh{x?6Lll}DHWasstcM9(8^(ptAR&)3C?Iy|D3+0Yo-pX?! zIlgpz-|qX@OaK4>acq9|MhPvci3cV|*Zis6Q!jP1{C_<#seKVV{!gYnapkVvQzGVV z_U7x0VwL}|qt4pTS^vk2#b<&714HDD*OD2JbUN9D84mkx)X?N$Vhr=*HD=kXGs%31 zalw((`Ff=>>}xM3wa(KmTD575ZkTDoA(4}QJQw+#%4Z0){Qo`ah%$rp!gl$&dlQu-qo2Q#-5%U z&2pK`VlL&MUaS`?+gaKbb!E%+cU}u$ai3pvMDD-u0h4VRhQGe-J~r(SbJ9QA-K#~e zlvR6cO*yqh@Z{_H!S55x-l~be+^{`*|M{)eR?(ZURet~Y-k#@m=-lb4y{E7L*F9}M zw`ZnU>j2Wju?FZ~ct!Kds=-aA!i5+7h{&uByLx?)x@*QNF0kw;4~) z>Q8x6<+bul&mYTflV5c~YGo$7qi3-7@@`#PAItZ9$wozu8@;?odlz4L@9xObnA^YPz* zm7Tx8itiFs-y47J?C<$Y*Th_6^52%zAmnFNY1HY-;WzcrQUS4R+y|Nxc4!_5IPBmw z;m~vmCZmr58%jk=9!@*-bN7b2(j?;#-}v6-$xYB+_LghSk?E&gqty9awlGC;3e3tY zF_-GhJLF>@EyAwe?s-iswM{~Mg$CaTnRUzbmuT@XsaBa|%IrODp~WXx|7l`dPCdPy zs-`{1e)sm&i(jV94q4xt)U53yKmSQ~*HSmrr_1%%EM3=mBg}Z}oU#w^vrd`4b=iAO zW_c{fl!L$0^6WMpyD!_eeA{BLZe4@h7kBKuxjsqgb=_8h=rS*H1&hOn8Dx~!b*9C+ zXO)=>mWzkj@*4|1*z`ip;i>iI3um^7OjKB{%%E~&Qkkl|j)>aIP93I2;jt?}Jo5C< zQkg2_6*2XJ(bJ8q&-_$+u+aF{3eJ!fT#Uw=0V_Z;WY~OhX}tUziQ*0h1`}X$&vGOA zulHkTE;Shuo?okcj%#qts7cj-Y4|l{#?=fCj_I%DJY*0-$-@w42aod$4C{<%_dHD+_ zB?X3-3%g_Q+;`D`P?-1s1>18$;V-Xu?_Q+-e~}U}{+wLC00T=S{-Xfz`PO%x*NgvO zf4XaHP}P~UI`tY{XJ4!pU1M@? ziFm>+?=qt!@2a=fBpaQ|M@#R{&?M47w#{;-h29)Q`MjM-ZwlvfBrxF_V043 zzjmMdU%BV!yxn{3XCMFGU;g|5u?IURY4fTsS*alLf9?bsu`0%D9R~)rfOE%AHhHhP zlDRF3<+hDd z!ZzuEK&8uCu0Z&pyTX6e*^v;UGyd~1S3mKy#2 z_u=E8FH7V1-#`1W&Q`(lw#br=Z+A@Tm;2Euv|jDr_paLKCw=41KRn#OSI(tveah({ zPa7BxhlMgQ2(7U$O%UjO5SDIug-0jWw}q31f6dFqyElri%sNv0^qecN>rIiJm--%k z)l0wE#Xiksi)op%o==h5!APIbO&dj@v<6LQU3W_0bjw4QS&>0CzQu1+B_BrIdHF@D zsN9$PthP*ds9~^cN1DS6-h~sUL}{JBxnyTg=9LUqp^ILQKB_6DT&x>EWmb4hmGLg{ z@K_WUs1(y>^C-e=)zeA3wVw>{dzV?xpDi3cx!!MDl4phn%ORD*KGhx1_5bJUzLas8 z5S8cEt|=HP9`!f))tsH(nu(YGau!s5C=*}8aA?+_+_}3`o@Cs%Qb}ZXa{JJD@N(I{ z?P<3QK`|uDAiQ(3^BR?l(MPu=M^4`yz{teu$hNz^c}a$K4r}lG`8PXn|H@rx^596j zlrV?=)hT}2x2Np;d-l9fp||$8nW4`b92*X>FDc%V^7=#dW#Zzs-#<@3dn!^6A95yGIk z#&Y+@V=pIItZ2S7O~8!RSW%a8%MUB%jKe7#)*Ny-*;W#j6x=c^fMuPQ3R}mgty)Lk zn4ENRv06DH;^IZAFFXw&PPj3=Tn0-j)iOK2dG5DetwERhH69FWz20RQSo%&G4LApL*O4rKZyruip93Sroc% zNAKIO@4QOfJD%PL#}i^+N0C$pusP%Y<$) zYCC9kwQRXnO4??LXW61Izpp*6|GG-0ye&9@L1fz9+Y`&1M8#sgU7uD2l*wg!_MDsl z>B`DAiF2JN+`e(S(JNBo>BO^NJhe;$-YlP_4T>S@<_nV3wckh-dN44U07H&tlEK6k zTV+!`4h7x08s2+BO8s^+;}Y$JMP+S!)p%GOTMgHT_Ih7W{r}kP_?xV?-b*hmTe`Aj jYW4Q>|9fv-*&4U9>hR;N{cl%wnrOl6l~tpF%n$$o1p1@4 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/BACKSPACE.mp3 b/assets/samples/kbsim/alpsblue/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9ab2a34af3dfb3b1145b76cb87aab18f997f7448 GIT binary patch literal 3342 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 XH0f$eb#3N6JN4fqHtGNT_Y3?3PE03J literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/ENTER.mp3 b/assets/samples/kbsim/alpsblue/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8432b62241cc2ee78fecb5adf6a05f3b40572309 GIT binary patch literal 4478 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 H{U7Jw(xn3w literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/GENERIC_R0.mp3 b/assets/samples/kbsim/alpsblue/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2d4ad90071ccf9fcc78403d1981fc599e65d0296 GIT binary patch literal 2088 zcmd^=YcLxK7lxBom8GjJs$%QXxRrJzac$O$P?AVm5ronfZIo=$N>G>9wMyceh6Yu{ zHNlcyX@?+KKGwA;Dz?;W)Ll`lt5&w%ncW}XOn-jAzGvplnR(BT^Ul0y=14wdbprky zbg+NOM@`{lNdW*d1^~ooi2EFEpF{FFKJGe;wZ)x-oiTwxfCK+nQjP;3@I?Xuai4q~ zb*C}@8T`L=$=?Afa$?P><^YgaeYM0a4p@_b032dlAJtKj$@w`xo=#u6=@Z#ENc8khD6?G8|6L_+qAqqm5EI_pwcaPEYFsv25lYt>%fL;w?1w~_8;(Y~guu=> zbtNCpOul{Ct_}LMd^S&6egHcX>Pcl-{XpP98j;s}w>j@Mq_ITm*Mrhf(6ycDQ!|&JE_-!v3PPL5;RPi;8=In2;>*OxZrs_T zv7y_sxWcqi%GLx|q)&ee1k+f-bzhW=Asj#H zjFEg`bbb||yBKI!mEsA@GguQDq!FV#v)!iarh z5ViC?eHO%yIsR*q*Cl_7T3VCbKID%(3Zub;;TC=QW5LTClJ4yf)9R(AX>%5WvBum; z5kF*e-)+cavVd=MPPi9Q!*7mk9C#+4Ce2JxerBv*YROrS5mJPbmy*cZh@y-?b|;?U zvG-(CWviUmU%vpTx^Rxr_bw~LIf3EWuza=tWRUc`Duiiv2IMALPYX!Uuy~{?qiE@4 zi7-Zmvpe)Vo99@6rMl5hZfEj0rbHb({KZUp3-xpT+Vxn)L&st-Lo z!m=&NPEO*^Pnhw}?d+M&o;`zN*S8i&anRmtfkpWwkTWCy)&pub zUMmMbvDM-k`_s_goD5ggBeE|(B`|?#Pbm?avy2zNzPM!fumfmS9}}kT_`IX?jCdZtI_y02xp7Mn`^IW^`$Kw^N?hf1T4ln(RcYRNZa2XpSiX(ov(r3=MCE5A{gS& zXYQuli$~S0@h{4GyI@?|#fdCex5s3w7fVU3nNB~TzRFjjc^DD=Yhi|~<#Q9}f5O~p zoVy$)UYTYT7O#?`p_MYJSPZa3Qb%OG^lx}3Qpu?YY!i+opnpze``PKs)w>?%vXDy{xTSCTcLM+%>#gfR4ry|MUX zQX8}blf#rUXdTEo;3W8k>=WhS5`a$E&Y9MU(lyfwg6TjbXXNkCx4mmI>8|RE7U!An z+KWhL@QKXw!j*L#*t>$^Gx}g>p<#q1i54$3AcI3pi)Nz_kMR0?DchsL)aL1R&w-5~ z{B&TY=l69lry{U1Z-NC6_n(Yj9}mBBsum0Y0PWim?5o7%w7|kL&wA4Mt8eFZw9>x- z*q+utmc=MKSbU*LJn8TuKvr|9;yUvFX|_X-QVLQEOvx;`7;K~{o0<`S0YqbeN=P>j zWKyb&^-b?^?^&5PjPVZETPvz-i{QyU4%*?27-7;aefthLBN3wn^mwAx zI84li63VT#S-an6Xm#e1?r*#J#QbK32rK#K!IinRAHb)*n|{g4D_w9YDd30I-MuhA zXzjp9hoKp$!|Q`J?ehEl3b&^*v(;|Y+vc`J@kwU&=p&fAcv$Y?)p`Y~+0<=4{ZnF1wsX!S)EAFEh(dX*;^cCfe$_^1 zvZs@Jja*3Hri0K}-w~{9>#jcc(UYwN<#E8nO}=Ik>g>#>NlxHt64v>GnV7FN64U AKmY&$ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/GENERIC_R1.mp3 b/assets/samples/kbsim/alpsblue/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9d2a86e3369a02845907ac33d3350c13a5c8c6b6 GIT binary patch literal 2088 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 JsQ3Ste*u+uP=5db literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/GENERIC_R3.mp3 b/assets/samples/kbsim/alpsblue/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d09cd21153ec46cfc10b1eeb242cf3ecfb3d1038 GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/press/SPACE.mp3 b/assets/samples/kbsim/alpsblue/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4ef43e2c45e97cca80a3a603dedf7e4e5f33aab1 GIT binary patch literal 2506 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/release/ENTER.mp3 b/assets/samples/kbsim/alpsblue/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2012d5771a2f60fd4f9225a76c4b4c83fd3d53ef GIT binary patch literal 2506 zcmd^>XHe4%62SlTNKwFmp$I%cI!Fm2fb;+fMFUa=BE1--i(+~7cA`=Ph8jwMC}1cS znhFu=5I~xUKq$(iD7^?dy_t6(?)-FL?>DovGrJ#lXMQs~OFvAd0RIUpz&r3~?bOd; z0e}zpu{#cX@Im0f6%@wS9n2@B0RD z?g7F~r$p)Wy#V^Mfvp*;G}rQlu>REjJrC&bs9a~#l zN-%*TM|w3KR&}Raqm=}!STIW@mwtS@1Qc5#B&#$v9WWM=NS=PN2!@S6#;tqajW=m> zdahM@$M!FNds6tHtK>#zL$RC`I|;6&t*whVE9Tnwwj@H+a3DxF1k$#q;Jd}0LQA3_ zrc=OCf_;&fUZntxwKWxY3cdm7zef2Rmue4qaOz8H)r0%D#OV;ZOhSwHk3-F)1*eT4 zUaFE5V=)z7p)43gJNxy?LpSbt7uX}3GwxH9LB)28=6+;$?1MuOp(#k?u?sf5?u+fGs^(Gpm7US^E!>@WV}ce`70p@nP9TwS4Ts`;)(m#3c^ zEZLSzDgi@d&XxEhEW=)rabU&h%3VBca$$Zaw{0Q)OH!cx(tY;VBUL6b>z|uDLb?P1 zz@QT_m|KY%esF}nv@Ldz{BKvt|npy6aEo99AE?`9X!r01C%4CnH#=2!38 zF4MhEY7RnBi+-I}NAkQN*K*VvRl_^L6>D3oA(z3L)g)9Wy`PaO?*48E=ZX|7f~|_^ zN>e!&y2UmBU3syVlXZHEM@ExfWojr)yWi|Kij)#~4mIpA0o90+^ z$e(V=o|BFRi^~Tkh_>ak!zY_Q$b}9}-D-eSV7k|pCLb;esoGEI)*WwMWk2VWMRdHG zt=u2HfP0M zgti9}nO2Rki1(%nTwT6acb!m98S3lP>yvU%*V*f^2buHcD)&AxJ{1CSrG|K) zhHZ4-?RnPN6=-bNY_(&otBN26f5*N$a(F*{{NDPzc#=NA5S~3K2%3Sz#q`IG7;B4= zr7S8a!%-9;r{jk7j1q?f8jF4B*elHewLv5Gk+fh4D}*fy#0|-##WZ)l;eDrPo96q$*Fv8)m4#NYD%D?DrCipe<@ou;c2&%WL8_r(QIMhP<{&y`n}{Hn zi0R1i4pob&#KAau6g8sdc;+Pp$kEj39~|avJWQP#c;+7dOin`&HL!{%{1w_v>;8QO zCYyP2Yi$XgxJu%=Sm|sLaohmu?V@MY<b$@zLR20{qJcp{q6Im!Z>90;p_} zDmTTpqB>ebtW?B>3s2+AY)MItL|P5s_y?Q&P~Tu;Mbku8jt#}KCE-l{J>vM@uwyc6 z)J9aO_V~gexY`)vYa)5iukFc(K2^CYc;Es)P>!igz7)=PW!`B zx+|RLT628C(z9`2wl$X2gVTjq=fq0OR4am043%R@5<1iAqX0_=>w0_{kt)m3YpfoA>vfhzkeUn|HwZ95s5|q literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/release/GENERIC.mp3 b/assets/samples/kbsim/alpsblue/release/GENERIC.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a85adb343a5e3bfebbd28e8c9396adc7bbef34fe GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/alpsblue/release/SPACE.mp3 b/assets/samples/kbsim/alpsblue/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6fca3975ce12d4aebbe1c75c21711ddaf70c5a08 GIT binary patch literal 2088 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 Xa_QS144Y;3pKfe(v-kh?f2Y7-F^s{j literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/press/ENTER.mp3 b/assets/samples/kbsim/boxnavy/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b2eccd728e8989db2a901c28db0e3e2edb52da14 GIT binary patch literal 2088 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 A`Tzg` literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/press/GENERIC_R1.mp3 b/assets/samples/kbsim/boxnavy/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4f6af1c7b4b97086fca1bb3a84e371e3b77c7d04 GIT binary patch literal 2088 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 Y-I$&^PwTT-a|H(LgZ=a6$p0b!0w?rN$p8QV literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/press/GENERIC_R3.mp3 b/assets/samples/kbsim/boxnavy/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..412c08234e20bb0a4e136cf1bfe6f3380513998b GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/press/SPACE.mp3 b/assets/samples/kbsim/boxnavy/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..866c52b887e5fc56883468b43941c3bdeb92788e GIT binary patch literal 2924 zcmeH}cTkgC8pc0DXi_A!ONn$vxQIl85D*D1^ddC`y%sQVXGYNDN3vxJW<@MXHDt7b!x3Z*h0-&JKU>%>8TkH*@B+InVpf`Bu}{cdU>IUC2A((~+qrdJzKU zN1K@QD{+RWArc!ORIZ6CqT^uoVDdUTPG)Rd++i7907OlVL2zmLdwqTNo&cH%fjubv zmq1WN8BBgs#TabaJ9pC;9336sN!?Qr0r<@fO>ROuo>T(bC-kFoRbgpFE`ESZN&A+$ z>M^SbzP#U4&iEZ}HVyO}Va>Uu)!jSGeihu^7LL8)4 z^}nf_BkPOe`+wmHg+JxMnIo*6Z`SH!u0~~3X5Ou;s3{>YjBRUxCFP-h6|E`k0!a+1 z$#8b+I`TzB-?DM6iWXEZ#gSxx!LV>kMqy&Pm-JzG2ZV9AMIs~FiDQo8SHm1OR6R>Z zY>`Wbjh^hb41_|J9DEYR8VoA1v3XOwR?iN$i*71F3~$JL&UF}_bKJX(6DcdJ8hKBt z5uWbe7|43dmJ@lbNT8EX=s13uYmEn*Rj5K&KP@HZE_Rc@c7}F)TFD%)j8uvMITzEO;ZtrrT+^>@vXc1Mi*c*AF zsNBL+q-u0yieYHY>rO4iv)OGN!H4^)@w8(miD8hlK{u){+c`|)E5hE0zou+6#jFb4 zT$>2~30wwyVRsz(mF?-SAM=gG-KaIIQC0GiYYod_W58@U)GOmOcHXdh;|Wea7*jpV z##MTIc*XM`=R6FUUp&W37iFLjvfL0D8Gr0RejPLExH`$3bom%i&*}ML^@-o=rFEzze+p`7Y37GYlRJ9v_QgslF;s9yO|$TwHos^Jy!l zZgervKB&)`1@6e0Wr69M_``-J{@G?HTmeNM18w0TMK<~T$2iQ2eiudbheJXH@otLC zPAP%=5YqQWG+ezHR5B8>LlPSmF*@lAo2eh^NrD z6VOoJWP#8{)A8X}*VRAFi^cngUCTq|6Y-_tGrBmz=(0<@bd9$%8D~1nnh~8SyXlu@ zCQdMebT>$mw$!Q2nJlYho7IysycLG?TERW`Y~Kv}8W-4Jt6c&d4Op}km1dIN&Mk}L93S3csi`J1lr zyT{#~lV;{vx86}qB<bv!aKa%_;ai#R=jA#HGL>yW2<=xUs|Iv*Ly z-92LA3wFz*LD(G9A>3vN?>(Z{jt^l*HemKZpfdpgxFp@0&ZhV?@~Z9JXC4X3E#wQ! zxY`yUw@BR4?c*KFeoXmoPQRjGR+HstVsYqd8zJ{@VY%d~GsQn${Na!yAV*9=p;7_v z;0kK24gpZeKgnO2nn16NoS(haOPvTKyB^evV?ScNEX}_lTB0I3LW6ttE;xJ3_%A0? zo>x)Fg**K{YfQIogBS*lj{Zhe&#j%ZL$@uC;w?F#nx6ae|xiMpm_Y( zu#zTgM@#Sfy&PQd`Zc;<0#86z8!5WQujLYua|mZmoSn0H;}P1)k3*#|w{qT{CHC9R|nD-o+K3&1@|dgBOJOIw?@G%ffAYb%V9H;8wZ@Ti5-* zeoEh3D}BE+Fc;k|{XH-=uKh*5DO=`o>XyLnqWewim|Aw{x^4hfsjtML&Hd!I{-kd? z#di3Ww|rM;TWVTC(ZNeBn}82RLp6v*Jmi7|*T^9v+E`kMhnow{Rm!dU278Vna_i@g zzPSbi$Vs1v{OuN|{S}4w0&`hlDw9_(z9pvExk=hZ<-`Qj3+&0awS@4_6o9$pykinD z=U9+KzN11JsH5Ox*Qo#g!2HK(|4-W1Z5de^TPZIi91^d75e^G&d E0HWAs5&!@I literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/release/BACKSPACE.mp3 b/assets/samples/kbsim/boxnavy/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0387acba879dfd3d264019a6ff9560963b5d91e9 GIT binary patch literal 4178 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 QX~7CDcm=d-6rhFx0LOW?-2eap literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/release/GENERIC.mp3 b/assets/samples/kbsim/boxnavy/release/GENERIC.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..26b7c0ef5ee9e618dadc6277707c33357cf05db9 GIT binary patch literal 2088 zcmd^=eKgaHAIHB#9@Yw(r_fBE=3yDBToU4D!^}j}y=0hqjC80ruHDGPOqbP=v>w(x zEe{*I8WpxYHS)0BM&!u7Me2rb3E9;>=l=fqoztJczkaWCKId~jpU)qk&pGe&`F!MS zMPlH;L7$9H+RUkMni2r0S^{q0fc7mqzJ>f-Z1(!j*WJ&{0g1A+0}cE;5|n1DwA}*$ zXkX`0bDn4aTljzR@_z)<(oeL7>HrE8)-`SR?*T=HO=Y^Bb_3@7TvIMzZTP4ppvbw1 z{UJTk;_-#%VhQYZ;}aCF(W=CuP$wxnQ7J`Wnv@%C#3{yHvmcVl zt~Ysj3OaMAOTDb66<$`cbe%<)zb09jnwV!b9uvg7c<92gLw<`&`-!yfch%<-BHIz9 z;EEQJ4*&l8nrz9j5?n(R?dyJ1FxA?<{7apDV`S8a~Gu>u4GoZw#lEgJ)F1mAFjx*$p2G4&t2*>JT|@GkNE& zjIvjt$k&+SU7+#0`_@LeG(}T>)Xm(|aJwS)PArVha?q4Ga16m0JhCgqd+u2HaAQ-n zM%||N`Q&FHkuem+X?^}yf|csI1fwH0d6x|ahhCnY3~kHY!R>lWMz^+x1+%wu(x;C! zGoz^Pgy&tQ?AUGR&7{@dU(VBi`kYqnb%?6H#`prWc(?8BQok(mEvy1esE+a3evVc(oj^weHA4?8)aTp zU_VZ&H$WQ{fIpAjq?0an3cC{REdtEMeE}_`qryO;e*(KH(Uoo-&u``uJ$X-aCO(|X z#Ks8gaS+KxKi@f(C3xkfIM$3|TTX9#uD^B92!H!wI-Rb}`ZbA|C2h6_Hx&m=%uX8p zpuG#O2hUu($rVU1eZ2vC%wBVN+^YGl)75m(+s&0*@GZ)?qrK#W*Lm)M1DdD*8uL{l zZJ?~?s>PjydqnC@yBBi|%8CcAw!}ew4=criaqFiKV)5x>@8S3ep{AK+v<#0M)wbzT z!OY#*9XV4-3HPVZP2WLXLk1firZ5FpQmxWGy_Neg8j_uiK`RAj-qVAcb}?7B+S_~p z8-mrdo`AgR_YDkZXo&15RSi^h#Q>?gyp9WfdoSyg?URi$(W}c3&Js0NxH;v1XZ#S8 zO#T%AZs8uEofqfLO(?U)srDU!^ZTY}-|28`(VEe$L&pUAJgNGzL}L0V$BKMlafQSF zd@ngSHm3??33Uxa>4q-VfF2gu?l)yUgldj+g{W}QbJe#Ut4!p%f zv_ZzRR9KL-+(Noebp=eiNa1-aQP~?+U?QQcRF}ilBs>~>Jm2@&z2<0w0x05~>Pjb4 zcRu9xaU2~R_Qy;KSsO_W`7z(btcUS|AP#W1Oj)gB_p(?mJXCAMznwpTlZ| z?ZtsBZ&|sa4cgpQD;9^Brfq;53LwuwEiGMw;gP^GC6iRP56s5|?KsZzG*&iZvO6iN zJ`i>``XDK8>>{JoSJ0C9AOw}lov6Fz2Df|~8N6C|ZP_N}hlxQ)L!XSKzXV{k?Q-GK zr?XP5{5&rOgHVV_^*A4^I}(Ls=QSlite|@*!^LdtSGS=_5KT$ib(MRx?|WkYFyyo{ zia=9NYWnPSqbmMVn!&3XTl@BVVWD?Xjr;G?cPQD2Brbvigly)MT%N|k?w#p(=_))h zQed|XX?@PY*v@13PNP&xf=ZlVA48(#3$^`Yid#bWigssi?(=GGZS7oTdE9^g=4Sjq F;%~twccuUU literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/boxnavy/release/SPACE.mp3 b/assets/samples/kbsim/boxnavy/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ae49d94882a89c3b10599d1d3ff2d2e57655c167 GIT binary patch literal 2506 zcmd^>`8U-2AICq8Z5aEOElVL{Ff$U37+Z*PEp^M1C8B$?l*YBh*qSks$gn=z6l z3As}wWQ;9}YDzWS$}*M)MPtk7%lCWk_lNJdzu?}-Iq&m6=l%TQ{d&D0=Y8I9aGk^i z{uh_Xu&Avy>8&9Q0MI@F`TvCd0Ll+|`UAipu(g+!8^+xc2{$t}6&U!dBn8}V$g&*( z;I`}FunDDq1^<*8{I?+KhxsPnA%L1CLLWpd0JhP9pq<0J7BmHcEtU}?5b^@I&LdS& zNK8i0je>|6TVu&+Yt|!9&#&Z;_U5;MHsDHH#3%^1Y{du0)<+Phd*8>Q$uJ{o%qVZ& zk;CC^g`2$@GWHw}xXu|%JKf8f-?lUbeoGVTy&V@9Ckuids5vwmEm)>IqzHp$JG)fe zh(P5h#<&dJ??|sMsOKQrqK3I4bc@*RD521n(AlGmBqznN>0$}`HK$wp{W?Zb7E+S7 zCQsnyzHs6v531@}3)I)f>}4Cd@r70kZM=XLN`97d!jEQ1J;7F@)$H0^WJqw`hbLYf zPHn9v${(Z@HZ(-4xrO_7CNPC1E^6<8d~AqVl)*uZNe92R4$EyGFl_pXaQ`gxbM;w_ zA6xum9)CWec4FDt4Ey__2|ubN>eFhi{_1EO+h#7`vc`M!@wv zrWT+vgh!4P0}vfVjg9GopmI9)xN&^UkXJW(HnKFwg=_1FIWk(M`W8=3tl-z}bAGmS z%9YN_x?3IVdXrLbADXz!@;4HDyjX$jEZxwKfhZT zXCFD&ZD%k2;9B_J{ZP-neGm9eW5=@|`jJs<+q=KV6oU<87NtdA_lqRMR3`30=G&O zD1>!s$mA85D%eh&z7xw5e4E93E{L9f_BF>Dk~d?z1l5uhDrF+vDC#O?!wXIH61_ZP zLwoJj4nHN7^_t8b{W&XNBV)#^+7Z>jO1AdHKWO2ztiZ>o7$dBl%zJbhwd%j9d(fvDoUR8B*#B00&%Mbgv9wiJ8*4%h;!3h(UU98ycz#D65JL#tQd*NsZsU{h^mdr0m)ik zkBOK&)sV_X`hE{pfrH-dak6laY!Vb8DPqhDR-r5n+n|w3+8hmkTS0`d*TDUHcIJw= zyLqW~p1#3nhJl@5p+{xL0~PXR>d!b?T?BMb->+ASOjFOpu6Y%U^0*(VTAC_C?e*Pb zyUgVRO^2a+A(nni&aQPjWgN$`NlPb}rEltDu0nI|<>{<|q{(6W8G{T@egTEc9z14I zk;smEu)y|D$G(E+BNSr!mbr&Z4hL%{suBRyhpEN$Ox7(p69fb4Lt2b~dBbv-;ZyVYTXq+q3 zYq|qK+>!cxO&oCV)p;`AR?1%2yT`>JPMtjzJobCRywx*#4Eg3^vZ`2m0J%0EbzP6& z>;=2jbSbnollcKZ<0FY82Pd6*8Z0 zmivH4V%}E(C{Q2GymhY|=OHVn>FPXF+@)xovT58|9BA~#?XpzNu(<8vO4$&lS>F^8 VtdifQ!>vwPSN!jn!sqYKzW^~QCYS&K literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/buckling/press/BACKSPACE.mp3 b/assets/samples/kbsim/buckling/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a40f95f822b90c80eb095619c1a01d373af6e44a GIT binary patch literal 2924 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 B2S5M- literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/buckling/press/GENERIC_R0.mp3 b/assets/samples/kbsim/buckling/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2c10024d5ab11657812f1386cb810b7f93361915 GIT binary patch literal 3342 zcmeH}XHe7G7Qp{x0Yec3gd(ug5`-8qAZVl$0+Iq4Akw5N5|JXkiGN@56q4U*7x8+_`t|nLGE)`Q5p5*!!7Jf&T>O zea+`!@7TdO0suz^0N5dLhwwTC?JzBecy$Q&Ar9`+BpR3+ol#Lmp*TkWN(oAZabLs$ z0QE;6dC)@FzXJa&Gy7kHAO_h=O;-TP7iScI)u4j#>QPuB5NVcJJO_ec2Ap-WnZXoe zhZ16OSE2!@e2IR%&OC!pfmj$E&Q4SXr?RKju5a3^T^-C;D4Cm^dy)+RVA;|=1ye0H zJ2*HvoFV=F(^W7;1|!dAhqpHz6gvte2r<>6$Y9QAvETpv{ZrU8Q?1B; zU zUFbh-L$+dFbs=|pjfKATKy0+Jf%}aE0G!$G!fP5yeK9sEyuv)tP+lU zg?zO$FJc~Pb4%0{sePF{b$@g@%Y1yU+Zu!lHrN|$yqssg@gzLF-u$+!c%as$uXF0s zO2ojK&ts%*RmGfndVkY?U-Z)a9~XPyZ1CDzFS*3%Gh$PGwirh~#*ArnH2!k%4E5OT z)*I~o(u2iBT0v!d;;2+$tTq1qLc|P~6i}L1ek)xL$mBkpyOVfTQkQ zW7aT}iqhrctZr+!ot2+2pj&h#`%xA5UEf8BBUeFnFD+Hfx(ijuRN{8ps?x?EM+@&D zOltQXZ#Cih6Y41IMUxkOBm?&LXDazw@5ClslI+>-n2b;B6xKKSDT$yJ^T(Ga=ap2h zHlGtnM=}-+M!e9LtAP)Fy;jeDoIh7Q*0s?hvA2-w%PQdda*Avp!CUEiM;V$%fggT5s?Fo(=VI#0njOIzT|^9 zb%>@K&hgWDkC@opwe1&9mHr~Zc?cm=u3}ULP2X(-iQ>P>Lo>aoM$T#M%tipAJUa_~ zy00WftA7}hrAjuFk##N~XtgSe8nJh;jPl&Rp9<+9gm7juXcalV(p5J@l(y>cl<(%3 z-D|0TzUi2(R(2I+<9<`W_u+CcOGInpjE>3c)gg|d8^=-@tDtGgqE7fxKqK?omh_=tVALIT!_HsUAvoAH_jB)bf2Z%fY zMCj^%6w2T+oaN9GJH$!Z7PL~E0UMRS;T9U*~@MT9XPStPmycQTP08*5Z$ z>jeK&Bh#Ejz(=`erTC*x_`pV1_zQLVJ8r`t@LZJJr7%=D#;&C~1 zT-$_(rfPDQ=vgcx6S3gXnqiT1Pdyv1LW0TCODV4NXS+xGl$7J}#}%M(38stqgO6o8 z-f-+-uN^XWRIHq3` zAR>}90MdG_+qe+{0Gz!xge0C@Di`5GQvbR0Yts=7_D$j(JoPug5=vognw&ouRVsSn>l5Fhr}@esnr z!cW#_Mww_x9Rt1fwNlUBPWZE_Ut^$VL9Uj+SE8(}(V~+yzh>zB-pOb9{zEk}0}t<3 z=L2KYWjwkoDsflrj!y4$ra4CAI~NArfQ(u_QMK{YuHlb1o{;5DR4?%+Kv@ra2!RG~ zei)LZ-dT?kOGQnk@Sl>CO{ffA)$9Z~{^Wm28*2DE*(ozypCYInfJP>|lQQ10Jd+@+ z*JSvj%3~WjUZ3QjqB6rKg|oPuR$Neu8fr3DuQwjd4R zUV%m2Q^vH;wTfV=YQxpkut5h0H^PQu(*I5pLd3S|6xdm z3gz+txemn|vMhB0_gA0;-r0H7wr#AiDy~&~Rr{7ie-z4S4CVUWPk2i(SEaGR)00X4 z_W3arI&yXrYDsJ;o>W&x=456=jYwa!#INND*+Ox-IRjp|zWg4yIrMG+LkCkiY|9oE z-cHulBkocGq$bceaea+b7A$By^U9)#4#i;hpk1-!^39$Z;{yRZhNaBvG?<1arN(@z z`Z7Kx3rx2V;cvwPg^;KstGq0^SD2A2_98VFM8t8pET=ms7W-XvU?CF<6<0>fqrV)Ww@LCE_fy2=Gh*U}K5z7+=f sn<2|PJ173#xRU>lABKoOjVXy|DDclv4jPGrK8y434*Wm%U#`GE0TFF(eE;$)_H9Okh?>nl_9c6UA-fskG0M{@gAq!&W#1VUkA@k9lzq#?gm|ck z=CLG13-Z`y%UYo@SNGiKp5vZ#|GLkA_rA{gp6~fC=ks}=_xttJcQpNsE27d#ONVdhdAh^XM?dd(@<7ZRb}h_QxY^9#fdWkfao7O zK6)#j`Saj^WoG>&AinYd!#YT`fl+%2OGB0I8Z(_jwNO%4OKIf*G1YDd*)BEDBs>T! z2=1e-tgNyi5b(35XDcf!2NpNR+wXBSvDU}N#usJxR}OqjV6mFMArOejd{z@{|KQfj zJQ%=aKV-E68Q$9BI(jcwq?V3oj=PtgPWliRe8}xUB(k#HZF6#zD15Ers;s z3**As>bStX{8-}=JSO=wca^8|V26)weUHp=ijqJI{fXs>#^dzMksgA{#8RYeoxjy)f;f_oLh}^4t+~n>P z`{+6D*RHoPKlkq4AobyyvfRD_r3$256JOM6m)&nq*~25Dvqk0)wm;NL^6!EpJ&qdBJ~TUfx!8OR<7ra)qxr*S!dz(i*0s4x zFaIYZVzZXNHScXY)y@&FgtAuLb|1~L45K#s5EmL{(YNI$tXD5Q+u3iBqr$+v{sJ^l z=Wt8iRsI}cqrG}r7YU#%E#Hl zp-LXwy@<#ti$5HQnDtQ-tALt$D}~~lpEqjQqh(}6k5#S^PTJU+qqL1}$}@02e{>{; zoEmiXoMDZlrcCd7G;Y7y#dkIH){0BfazZ_BAcO%9{k}ERiK?ErPI}yCb}+Rv01Cu^ zqvM#UcR02Oy+)~LwJR#4!!!Gg#f=43((ppbt2LvyR>}5j;Sirg&8vT$y&JY=;_e=jL|@VF@aRxysprMUIaFfibttA)+|C2=@|` zlCM#@Q&LcO5!{}QRtokHI*H~_&7`Kc%BJ40%^tu748a3}bnTZibo3tjIllIhH*`-V zE@pW*(c2uLofI=T&PwmaJYbMDVcm9gfX8-c27>AUr0K zpa?b&-4u~LREKDm(S$lbs9tb8TJ}Sg`kP{&D`Mr>-r1A9wc>5T4$pbCOv`Im9Sb8dQ}3e}uFM++&74X)8Aek7z0h$-cq zTCN$4U1E@Q6D4$y!24eo)XZ0xXwy~mk{^RCNi*4jQl-dPYY~Gd z9u!saPKkwBl-}pHVpHba@h|9D7053o?EG>(>SV_gk#|L7FuZ5!W2ciyzWq#JA`Adp znPoAgEHyZ@BHBsfObKs6s!4i4hcRhwF|oc$>*It#t~$~bvn{VosnWAcAhhldfU?&0 zhh5yXtbW#3$juhBmQiU;B({7y`rKja*moitM-CYr$n3~;Gzl$ZB5=1`GV~RN?OZ}N zTst?Z`d$IEGQ(zbE}yi7i|#+vOvXMQ%mLB8t=deyX+|PSOHsK&q-5Va)XrYtO2WYrf&A!8fQUYU>N?+W;^t&KBt!BGm)9lf z3+tU5H?;p2x>rB%#^phh_BZ!8fC(+7;d(CjO}IrgBV593+9GBRQ~8ac$^7G``9HZ| z@H22{L@dxdMe|m3b-k*yhYS7n&iQS7q6twcud+lPHy(p!y80~$8u338G6JBM5%SBb zgWWkQMSF=70o1sWVd?XvlNiu2XRn67ymrIN>iETltxGI{^q}~sRmB$H$HSiv&rUwT zb~cyBo!knF#j?GHp=Q z?NGbuuSn!{9RmM+6B9U~@;4o^X@6|72E=K8Bssf9CEqX%*-W|o9&9h2Y%_{q+;sG* zxl`*XrC9iCEui%EuskPHHJnF@>_oFDO_8r=$LAIe$CR(5eo-#0oUAH*85l@?_OSkR zliYwiE5+*uB@rp=04g_bbr+X4@IpzKJA<~5@ueZ*6U7cx$i5p*w&=*7&K23x>|3Hz z7FKF^Oe%_QQk)EkLj;Q$apY8l_!rn*7s2gHgY8$z){OE`H#h7 z1y|4y%D#&4a5JsjAny!9K+)@ZTD5}4#~R>lvzKk0*)e#VJn^noLcnLmd%A{&qrFP5 z7Z0eLVGdpEEL$w^)|BNzxjDaz^p;mdm`Q%`#m?k45R!4KJW3loSSstatnc6~xyWk^ z3A&SR(N$5YLkmG7YFYD7IXDFV^^dDK3<#)hIV(=$xKzqocd8&MEJR!_J%3VWp~XMT zyleh?7H3GXaz}hNRN8n|DxTjA>vG!kn33s(+VlQnQ+L%9hDeaw_ZGjmoz@@Vt4A!K zmcS;E9Bj>obb`&^hbbz=Q{pKe2HL7Zarf8sxQWKuG8zK|)zj3{8Sa5kbnXn^h3$O?uG)0t!L8 zfnAV=AO=)Ai!4p03Md^B*u1#!?VIua1#jlPZ|2UubM6oK-1D6~b6JP!48VV49po3x zj)}4d9{?aM0)T&m^*3DohRkni`G!Bff%OgSvyAM_>@hl;+FDv1ul`O6LV@$*%>e+) z*F1R7V$%NJ_+Ob>e+dHjaDlGxQ@Cz5EU|RhwEzGmMO_+uccR4A({Z7z;@2d?8=v_k zzKGH2@cr)zU8NyD{nYO- z*s5D~D`d_YY$c8ERnXqfR(78uvHw}hKCw@eFFfZ(NtkZX%Hn!7(*H*I%do`DGzx!RrU}61L|4gKp%17M(zxpt0 zyOp)gI>$PIxW)I%S18)dH0&!@w(Ti)KV#pVOVrpc${FR220NZqB%`FYf03)N(AHh1 zvJNvD0u)$rDET0sBGpgxe_FBu0PCeIBFjVG1EQzr#NEO^E^Atoz96l!VcAAP0Gyyy zU3-t?cR@-i2v6wY75mee$;b?mF#4d*R3U6YA15HqaIRB+t5FUc&w=GlnfR1kAP1~5 zF-o~t@viw3(p2s4n%VHk+O3KjW}ypVMH+0iEioN7zoXGNUqs}5OYe1ashv2?R_bI# zg;u%K9(>kn7Kd+w-W}(cSds14+x(PwI(GdJ67F*B5rxSlk+`<oZ6*(o*U&GWfQIDL&QmmH+qBcB?`#}x8sT#?Xt+F#7;9chb7wz zxIrtf*f=ZgeBY9Iz5ws$sJ9Y++tFL)C)q1>;j6rFmY?`b*II%XR&R%)ek3GZZ+8B2 zW#;g;&#xMPeEgh33!3;-uQ|`{%E6a`of&q;ZM~ZJX69C5Gvqe&nO)X~+Yf4&nIfHo zA;w{fd=|SOsc|n$P%(WMgsr1zl z6d)$+dA>#)Dc#?&pc~&fbf@%HxI|2D>>0(flraQ@^NvKhFW3A?9sWn0I$@^ z)QT~Leay?+po`G!4|SFM^pQ$aE>Im<)$qffeaBos_hlA6%DQ^5`l;{KLElzJXa}+h=P(!kL8p~8`F{P3=~0V)KgaILbd^=wiJVvTM6CR z)RuQP*d}$-wH%$(sX6`~3<8#z^9;f(49a)ORaBD*@HZBaDNc6lcenL589r64Po&RR zzDaga4QEUkhUK1l(K^^;@Nmu7M)23z()mZ3mY__=Ww4&EVW>6;fr$?Q%;>+)LQ>DB z=@Mxx;BFCd#|7r$(~%Bx(QXQJl^Z4|x+oNzI7|hRa^6Fy& zFa9}6a7flth?bLMuRmEI`Jg9q(3S;B)L#{p+Sl~b`6|pJFUG~+GEJXsE zYq+MZ-5;cNa&EuEkZVaeHE|3h8-G$K?dK*wUwZBJ>?J+7T7K*er+HP)Eo}u0zP>vA za+rGEd&{N7r50(}o>Q~8dc_A~;W|+~cD1ZtebFn$Cg6PVi%+9=wd!4y`HDs{cN?vm z{T@u+$G`DgwT4@zeyF^cTJ>SSsj>iQpAdrfXKS;zMqZP6=V3mK1s3F+-QpwsAawES4kd@>rmAURrmo+@z9 zxXNU}%OXx3;-4fKnOBIGv`alNUuByZRW%GZzlV6>d)Fo&TvV>9C~L^?sNwtbMPL~~ zQ&2BoQ(j3-utc?Vb1V@}o5!Rwp?yS`|XXCt=?p@%P51bo_7}nvAsDfK?Wr6wDpvL{1 z5xF*E2Dl%kt==XoIKTuOPbecg0vGt7DQ`y;63-=M$|chx@)two)Oe1(E^B7g0aPf( zrBqM+cv3`AW-t~GEBRn!UVz`0zi9`pfy@=_&3$c znzluJ`Y$bWa$asPyVE1KkwU6~hR`-XcdJ>-FORUk7dh_2bNb$>B@5xx2;#_xV| zlHEy5Z|qZt-ky#X#sJl-l@D3~r>KCOUrM+^Uye`nuY_J#>yjxuUA~}Nj4!IRb(DGa z>^E~eUV+MjtyF@NyW#vhi>6_V$IYpy9GT7#2Ujgn*%v2nZaO!~m32u0;kc{P`$!8^ z!Rn$s0pvW+Wi{&fKKjY2vVLshz5HffSC#5@3xVXQPrni3Z-)Z{G)G&>!%i>A;#7p8 z8q~Hc3J{|T$t;FiQp^3JsXPo+kK?8t-Nk_Ps~_-E(EW@ITQy-AiezyQMe>ozP}%8Y z#4A)mD05Og9CKQtT&5wyT$DO3c^;meEO0K1#i&MFBukkNmGLsl#wHu;hHhga)@ZB* zy42(Xit&iOr_~^sLAa=@wn-q7eENWzV`oTcp+TmoL`lk6W^7}bA&H@pQJG5_ zOVqC`+YE`yuBeD^p>Uh7C26kiIrn#t-+%Xy-(SDq>zwC2=RC`KKIeHo?{gmEdR`~+ zpWvdxPHm3KY_@FxASDf;w}9J1rAtke3F=G z;%>*gp8L$0Gpg}j)ovYrqJRmQWd{klLHMd3V`5w!R$OyC3X}&RfLgf@*pu8!^KIKS zlz?t1IZrZ)MMYAt-Hgbu`z@9;gB6`{>#8m-ChbkolWwpqU01#&WA|b<(_5sAZi!jE zBy@SbY3}>dn@5*7X7GvMG3OT-WKt$4H6+A$NJOXY)2K}l3MW&4s@Ho^&fuWrsk{@z z8)7$Pl^IrhlSzo={Zk}k@x3)qf|UThQ=|6{Jo8ubXCTc!XrWJBmAkJhhgfv3 z1aIQ}^j72rHUFRFF)6JBP8|PG2k3_+><&4#=^Veg+N7%ux;_Fm=X3*S;DckoO3SkvYkGHh)N3M|l*BKlBqsG#zq&J?1mvo9wMYa9?ud{m}&|8URq ziC*EOgw8h#pJr5@%%uXf> z*Oz}y(7(BB%4x4~gfB3xB7h;A<-!%r!ah_kh=AjY?Sl;+?b#I>3M$khn!}3U*nsi< z-QTgTvpRnn+5r@q2JWF*?(5iNSa~L`1cSx%YxRfgnn43D4b_p10PDFrkkXUShmwnM zS+yH7lW}qj?z!zz!K$H2-gm%ju{+y>iW258mRo@NtFUMk|g%He4xe zHq*s@BzDI9ysX~H?`%=daD}g=9tvCA&#W`?Nq=moU2j~}lQ^-r;*)QFnDHn6&xXRe z!8h`@DP)Ld)TLU71)sL^OvSW={#OT!+^G}!vEhZLq&3%bJ2VeT?!37V&hJf? zP9a-M(m}R|l4sSOv(_+3y>9FK$pv=S?sA?gAtD*Br^=iK4#5(BY`9nkDizs1dXm>K z$mhi**k2ZOJgpo#CDk{G&YXXSv}_2|S^1hP9d>J^dMVy<0LjTX-1X{IVxn+mhVufl zKV9YLuF*dGxTPS*N+x>KkZG}Z1Nw>J+*m08cxhj3uu8sbM3!5e2KguojLxsu3+)bJ z=mq@9kOEKyGTjBUv`7KCL@reYp&ME#V@k}z!qR(n{>oHK4?KEuju$NmdZ^Hys8vRMBx6~6bHiy54H@5 zhy8BUB=(T_bWoss)f!3=TJ<+G-vxj=2~nmQqQ?eU1SFj1vpRHuYgA{g31&?N$?8g@ z6X7ms@aPB#jZ-B?L(@^VN1LNm*@q(&BC3VKWf4VA+1a*J}&`fB}$y z5RVX)Q*o0w#!y!V%R_;}Z&gfG$IOi^&GL|r(|mT_0Pq6(ePbU=1NScfa^4O_y3VbGVR z)&0orEVe}*vlRI`zr(IVFs?~B9Umb3uJcIrN-OWz+pw&|qpiPHacAt-mX&0VkE&U2 zNX=>u;HKOfKN9E%_4R3SYA|WOMzDOy@e_&IRDXT(;d`+YyR1J2HlLKg zKn>SGVNj(T*-u#FL;xPlvq8}n#Gxq#*4jSslJsiHCP+$)$VWVeq`>q(tuE;uzMVo> z)b>T4P%)}AmNl>^7sOEN^cA2z`W}6G^P}-Si&D}AlLkSz4r*1yPL6>-OgM#`EZdsx+DQ0ps+34BN_}Awl zltjnbi#@|CR-3_qv~|EVUU11W? zAYP6vw9Yu{=tnk0a}1=N(5oeyBntguI^N3Qc38pSG`pWa83p_>qzA|~YAHI^4&yfN zRA85-PFKu_J2XDC=wF7VUe|b#_Z87|uh6S&?L~TI&B7}h&ON^S@mr|5mqG4z*gH+9 zC=$4{tQb~azyA^RODHDy%*;i1RKV&>7Y#~NL_|Rnla>n$Xi5#k<)ANplb<^cK>vPHA+hR-Y!20GUGp9cj;)R`YDX)~u9Ww5UW8 zH=&8@K&~9!zP*NANRcb@RLJIB{RJAC`-cIiAav|AZDN0ga#Q`z_&|`EZp^a3vZ&Hg zXDzYhewLrA^s!dvu7b=6=@G*aiL=pPTEc~iYf8F|2yF%tZLgKXH1NFd{h0kAtNm;r z?FJ(PU3|cYI=vfdPvAaZO0Y$3&)&ut4FMru*v@GNFXTJ>5x4`C9vvpP`|-ihE9$+p zN?P3$HLc#_p1LQxmQ=?&J`{n_IIiSA%)tZ%Ck+d~`1<|CKE W`fN77CTN@#%uB1It(T0nXY5HS!4y_jH-Sg1!4se*_cEfj+Y0`ch55-9ASm+iX70`SzTJoS>Al~~e|BbfXZQc#-_Gpre$DLy{3mwj z0>bwC#P)(801y!cAb!H`CqjQB?`K+n;>}O&{>0v1D958tSbZ&B9UY#bzf*!HA^2P| z06@}@Jc7v^N`DXhue7^=34*-b5suzW;yrl>xofZj+$&yZ#A6-@Z+3mj zV%3+~)Oz@*+1|hN4qCnCZP6L9ESRtRV%V0)1WziXJsa#Sn>~EfP0==edc%x_d!}I4 zEMV7j(!lh(5yA(Y_1BI3zPY>o;>GS7DN9w9++lFb*zRIBnyv|HMSg$2V5gRcmB-X z`1C-D$<}djp6BQM^0nh!A~(VpvDvT~PBI-OMtCh(i@#SHfvk0Zl%P>kvj#yR-jwkF z-nRIG8K#KaK@Ap+$Gk32nfWSwJ&h4&Pt4|S`6LRa)oW*I9&mws#rG~Zic$*aWAwhX za~|)w0TZ^oZYG?4hn9GN>{mQj9K#5yzJfSSt()O%C5E+3g~e|4_%5Ly8EWdjZM=%e z-3Kg5*3n9hMz=%LD;|lo=RkO|;6$PDjH9MRp%dp&cBGu-l>@5zLzAD>33Ut)IA#&g z9dRP&h3}qK3%Jspk>hnzwnXzIZQZRk0I_^<=d>;5UVO+W?$uMMFVc_xrJn4tRfb?cdgr!x81y*OeV*9uLjtw8MN0W!)1he z{KOn4gB10(W}j0vwwj(gY3K}>O}{v1a=+1I=KVu4^LOzw>BW5}xY8kMnfcqPO%M8Z ztZ7dSI>*LG^A6AcFr)=2>8Lj5>Y`K8+V2fB=xyk>6JCMrir(`(lzQTedp7djr=BemmMimG^|nb=_Yqs0*Awc!gH2RDEWq1_|gndr&jtu99}; z`7}uisSYQtXN~mtQLQjxcPaq_GcTkya^6m;wD|SAqX`PzJ_Vd}K;wKva~yu%wFj5* zVHx}8PtG?0kZ$6%e{kGU!Pl)uU=7;g=J%0lNxcu&?J>G+KxO(`o(}Dhr;TuzOeE~s zDROI{^dj<}sXA0p4qBUT0TJ&iP@aQpqY_Frvyl`x@Ucii@|R^uVdfpeRJ6D93Du6l zxTyAvSK)SE{g31C+^a7dWehop&o-O_our@bNd^+dy?ozt50rn-pl;x9;M8%VP#VD%~~fN<6D`ShAhbH zVv|}IHF6G2`(fx{5;QKvf}yJ`o3HbZno+z4RX!Tgql&zKLn=?reBNY1U^4UgepFV! z?~DL$7(^i2WUyI!=N6{xgtw~ekJLNT>`&IYOO6c%+=7C-8-E#J+%)r)_6AN%p^*hj z`s($#Yj+!@9_`lAi+~h|n*fOG6Xyvr()=#K5+LxJ%9xE|!kRCeBkTBh$+;2a?Vve> z+T80P;i70UxP@1iN<<+9pbffCm)P;Q>#AsCE%7$f&0uF{!;~AkR+4U7zqBJt))YLr z;uAAnqa&hEDu5zagB{7_HBbNf`v7Uk0C&!w)z}38Dg}}&!w@Uj`a=7xikwR^c^aVkeyIp0 z0^u6H-L1Ct8Y0_zA*M>_yz+(ak^X+vk#8YNX|9hcy}xP*l8lueEj{zXhSS{fQ-Hln z`^vMEBhdrHGukqgW`hRt!op9Pm#pJJIZVz+Kap#(j0+Ep5{XpM$7|-HB8iv^yY!gb zlb*cUKMcty!OEhf8M>&fLt4H&8MjSkvfi>}Gh`TMTGbSL|2zJ}{O*_So=aqSxTe2j z4OfPbfuscal&WUC2^1^$&|{KaVC&M3?bdG{eav|&t<|P%EJSz=W!#-El9ek1ZS(N_ zvp{t;62h{Qw{TsBr5$koP5TX|-pt2&`IXJ7_^HhGIxOyum@riLt_(R#aBN z|4uQ)a=Nh&=L&#UI)doOZD!&{FfKxwnhw(w6BE3u;>#@cm1U@q$@Be#RLP+^D_ObY z4h#N*-?*Qh^egFGuL>RVal@fkpELYDY$JP$MjBm5kcGiC!MR(0XSf42R@q7~%52j} zKwQ3oNVw&1uA_FtGG=(SF84dW$M2M5RBuhn7xEu$1pYvCWM{atN6aXsuvxWHkAl>< zlJ;wg3M`3#dzXMtYdf|5N%ko zjFA3eNGSs_g^` zg>MNYo7qH3-h&-B1=|u~(&nSiE*|SG!4t1%i%%{(=lo`|7837}=6R?X)#@{0g?fml zQ|ZQG?}0j>QlC0^Jw+(5o6F2ov7ttbL6$h>Lz#*Z!cg%{-d=Zbv&m{x^0L1~&U7&Umz6>s6G>a0?#UK!yQNqM~T(?<-OIycQ?1*Zr#p>!RH;q@)*4FmqLowvi zcf?D8jog~bs}YEwfD8w6q^*O;B@&anXI17tt({Z?ir3S6y>&AE%5oy~H<*v5kc0(tCz~jCpw1o*!#zZ6*S#i8wtKEB|9Bf<(XjCje?Fo9 zeTt>WqoE*zV+l5~b*&{~F|k`b_#W@|V?&?ZENnz|;_|0aN~4}%J3h;7{ImD2BINA^ zdt`=}LjNufEl$H6m|$AnxHA!v891IG48Oo)=U|Ce+3?!WWi z>pT$iWTx7J?sRKRFT@#R#xlBfBO2ml7@GdhIo6<-Rxo^IsnUNXWpuyT)M6QPvi;G6 zh};6r(Y{&wbi;PpjtOb;#m4IcuB~~;6FYhnB7amyzIejB4nhvA#FpQtD?Ani3*QJp zkQ2hQEY}qiI%Ba=Ggz+`r1o{TN~-b1pSDsTbBH4tA7KlD=|Pa!jq(0Sd{nGyrY#}l zJ~sMDo#cixGk(WeTJQ#4V*d1+?W;YW!6oR+IKDHdnC8NU_q80=sDZ@<8bLM56YHvc z0ac9JdZFEy0P62oM@k1adBM?_-o)>C&zS3bi6}Ld;S=0HIePF~V#)@W$L083#Od}+ z(+h5^i}U@3)}Vo-_AwYMRC*RgeI;15EAt(HoqVkod76g_n{&$>TBh@irUQQ&k_E_C zWLQ=invl2+!Le6L|H^lt=_vhr*G0(Ml}WmtaTflng@)|7s!Z)y*DunBLizR2FnrC-z0rCyh&x6iAesSaH}^z!0|bG$IStztN0 zCY?2MSb-V`GMXV4$(4?8T%(F6F_zKX6Crp$YlHp6G9b{(k)6 zoP2+8D<_#V5h8QIdL5s}Ln#QDHLMv$$Y9KKqr9tm#|$+KiD+BlChyi#-ZOtl@#S=HKB_7aEG z`jcrHMMoJoy=_wo=*@GJDWS9ZJ`*T0fpDAnJDQ$VQbws`&om-Hc?CAQFUNAh)3Ukn z^{I;)eMFgH8M=LzhT<^oO-DhYzbLFbPB0WRspjh$TZ4^uJ8G|(H|!*kzilWp0{BS2 z>1f=*pfvE+VtYb_5KMC$vjcyS_|7xujt#R?vgZB(fq-&?wQ#hWR>3br&?Ke1ofYu+x`@h5<~5glEnAM z7%@Y7)S#@%?}l2ws*`?|#E?Ph&IGGMI}6>8v6PjQ<` z{G@utFO;kw2RQFVi*aUY&1T7kdjb#zt%&-owK@F4n-(QBUnk>zW0I2uW&8myq0vds zo>aJqs&Dl_r{af}l?Fw)t&rGWw?2Q}_~Y!OH|CZh$7YbMO0mK1Q^w8f7v5I*G!HR` z%h;m@qq^Zi)GzN_P98a(nAhxKnWzXOIFPzH><7trt2x1jiD59!$%j)_TbYrB4dhys z?#gmhtf%O7bFBF$br8-=MhZ9M*{TYXDG;Ivv%rekDbGD~Q&JfjSfbdZ-*41dyG77%t z(ZTkmwQ!61VYC5&qa8Uy3!jGxpS7C2qF-^EqTS(=E1y4V*%%Slzw^zdT<6__ebT}s z{;PToX(^yUVjc<&F1pmHpMEHR+I5IL zdvDuAsj6x-YNuuaj*cC4tH7eP2B1{dLw?$)64RR{PhQG|U6o$;Z%y9x-L^^i)^I0> zJZ}eE8GWT&Q>t3ZNRcejPNcM6AKSlAU6jE<64TH(hN-^{sqJC)L+cz$6$=3X_|H}% zkX3|zfJjZvg+g)zrf{xTpcwvSNO7nmGJ9{5ry{Al(&zCr)5h-;B+_%Bu44m6xyQ6k as;EM?iW};$)^{nx?cbkfxBv6sX5e2OvWUt6 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/buckling/release/BACKSPACE.mp3 b/assets/samples/kbsim/buckling/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ccddfbcfb6ad1ea2fa8596a81cfbe7dd3461c615 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Ozn$%%oX0pyNda}60`5+jBF4~`(d&RWZbGvY3N-H=+h;RB<#lBX(5P*#+#b^~9- zfy;bsIu;VUlo&WVrtmr(Unaodn56mTk&Fw2K<^b?<(@yw!Lh^R>Xa3*XBwJlVw}xc!7f z6JL$M6PBkg0l-*b;CxUx-RVxC(;LN;wvDa{e93}wTJK!u8(rOV4h6C6~I&&TLdWu&{8`+f&@d$E~i;`Cy;!rFByx`5t$T z_SR$V%EH&)z7|M+y2wsu-F5j#HaV+iE80|dd2(;~8v9kOZ|*%^A{m2ce4juuf zFl*+kG82Gpb>4+|a!X;kEpEDb{ z!Z*FzKW_u$lw&0)cBB}oI|j0GGA!+GF=RCInlW?sbk4&^BxY(&c$hx@@CA_tYfl(j z#9K6JZuI$>Fw;~+f{*cw^1<^`Dl+pmL@w#i@woUj=%Jvmuyaow?}nM$eU-6E4{WxS z8Y`qVsx{?JUeH+R)*7_Z%;D_m<{wjzHWYC*ypj0ylV5k^qhFrW&rd&ld8O!Dkx46V zvMy*%s#jET$O2|wl&-K83xc=V%|NmmV_M9pYZ4Pu;GG~XW_u-Oo_Z=-A z1|eI;4$IVaPdqOxHaAG*6@yf z&&z6^S1!guHn+OGqP7Pg{r`V=$K(0!h2n+vyMMiSA@ud0#AXKu23D^mn~94jaY!{? z<(d%tgqxjV>w;IUSLzuobGLXzELqbsOZ7-i|J5Zg++13&BsjNs=1C@Ks7^b1QH*z~ znM$H*z~L{SK{2GtAl1g{FweDdnlXWkHX&kL(vHr-10 zl5xqM5uz2Qx^wE8Gx{kF2YH`t$V~0Ln(LEwW#^eKE%sGwvudLKmaFYJbEA33C)>m` z>%{ww+H83DHvHq&_;t=O+4Sg)r7?#)v7hXbmjJs4}qa4rL-NDgfu0mN+(D>F1u40;MS1Ns;kDt z5&tZ}gxyLmwZpGOWMNfP)X^KqH79ZV_O`F*RE+U)i})vG)T>jdsCm%ddR7nf!DE8+ zj>UdwlAif))5{ngA9rD`gKw^VE#}nwo&MNrn>6#R%3FoDI+mO68!fBx-<2eDb$)@u z>i%ox%BOVLxZRuf_j=A#>mv$A?+nos%ASr&<*)JaciMFervZ86+cnrS^PpVEnx5!jp-!RgXxR zIy{q`>Rq_RuWv=l66J-fcmuK;&+sJ_v#p5fywo~9{{KURIZL<9nLK&vG}mHX37}QB zPB~HwuJU^pTKNjQTy&01x+VPlcCMx8NzTAHpn}I9mrVMCT`mS}diZH)%-1(j*S4;$ zjk_LJ^Yd$6*4Ni}len+1PkJr3wY0;3e$@S6*S22MUE>6l+?$)7|35qY|G#V&DYoW) zyv%{(2Nz^G%-W@>F(tLMbjOJmP7yDij2u52gt!>VNegftXh;!abWE_35o~2nKC;Bs zPh6vy(R5lw+S*ii)l}A0ccW>MDgXa;uGw@L$eOfuT96qRj|xXbQ!G+$`KO lLJ$GANhXg@*)(MeT6hRZwp?(TxLhponc60JUAc-b006rLXbJ!T literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/buckling/release/ENTER.mp3 b/assets/samples/kbsim/buckling/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4161eb5b5a06e44b898521001910fc8a899e6b97 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(O!0u@eJB1IQhpAD8cdNsJWwKRAMTpU$;i%u}XRY4H4Oo8(7U1`jT$sG$613NNQP zDf<+aKWGx;n>#r!R-J#tlW+XRccOPMHF3JMv{7i5SS;VaraL?rRxa4=;`P_%yI7U= z%L5E7<;70_-*`QLFUTM$c=ztzFXg{7I(~(7C`|nI{Cd&4U+UB5#kiNhC@?Si$H3td zzjdS1938QxSv@xlwFDAWde*3THecY0Hy1sgbn?wU)ejLx46Pfh3SaD&S~5kgq9JL= ziiDdnTM{&NXWx04@MF^N(|SeSzLPB8PW>WPu#ow(7H9JsCxNMh5ll)D=z|Gxd7&%a1<@w_`n?EeR^G2Z`{_2t8qOAZ_A__iJ5hBVsbg2J1k0SxigS90b8}z0e0wsNS%A6Vo5ZifE3E8n`=a-2 zFF!B3?oL7a+luX6u75J$KNiXSx$)V8pZ2_4++O!QSpS1{t$77go>x|MMEaCHw&yPe z>KSByee%?AX_@{PrVpP~6ndHevM>ELF-#{{Tk!uA<4<4sO&W#t|NowJ#GXMaa(ZBo z;csh+E$O9eR4dx&axJBiKIU`@Cfp(to}YDM+ydmbG> zbrx*ABr0=l!e$p8z04!0vnQIhT&@dVdDQx~-l_8?U#3}Ftj)RSXz~Bg#P~4R)?j5O zFGKUi4Y!yU%uqm-X zoKn@cTzGQAlGCwaNsAZ0oL)8M{;E~&@Avq-oN}BRpnE@bxB5K=+gWlBH@D6&GHB`y zW$H_L%;hE>^$Qe3mJEV#``zED6u$bnX<6B(4~()gH_rT7=>D+It^NhqOYU=dt=%ef zCvSm3S%|j#(sLGHHD_mZT86&S&p1%Et7YxNe>0knz594m(fHh*GwYLkE2;wB32B%7rCs7DAu`c)u^H|A$#xh zpflfJiEcD|cI3kEDc3({N=u#HxO?}N`9g2!3va45Q(+yUhqGq<`kETa z;F;3r8JN0Ub6c$H?gJZ-Pg62^tJg3?*B~Ka(z)3^8Rwn|GQOIzT2$}Sm*TfhQuW=N zc!N$c*E%{auALv+8Wl2u`=yx$i%6Y#j_0ZJ`Nw6wX7ZS(-dK?O<8o9ETs-lwX!=7vnJw27w#&J5zpafpv(3;{clk=Di0N-v zDk*Q;FI#T-qv2iXq0sd^cSZV&Y>Sm&wpM$$c~$0CPz*&j$Y;(p-PyyyRJlcN^}Gp; zWg7CC)9YAz{BBJN+qyIOFMsl?8;>PA0-k!io~-_vT(+{{sj8=N%wb6t%Vdef9}Q21 za`V<%y^G&dbn0zZ{{P3WhY$AuYFx_dzyYi)q&h`(4?RhB4_jUG^G%FXtyIV>sf!#+ z99=Okj17Vl1yrOm4Ly`Nwyctg6gjk@`-H1rq)>teqlqGmv(6%^3a-u0i(|Np9)vh=asCY>ou|0K)*^$J@h+a;F#D(L7$)5r4q|NAPv qe@*``@xLBa?-lm%`MPbDY){eBtc4fC>;Jo^7-(d{E4@{N82|t$+kA2W literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/buckling/release/GENERIC.mp3 b/assets/samples/kbsim/buckling/release/GENERIC.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6a80d56a2697284bb7817280120f64f5424eeb06 GIT binary patch literal 2924 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 JfBau=;9rsPzg7SM literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/press/BACKSPACE.mp3 b/assets/samples/kbsim/cream/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1a78cabe7cd4b9e69d4fb49ed9e9d03a49b67f52 GIT binary patch literal 2506 zcmd^>Yc$mB8o>Xf$PC61W?UQhX`;q037c_?j6}m`Y?0$WE>SL<9n%&gm+clJrcT;J zXc!E+)G!&!BpE77C8mZ5wdK-O|E;suKI>fidOn@sTF-jd`@A3CXRY6QpXUWdh5f*P z;t~@YyOopO3UL5{4gn_rP3U*1_zw5K1Na@b?m9@oyE&TdHNxQ_!+({eK+zHFwgUjl zw>nsIIM2Th{$Ez`AA;l{RAh!Sawd*B`+?RApi#lzW4LU4CR7heM%cO3jzFr8j1UB} z`YsnKEh#C{(`R?wGIqw$W=r&YDihr-m(I>Ff4TA@V$wKxeZWrxN!JuFInu}Zc)qq7 zzoQihG)@KAmB02UcW*IK08qq__eoOUmj$8$%^mtt6{btev}&E(YgLyeOF2@sy|BKU zEBM$%eQ)0WuGNlW6^;u9NyX6UFKPBr(`0RU|7W`mT%&c98q`)4mGf9MST zdV1FCjXgUa$Bvm;_0Jnvsc&g_RIkfO<~1QVUfMAPuqhJ)O*Pmh4Dw zaaUuY5_;{-8_?Wydoi?P84~Z_joXRu(W1c{LnX4W5f?tky!>Th=ccoLd?2 zbw`4t;(il~)|w2yGmo-UgF$8+Q6SG%Cr#ou4zJzzZRV=eopJJ|cUDhXIBO&SNLRl% zpa=3ML@nJ@P9uQFXbek~^mQr5z6gCZNnOOL)y4f1r0~^V0m+7k#2R3QW|%>5T+;j> zIbIzG%we98^sHclJD2I2`os`?)nntcaG}_$d;c=`DQ7WZCtMLtUjEz_kSC>9_pBp7 z?YPi1EZ!gU@9%AC*T3#JJTQpUwGKlK6?Kx?6aZ2@8a*%@QV7RnVWzhqUG-csZ4Td- zR!>);FmiQja^~FtX*a=sdR&#`G$3}WykfS5&#&cV)F&SQ=}CsNLsvO$C<0E*vzPNL zap&CuKQ^%jzks=1?U*A7>GnqPq|UG#eisw93Pc^qGrJ2N<-tzA)Fj8=t10@l`XTQ167Ch^x^wIPpjI(lTf6nnE(U(sbvk7e(t zjTPL>=CjRCbl&l~uVPzffHDu{X_pnw#vC#~)>o5}He(x;8DY|Os6^gubj_wbAbq5WSsD;cox-15z#5IjXpPAd+FclbT!11uW}3FKWt zU}@pkZKujSV@-DNId)=nt!-((#W)qwm#62M!!_}WfBIk1yiMC25e zLmdQ41VWSrmgK?={bA};jYTFltGa@h*2$LSf$#d&G=`<)op3iCY#M)ZDebIPIq;UL z*p4Xhft97!EI!S57(RhPOx6 z@_)A~EY&|Ma150;?0U#HqAwO#a6<~M#5TSeLQxdOYb+Oak@l`_AzzzUfcD*U3%ldB zmI>y#UOgS%y*jq1NL+-$r%>IaIpxN_KUZvqhy)4U$_~Fxxl3vd+eeX-;}v6a+%7~d zGCd{MrW;u{dO^{+r)&_kfF(>Sd-FdELpG*krta4X;y5@8)}>Gte&>nGE<^`&$b)WJ z9`wfBLs6j2>#LO9nl8chDm$`OAjOiS=+O(RA<}>*C58ycDZqGGtXy zw!WEbX<0t!=$-BLH!laGyd-@rvwzaLd&NR-cav*rHWAAwHMjE4QIwQQ=Jb;vVW^s! zJ>sn1OTa-?W@nTDe%jy+vSy_+H{+WjO^Pxz*K(6e5j)%Q{Fy!ucr=R{$dr)ptXz7@ zAV#(wHmmk}m+a?CpQ3v(P(cl(3dQE=o}it?rVwEiyCM>L4J-}rLMZE;oElk|mHAD26y^8y z@^F4c`{tA(r>P8~G$D_l!P~5cRrLbJ(&%jfkW69rNM8b=8%nmy9@AE~&Mzd~DcW{I z8(G33?JEIb7DVbAWEaq%l>t(TI85r*gKAgT!A!oCo&u^>5(<~j05{*;W~9QLlMt_5 z5H*)TFmqHH!Z4}{whJ8Ktimo@Utz|AU|-MGXhb*^eHx!f@%j7R^Q-YidQ=w~)2+t( h#k6QQrf1JJ(<0PNc%y~Ry_xVzbE|)TZR-D5{0U@-Rzv^* literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/press/ENTER.mp3 b/assets/samples/kbsim/cream/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e49e835fe517bad1ea9f51c4c29caaf8471b8aff GIT binary patch literal 2088 zcmd^=e>BtkAIHbVwbEs2nR4$JmlKGcfxiSP;|nlLDA12l6};GkERdZY%F#`>-&oi*wkgQY+Q^I=VYZ%L6{jWC zQlDD}$M+@pO$$sva8LknO;PieO2;fjjY_5RztJoG4>0#kk4kHfQxQF;J_e+BgMYJ8 zEVG5o1Hd{5)kXuBt*^>LAS%xH#~lde%}u4$=7-rwKyh*kM|A`(pG^n7 zEE34oeom4wx961x#3hKsIzTHLtQu_?8xMCHMZ?$YQ>Uie<)#iNIlVnT^tv^<(JVas zgNJJ^MsS-qweB@ET>weo9u6Sy3?ZU?bwW3pipxV&}%Sewb5jSRib z(nY*i$=F8-!NxPvm`WXE_E>2qw4dnAlrv}ngS&MWCv=~{b8EQnO<3n4F0h)`wg;rD zp6SyNN5>G5TrnGN5ggfD5dcbZOV)9|T)Vr}zO0C465u%;5(TUfOLrEh{~VY*+E`5+ z&m%s8*0-&^st7SeRJ9T$;Q;N!l^M(&l%q=S_Hi-F4OG%PrRoxE(ZTuy?q8KfXZL16@|<<2~^e_-tfv_FR@?Kz8N z#2fn6ztrCz`X&n=hR8NSVmdF)*Bj1MBP+v>1{j~7Im!6;<{1|I5A@*RU>{rnDxp|v zk|E9NHU{~wcPOU>oXWv#0Z;8Clfc>g4;9*YzvT8~d)HKVSfIR$7K#dYUA@)!hmlEf z;F~zgedE>$GshH20t|)Ty^{CA>{9iMmk)iw6WXNbT31bqPhJ`@jt_gy;ZwYeb9Plh zr(8P$R?SjCVr>stAw3ATIodLaGCg01w&v~evUYA03@v7Fcv-^Kk`}LzhNnPhN@}#PNJ?F%makt}B(gE=;IMp%-eLm=IXYzE0 zv89z@L2^CVMErgH@E8iwE{QOJYgowcEjB+%K6HD(Rj|dm!#dUOzZmHbjS%I_ebegB z{7zR?zladZ+n#QgKCp#8IKMs2qkQ!@jA^sRrx2lY$qLI9V}7bnwX4mZ{L<8YspN7QFUi$PGtjeE*Tde=%frXokxa-^^qf}GcFF!un#rW; zbEZ!1CudmfzT@^gDVUM8;%^Y88PUV_&Atv8A8!>^fUH` zT4r^nm`nsLD)-gMWoIcN`h@B7u&Qkl74h6h(8+i8h&99jN)k_2=WQ1$4>Ah;bnf&| zVECA~unXNWVofHqt4QPCOzls6^vdaueCj$6OL;5G#C0bbTl%%EL!Y)dzQ|H9>Et-<_N`>d^-mTkuvm`m* za{9ZSyfZw-e8)#8Gj8F?Ok_P4lnSCdX{WNy(?9v+%?%7wO~jRrB_v7%Vw?~qgCl+H gw&kNYyHW9lAejS3`EBnXZomlgXP|%YNWwqLpPVvxZ~y=R literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/press/GENERIC_R0.mp3 b/assets/samples/kbsim/cream/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..62c7d847740d8b453f3d2c4a6a2eb19f604bfd89 GIT binary patch literal 2088 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 E0QW1D`2YX_ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/press/GENERIC_R3.mp3 b/assets/samples/kbsim/cream/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6e647c5235e3003a29531ceede0c3fee455e1ee9 GIT binary patch literal 2088 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 UBs4OM{C;$Ke literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/release/BACKSPACE.mp3 b/assets/samples/kbsim/cream/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3ad32b9a7e401eb1634a05949b65674e2d22357a GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oznz=?sO0pyOHx`q2;5+jBF4~`&#hl>rjBr^zS8f*MFY+%scvXXU@mzRm($=CCI z3w-9bzW%M|(BjC^Q^ZmH|CQz<50@U<+Y1AC#(6ruivd+r)1++|J%{z{r~^}-o5+AIeGv84?eT15*Zj- z>^nN%RWeDY-v#QkP3CZ(px|WupXGA8XHpxdKmZ#a!`}SA0yL$Ke z<@1g$t@C-UvuXE_yN9iA`h}d2`Im41vt*mU-g=46zI~flR?YtZyZ-Nj%~!Xb==Nv` z&hy&DV#%;_nQmba$FZH4TpL_(dF#%-bT8<5h6~#P4=0YfS4IB+o^(W%K_qgr_ue)J zsq{@N3fm;_XLp@-dplikc#HF674Onl1h?3 zMy^kmt?lD?S+VHyl(QYvWDXfWKHMQ1M$%Mo$Dhed}RMIvRKrOVVOZgA~T^Z9&I zB&W|;rpA-sD{9g+hLR13+NZ2m><&7m@yVsf;&JCBQ<-?3%Twx)TSd3ZFNl+WZ?9Qo)=`t z=JHKFKtLh9sgW5xg2waZpC}E3Kua6Aq`%E~>8XJ%UE=2EUf~PwMxXsM=5<;%QfRFoa>3D8I&) zm6A*%0_+*$A)pwtWssOTUHgr#cGreY%l5V@RXm=t$JMpNGi~8C?x64He?A=fY&F?o z$CMd!LYY!OZF0XM=*gY7uyM|_^Uf96z)neXxt+Pgm-PhMW#X!Yy)i+e}D*eGPUnwOp~lwMdZp*AUZ(v>3f^Ed8H z&e+n{n71jFon<*sF{eE9?}fgH0?*2+N%o3nhZo)6;=sV=7uF=~bdFWO>xV%HPwJl& zQD1iQbZ>ds#I!D1ds=Ml&1~J&qYKLBtjx1;4$Kn&x=~T{s;h}!gbpWH)50klt~%HI zpSJqeZHPGEtCSro(ls&fmWYLmrc>*bR^Q5yrTXtQ(%Lv?OH!LJo2<$@gEdJ-V7qX`SNR2t~&)OPMq>(w!m*8 z&!^{9cc!~6Sjnrv{?@tw@=u`|o{K~>omIArU*+aI*HJMzl7ESV{)%2=-6`bS(sQi{Jva1wu8qkx1cbK{2qHwBGdo=ax+&Qlc? zm}V8QlTmi_=FQKp%!zcJQrRk2m@1aKqEk_+;XuE^@AmZkscv&JU1wA%{7qC$Oicd& TpOc%LTUtU#2VPyR8vXzP9M6Y} literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/release/ENTER.mp3 b/assets/samples/kbsim/cream/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..defbcbb0c850f80b51cfa550c6cf5b6263067830 GIT binary patch literal 2088 zcmeH|=~EI26u>c!HOo9OucQD)Em_tBFR}#05ETGIi}*U2TlDooPSptbf7oZ|2RLdGEt}^L`(m;uA*-_$S2Z z@E_J{8f&2f0H~S+Fzdirk9+H(SdXO&d>}mT8Dob3SJg17P6^x2!NS$4#I51!J*DB=T&@TcqrjB0CGp%|LBSm!+gZVuFH~ z>`Qiz0u$lMuQS3(E0nk8oXs6eEJ3OJ=O7CWs){j~5m^t*TxeBDH^B5%z>;T@K<&je z90syk63{GCW9I%mr9u$MUGbg=_z<;-xIriNSKcWfI7~wqlN6tw zdy|e;F4{YX+rj{O=UD!j=H>d87qPP;f23?JHH`!D<@hx6@2_DdrdA?k3NeCE5;z z4+E-47O8MMYX>XMjSwzr2kxz*yRI1O57?SI8MGCE#IuZCqVEJf*|r}Ds8^5H8ObMj z5U5&M9hZ>%*)sF%q0<$abnB-bLg0r%F=&oV(Lms=VRVd@^GtN+(gwV_~|iv{go6pdAbvx z!eP?)_)zHZ_^fAi67o$?QpzdDKT{|XG zRDefX+*%N9$Cuqr9E-~QIG0?)M}=ZGzPFX_{OGFF+0^G#<72eLok2#mk8+KFA588s zioP+Kn%_l(8~U6M2_{m!w2G-5!-alRS)K)Jb*uY+5#ig{M;G3Vva5o>7&;69#g$pC z8M*|sfnn2yeCbc)s6FnDlPCM+&>=yMX`WMVyWc4asQ!FTztBiNS*CL>F<8HvUVzBY z>ng;R9C*SKKgLmx6{(rLaIEk*pywV9(^aa%grzoH>O{?eCGL1HCNNVfXjhf}Hcf`W z3PqRL56Hgn@8+zKYiegoQ^6JHn^F!oPd^MrdpHGQkb#0br>!#SS8IquD^P%zFh%wUJx;u337mpxwMIjcugZkA~JkXN#v- zR{BII8^W?gVJ9B*^4j)9bXyZA+fRvB)rxWqXt2wEp;xtW85VBT#@%hPG?K}ClBFrR z8CF0U!rCyJi~{Qp!n!8J!^IJB)c5=XEew5=w15b?NpFe$Vkicnf1@0Pu(E5{ww{a# zS8odYmHQwfzohLZ8ZbtL%5*~XPIL#La1#x#Ayoo}8PU?F@>oRqmSBPorP zY^(0Q=d?+`fy_G3W^UPn;cMQT$nWv_Ky_32S08sIimZpA R%qpt8=T}L8gF39pj;F8e zld8xL2IC=>fJo#QBvjd|B$-Smse~ypV5lyeT;mS_OO>+n7bTKBm5ZumvJ*J{%4s-0 zZ;cr^LnZ?N5}Xl>+j^B!CeMNKocgGGD>;OVXRh%zjeSukX09ZwueCOf(5nWL6RaXl zYCf9f*wA}|FO*E?MWdirXVj4F*MCUu+4?d5*BlTvf&7^?F>I)VJNZX#Ipqs~U& zDFD!fBs?OTwYz#P%jq$vYi4|17@O(3{}>^6vkATYK*q-YmPf80i7@w6grImwqAT%q zU>=5sgq9t1PIh|&(=3D9g}BwggM%ZMZ@qyj_3Oxzyi<=04ZO$AWh#7G2u{TdUsJg5 ziH_A(n}f=~;l;NzcCkG0LRO5;y2nu=*60_z!!x{@WJ{kw7OAzO%VD5<5dI7VM`zy@ za)=?0RWZR*>@<`2fIzn34Ei5C>3^JJkVce#__Kw@t0@M>6Dw`~6_Y~H;oFCs_BfWp zp^X2Vb~*q!?huvw8>5Z&)KCuYMoA6Ln*#~yEN^=BoI_eveJOjr?gUjeXuBzA(+IG% zvnfAl06~sG-pOltvop+6-7`(H=NbfhiV+F%=$SN%@_Q`j!PMNp_!jF%k*;qFhuX$> z^J|`8P?1PIXJJ=Kxl*ZRFD1LJj`8@-Sf;nz&Gi#^ zN9i$XwU-IrFDbXj7&tiv(-pg5bi>GuY+4P+sprXUGr3v+j`{Hq-F6p)eZH%DMFyf^ z;hPNvQYBT#&Dg)BVsTHbYUcLDqB)1u&bD)Jta>o6ob&)f86am;_6{v}k3tI0Wt$%` zRav5=mDi7sT9M5BPI>t-jZUX$87MKVEhV+@edn+<645ELd;9inXW1~V&~8J0bT0ot_;X*g*los`o)nfkLj14=y59*umw3U^SR%-zt(EmN-N* W+4ls3Va&;KRp-Y4KBnTImA?U1rprqJ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/cream/release/SPACE.mp3 b/assets/samples/kbsim/cream/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..777c5ac3a8ef3e7f6a5663327f19e55f0c5636d5 GIT binary patch literal 2088 zcmd^={WsGK7{I^S*4EZ-7F~DNq-`;jdAUR>uQRXF%M8 zycCYet*NA1g)TQYDk5%?BCpYi?R(WZ-5>5b{(*Zx=RD^*=Xrj3p67gic)&T40{Ax` zF_El=+VX{f007(=a9jk=Vl*rUxEKqw?7f|Q+^p7HP$(KL-&fM%5VaW20KoaWN1Vai zv)>#4mkfRrq}^d;9%Vsmahu<(y=>bSk~8Om(wKTcyn3?#CZ)Z764y zDEauA#B#whRG?4ts5GOTA&{_odtZaY;MlDNXF4xhlze6HZ2h>}VUjZo&T!BeO@kG@ zf!F>|=Q4?iZ#pzP)Z8;Jx<{o9 zYyCW0;W>PCHgXj>f5WR@Jw67iZ=|!pTdYlUp&7!*N%Y{sxT|>yy@P*Mj(r-iP5&X2 zint3p!`!g|pd~k69i{Csyhc55N0TyS1durnE-6y*yEJJ0*oW z!;@c=MuX~TSr96id9(iKJ2AwQ6T3cP-< zw=l*w?DKSnVgTLY)7bw>;as}(5o9n_j})?0gfnqB7ZK7e*51}v?X(PjNSf?8_5@Uo z%u7!MZIcu0JWEfZ@(r1mqh4&tM`)w=;E-Y812-#zIfV2d6o>mx78q3q z#=Pv`ho-YV_TxxVNdjlib6Kv?4=7tRLlBRo6i8i5&4gHna?B-8_SKLsfFbjp%83WN znypBx3~bR(ACn~^%|uv_!}glyns=?1E!chQi{iX&1UXm!q*)4(58VjaVW)R{jtNJa z+zk&1B||U6Jx}E%H4poE2AhVO)g9jg+WrBi92~64x5BgHrm0sRMNw#t+&9#4?<{QQ z4V|1egj~C4pp!;RlhqGYGj_y_HblYWEMPebzeA#Zbp*>vdd`Y_%i1bD`flPCO=7R`L=;EvTNi|J(|$QXaE?}v;=g{)~NLNaCU2%1dXo_II+^4kA3aDZ5U}|W4>=W{yy8MKoZO2QV&1BI{^H0ia z*iDY}7^wlS?3q{sNX4#itf^bs11%029_{3iHWRB{nD_0khU_?c>+*lxPw5h*Rqvu$ zA^Gx~7l{|D3ePtX+7hokM5g b9LN|IKVPf*iq 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/press/GENERIC_R1.mp3 b/assets/samples/kbsim/holypanda/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2a23c63aff2e2460d6e2bbc87ea7847dc49428ea GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(O!Gw-Wu8G4O$)zs zJMX!)%?~_LyyEernY+Kgm&Uf-I@hI@}W>4juUoraLZXO)vTU93dy#5!ix^>gt=|D1U<7!^CHg9X@oJ~_NN8Os}c8i5+vR|x_+|TkT zYooNIr-Hso?F;<6b;^37fB%0^I>Of=bTK)6Z)=0l%(X8{dsVCqB!Ygh2!6T2(O_}r z$irT3#oZh3aCX;-CxZ&u%=?5JB+etWmZRQvk+M*Ai&+y76tUN?LFkNH1}=ho+DuDrIpL|R%} zqw?)uy}b!5bgy)pZdB>eGJCgNQ}l=gPoW1B=lmQ_5dn_fo>!u-R*OxX_EK+-*oqfN z6;>)Ri8e9m&5r4K$2HN_fXT}1kb6QGf5B?66(vDFDw534G@V1nH}0z(^(#W>u2cv=LH?HR~ElgHGM7Z%DcJZ<(U~_Rt z+_fOj@XJQGu&7;8PpWKLEkE>zt@?D>R5on?9BG}MI_vVXUYV)|CEeL_!KG0(y~lY` zaO%guN|K>PJ7%?|&wQ3P?~i7n%dA^RTyE`AEt=Xj+cv`AF!CZOhRhm7J=<-2HiUmV zwMEsojqk_$q^r{x&z$w<^jX<9vn^^SmRbvC?c>%2`+a|NyZl(zF7tO=r^ndDbG3J$ zH`^b%E-EYGxWw0Nwf<+}JpbET`6OqYU=Vv!{V``!%U+c@E|&coCYuD7N}geMcpjq1 z^mpZ|q{F?5?V8nV`MmDWNd2~GQQI^V!?~&%c`t0D8x=lSOb&eTPU+{%hZ8f7-stR{ zmVLNKV69#0k<4o%TZ_y0>6o3nx^CN!o2NNLQ!`H;RNq^|y?udiT4|}e_VpA0+INM0 z-}!WUY1XsY_^);9^GcK7{qDWCbmvk%uOp{tpNv>tRJhw%Xw{SgrnVi^WKLb%RR8~n z1+XyRmU5prXZaXu`@_N@~*<&Jy$HniVqLX4cloX?M0w zo4PQKMdz5-X5IdXkgJc5oYiuA8L~9RTC`o_(PXowtFu-yIW|m9b~EA$@kvnhxw(Gh zy1<#cL?dVJTM+a@v6TiHB<4z#(g&Ds2Bi$Q?H#S1qbt@ze#ZT+Zas4eQg;6;#@uzOQv zGS9heVD=>M m)`o-Sa#5FcO?h}PTrd(6Gx>kiwbto=H@A>6yn+fHX#fBhl1vK# literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/press/GENERIC_R2.mp3 b/assets/samples/kbsim/holypanda/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b31d2fb8c6044d091c127610e1d509655d854c62 GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/press/GENERIC_R4.mp3 b/assets/samples/kbsim/holypanda/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..96297b3e845f855613559ef8deb858c78aafd7da GIT binary patch literal 2088 zcmd^=c~Fzr8pgknMZlmbCNV(dvV=q-NCH9up-Bw%CW=5d8nhY%0Z~9LEk-JsD4Q&$ zNyuUVF$JT7Tt~K%r5G4#*%Z*mQYl&x60q2>xNv)-O&|o2c@=tqsJRes>`!SZo`B9advyse;R(cu9Hz zCZ&y!0sAo0Km-CD`NUGKNQ946IFccRjwfGI_8*WIQaQvkGo|@hiODCa>m+mP(WNT^BrSeWI3}KC|?#Z?TWo z1E-W3Tj&G_D|%s#_|AtUAKuInQdzSlQY&08kIr^?22`fEhK``4pwFBi?QrvAdA))F zFQpYLd41^cHQB=2-Tv6a`gu*m{JhubfXs?ZR}ZI$davwfy>9}+-({AUxd>WjAUM~7 zGzW$Dfg?#;42og{xT@+#UBntz{f|`0 zp&`EUzuweQ9kna*U0Ag76ik?rfcuF!RwP--orC`K~j9 zY5uJ=%?y4SWQsbt5o^XI{o?)pr_wM@c<2Fen2`J4ID#z=vqw3x*^s6)?9beP zy=H^jL6QT6^paYobM?&HX#@6nH-cp*}R`>f$g|sh`=RO(1Y=0OQ;Jqojgu z`T%v!TWQ>8B<4uYangXITeB-?!y%k}8@1HEjxyXI?rFZFb#$#V2N!VoZ<><^w$xS^ zkkK%f>Trnp;{pdbAm^a}i7)gQwKfJ$almqK!JV{2C&@xsft%n)wcjf5;gU`pT%OU* zs;*3{z-h`WC8N*!|CJGJS_~4V38rr+O$bb(Q6RXctf=%nxmh6S#K9e%P_{p$KHFJW z#=frS_V7D=iYruwMltJ(7uvS_$$PLIrYEL9H?1tLM%c#n(b!H?t$K;qFRKu6gguOm z!e7)m?U|i-(vYycy&|_(q+PuN`tK_ve0+fKBK=n)29)B}6M+6P?A= hjg8GenIGT8a;AB9T)}r1MNehVJ&phS2L*o_{tGHDI1&H= literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/press/SPACE.mp3 b/assets/samples/kbsim/holypanda/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..326dcca540da4c989826e61192a57cd2e6cbbcb9 GIT binary patch literal 5850 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/release/ENTER.mp3 b/assets/samples/kbsim/holypanda/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ca6618a00289a2614599b65509069bc25576b49b GIT binary patch literal 1252 zcmezWd%_V0bl{nnmJbx;2Vy1$29_rb4WxqqBmMOQaS{iG%|#xTG|p6UKl&fxFltGK>Esay(oq&_w?iL95MLk zt>e3OD@*E>wYlXR&Fiito-TU$yCNtk$W8u7UHsjUB}T8ox%j8$@rx#-9|VbLZ{*()0s96TQ6V5gFpp|`2Sk3;EF z+TDy0Y3+vRi-QeTW`9nM&QSPSx?L!;>bXRZxyJUSKS{bG-QkTHD*a+%Nq^c?_D(-{ zeXGv&kj>#!_4A)CDqJO*d%H4h%B{64&((=<*S!8($6#xizii5y`swfByep`6_A( zgQUQLMG_X8I*vMLd0ia}I+?gcG+YFXeMZrb~yY8&Firca9lH+FX zk`JL9lpe;7%oYizHGX7_H-{q1&ct+eUs8{5uAgs(rM`}$A)>j;xtX|30|1nLqOouX_guZ8L9vOzdG1>T8E8Ore~%zD_j4K1&vq!PBAbjIxS*gkn!mhhlB|{ J!>^(x007O*_=5ld literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/release/GENERIC.mp3 b/assets/samples/kbsim/holypanda/release/GENERIC.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3897e0da52a6b91b4a73720d1cb5de9fd24aa4c9 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oyky%PgN1IQg)W?D^zNsJWwKRAMfKm6tk`QE^_ch#HkMxUG+7z}w-`@Mf`@7(cq zx~Wv-<6|rj7sLp(ZMsonWaB4xsGvvx!4pnKoswhg`&$#2m9Dt?`2C}a?_c_V_!zf7 zy?_7b@`*Ck zWO=ThdNyo{+$OQsn~f1Cg&COb7%G6^4KNaz5C1>RAp1}L14{zKoAdww^9Vlw@#Ebz zyQ_Z3-<-=>7Dr`hgGZ_ua$St zGI*wP@JQR%iD?_0*`4pIC#~Xs$;LP7nQdnA*?q+etR{Ia7k%S;rZ(Bouc9)+dBei_ z-`1vl_FwosN~m?U!J)OyZ}UIS|I;6mc||v(@Z_3AZ_cgObCZFoZIko-U&beeW+nB; z{IHJzCBJ{?MgLE1N}qaHNj(0+EVJHifh#UDx*Ar_mYkK4(ZMR0({gb!dz1e(zIL{K zua;MQFshvPNL5`hi1Fd?4ENrm2f30GUuL&|y*y9nXF#36|KF32$TbLG&9t67jlp=P zaT4bl!<}vyY_wKge!l4Crl)74QkR!)ujKfhDZRxw{OsIiKD!m%cAbB}cFxV&)rC%n z-zzt&WSpOD_l3VC{b@Phl@&?v|K0mOD|mKYzSX8FFR#7-Yh1=7aOVE&`=6$~oH=vm z-f7HoOa3%4aL?_`$_jY#@kogUFAEc6nw-K65xoQkiw&MTXYhy|Vs3uDmh|0`!RwWB}LcDafV6E0VD*U0f?SS>n)_zg%BdmwvGbadlUnt(uv9J+5YN zTiBsb!t#1Y_HJ6-I;pZpC75|K)8()%)+f76b8CB@7IS@4ea*0)xxKvI*eyt7drxHh zWakuH114sX5JtmGJH2P_x*E>xXegH1+%7Y}b>uf(+<5hY0zls+04dwyCr|Z z<~uqISTr_)Vo0e$L~ya;nZP!)`ZR4wCQPsB5nZ-VtyM#j^`-s4FwYrT)nNK9r z*0iL5&ug3f!b#%yis$?VA9fft>ngns&)l2I@#p+p-8<9w+i$=9Q}WZy&0=%kE~|Vw zrIDkJR zXKMXRrNeoXM3d5FF9#m>&ee>Hk_9b!Ob#q_Zk}jj2@z^kP^k)II}|XbW(rFK$CMjQ zEG`j!EekdCgjy6eB}1e-R!!vkp3T``%6>d+;ls<|cSjYQgP1nc$|IKfI`V$H-bwi;5 kLjWd0Ga3{_mdpnj7?%J`6a@wblLlbTLo?e(4JJJV05#?rL;wH) literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/holypanda/release/SPACE.mp3 b/assets/samples/kbsim/holypanda/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..556c2a0af04c5f1b36c2a8c81b6c3437b5d002cd GIT binary patch literal 1252 zcmezWd%_V0bl{nnmJbx;2Vy1$29_rb4WxqqBmsP=6-_@j0{dYrYx1y7C4$VFSIvaj#=r) z_68LO1(t&e9xXOZ27HIta)c>%BreF1Vry#TcfOMI@qx|Eo(onYJpFPut7_(mvw38F zt^WP~PvGNI*_WnNe0<{TT=5ae{uB56|9|)QkMDio``#;P%2Lh$%fIjb{$9?e6UeKt zzF+^#zJCAb+DG4iEdT!h(v<68>i*f@V_^HkAp8IF!~O$|SKn<6H~@?-7RIu^?b5qb zz1U>T7W6A$slEB&lY(ZS3&S5N`piJ?q;W* z4VhwZ56QC4oG{Vo0{^*3C9Arx7kpp4na}*(;?<{D$<&MQ=zY~REzt|EdSphHa3qh^WTRy%f*Xv zzh7-LH|)W$&qkJyl=hx~UvIsn?zBqo)7E$2xp>^KHrpke820x`hyYXEpUlMRsVD2> zuNB)0rfM;@Ou8{`$|eQonK8u&-?!hD%PDR=dR*fF?@32Q8YH(S%ggpKFez?6uVOIk zsPv7f>koYO^YPkOR@^Zr#? zc~_S%-TeP+s=?_^Pj>2g|K)dExm&X=BI|AYve@aWf9I~{b-pUQT=U=7UC}moqoSg% z)@t88%vJiRRX)TI@te@jlg`Dgc@l}iIxmYPMc z_634$r3D+xzs^14aET-6^0jN%B9kYYP7B!Wo18II_9Ww@Ektj_WysTQsHv3z-Q_^{mz|tmnvK;miR&m Kp6yrB1^@t^qy--U literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/press/BACKSPACE.mp3 b/assets/samples/kbsim/inkblack/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..956ad6cd9a75466665e1a1e99ba6c2b7ceb1d7f7 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oz*#EF5S0pyOR&+{+ABt{DT9~?ovty`SG{}p?gI@8`AiH9N{o%|?d@%#uw~!>7(&nN4X|ojp~Nf^VH+;% zekx_D&{naicfS}fD6G5~TeQA-;*)T_;@F(FhAzi=EqA+wlOZ>GfB1;cT<`kyEANx$ z1|O-8s9TqI7QJNpVs+o-X!xh^NquvFwmx@VR(-gSrd3+5QPYWAo%fXQ{_#(RKiZUf zYyVHb7&bNP+4i~KJ5O(3xO(67@~2zh94`3#-SJBH$NKfsZ*%Lx$?m(gMRv?}`{?uE z^~)rZPx2po`C;X0HZP#$&*L5X>}Rz?GSa~5ib-M0B#&j!b{u5zxRRWrdeSvG+(gGU zB2==MkyW~Sbridn{iYNbnPdXySAZZ%w{&P(OH^&y$@(mvt{1332{FXDk z(Rf#NZ`=gSWqngF{Q2S*-4Ye|Kb%?Sz`P7oPUDJ8f3v)=-2EZOcW0ecRne(!=33wO zKm0eP+jVDF>G%4|sOkFWdG_!AQ|_Nzc0}rn=ii>2$4mGB-~If3{Qdv`Zgqy_u5ruI zem(!!JFCB`zn=duKmY&lp=pwvH_!0-+r?SqcD3TkF0U4i7so}-US4k~oBQrfsR}Sd z&n`S>WRc0Rb<&1~oV!%QCQQ}2F_ra;oX|&~@IO332E5M%TWq}_@G`9FV>`L1$38Ss zGI-q#{>xjMX1-?kQGe&{^WwL z;%Bb(H|wPpDzvVLu93V`Jo9GU;dN0D?mm0?tjf~wuHB-n^joWcsvK`uTd%%0YAt)= z+P9zgT$Z@I@vGT`YcbEme_hE5|9iC8?D2nYW0(Hzx3=HYe7Ps+>^g^OUR}3285o3o zPk9~sCh@^6A%o|Y(}GFd5-b)0hHL_gCv%qvo6Bj3Wd=@J+Pl6)W##42Jfr1H!7feOR|tMwqjiEFSKcfiMD6m)HVA)EoO4O)hy!blsLy? zA>*W9-mInkhn7dGtLqe=aboZGWf3%xH}*GJx%klPDu;y@;EYgR^CyUl=drvOtYeU86Pzz+Gjj; z{KBI0BxANSudh&7lcL(9Zmo%PI_AWvSSaxNgeIjd+mR^FeT8GKgx=Amr#)MW-u2%R z&U&VH&9QysD+dN=+;^et!L`2hxaL5Cgokp|GV~Htk9e{3B(9N(3R1i(**!-= zX8YPm7A*-8lh6mkPYz3PbP9-@cux@a`1D3BQg&*uQslw3Nppn)qtq-LE~zSLa?WrI z6Mm>zGg+_I@=J7^0Vsw{801Z73-|1uaY#~sQAtYg9_N5#q7GkWebT)&Gi^L3d|MW* z5gj2hF>S(R={$|aCw6QP`5UlR`<&z>tv*L(izyukt}R=?-oo0Z;$`((wcaucjrycRLOq7^Z#1bane{!F~PK985p^n{)1TOfhJelS_TlbQxa8pK>sq2(V#zz4j zqLLaV3ndkHEOCi6I;<)&69OD#ZQZr>5X(|W@~ecS94pl>C*o&_S81FwK_$nJR(w7k_G_>=0&7_R*sC& XFex%kSkTDaHc$JS2E3MBMMnStzNKiB literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/press/ENTER.mp3 b/assets/samples/kbsim/inkblack/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bda40d9d6de58aef7add3a8bb74b8f4501e42985 GIT binary patch literal 2088 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 LVAUuX3?TpjJKL<} literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/press/GENERIC_R1.mp3 b/assets/samples/kbsim/inkblack/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..198190b8a1e4e04b19d3583f11a5e71a1f89b30f GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(OzH%87xY0pyN70#n3c5+jBF4~`&_wVqmArZ+Gx)XAsW0 zvxqJi=;qupsbA$)SKoVQ#UrN`CitZm&3^tSqG!r3`{=peA6-kN9_P;t*jlx@oOCQVE);O+e3_8AMeiZ8s2T*F#un1;oSQzEl%iVj$SZAkV@g@~l zPk}XzX|dT;q!?xGJ8mpw3SlrjBC;@`xclKdO*Mf>d_pG9|9?+9BF`XoaH0O*_6DX< zBaPCQnXe9>l2CrrI+^)lC-LNvofnx`-ZsB<*dwH{j{X+Ww%zZ{LWT$^9$R$!@WT~Q9pu=9j`6eaI`cw^o`o{ z_YrBcOV&vHcSSLmWW;?a-W4DCp1V*##&(aCb90RC;=B7R>fLjyw`*$_${Fiz-TBbA zQNALv)h6DfI?v;hi$GB3Nron#I2IvIGre8jMGdYAshuI$r|~W`&P+9YVB*0kz~#nu zYgw2}FUJzETkCG^w+oryq}8lHbH#@sMz^M3%dTSf%nvhP9xMtrZ%T?;RQ%A!WOeg1 zt@;o9-tYKvzdW;GVv0wzN?Cc_E47mg*Pqk#l$oD?ElA_7ea*X~O}0DZH9hUSU++0{ zGxy!~$CsCMz3TUlQ4sKS*_Ad~^5C(&z-aAS5@;OJhR{C=H;d;YV-NUC0<*!>s!x?W7~E%m)Shq zQLOXJL}}(^55LqkTPH1Q-LYp=i|u@)1w3v+ntKXM-xVFZ>vd_~o9{JMs~3kjNlciS zs9|bSVl0xeOi=M2``YQ*7guW|waZK2HEAZ#Cx6Jmr2X8gbGYUJw@?hacjtN3B zDviuej;0+4CoU3N@}SXBEA^<;q7)6)o5dO`iAE;*CM#QJDmv6vgarA9I;VETv#Ojt za&5|_^v~tKy-Siq9UYrALhPifcCU0=mD_n_olJfTwD7Ld z%O5qDtax#?eWix&Rg-_Asukt!sS1-qPoI3L>nH1_^oJ|yoA`=n&x)76YT3;_(aJC} zK$MrkfUQ)mQ|69|klatF<3ba3lNQg2T>kZMSG-2V+pvdS7K_)f6g5v5b&Z{|cFGv*7f&f3p6@^LUQm^1)up8perBe=M@ e9&7k^|39+s6`k=Z1 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/press/GENERIC_R2.mp3 b/assets/samples/kbsim/inkblack/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a8add3c685fb66d829d392c8ada6cef1caa9118b GIT binary patch literal 2088 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 GhX4Td*qaXk literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/press/SPACE.mp3 b/assets/samples/kbsim/inkblack/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..67f26943f55a9da837f0e350187d37dcf7e27e52 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(OzH(}{th0pyOw!9qbWiIGD82S*T(uetjc!3OI;TUPuxp1=@fa z4;i#KHnS*9ITqOPl;@M+9+~cK8w!6|opAhcS%+Dy|5ccY^OxT{&Yhhtz$^T%zsE^t zx_$T4Uk%fwIOnV`*S)>rk>fk&j>~U@EQ9slgl(C)Hu?ASn|tnWX`8Y2>4hh8iXtW9 z*}JQ*Fzank=Z$(-T7D++cYWJenIidix&AF%_MVcOax6cz=Y7ThfB)xyZ0$S!a><9o z9}eHDvHQ5H>|W~q_VQC)o2I92-4*-lTGYS#!snob`TX3!mj}=P{p2KCo;A%mQAo+j zM0IEVu4@+<4$b!A_|Ot@knxO*%_CQS-ydf$xj8T$ZagmZ|M#RLq6|`VrLBMNVc<43 zSW$2Efl)a_-K13EkRn57i@=NzFCQjkCwOfU^A{-VUN7r6Q6Q>nb|;J5Gfy9rzp!r2aU}h96@KoZtyKW9mLb{G&~7z-)zfo)Ai5)rmMwy>{*+>$TIY9uGc~1cTZgwuGE*|Wp=ozB{OMD zr=rU3;?*3|%S2}~)Cu%BbT{j8RMv@vYDYh6h>GH@rW^Ajx%k8yk$Q1pT-<{dxl07YZ`?tBcQ*@y?f= zr68jh7xO*LQik>NjjQwA8oo<%s?P{_5B|SO>hh8F0@Y{z%ddP{zvRlf%;QFSQOnJa zZ<)6;L39n1$^?&Gsq;&mr^Nr4{dV}7$%H^wC$33PzBAi(`xPwY@7T-dc2i@5ljrUz zIR%p&I)Tp17MCpMRd#J?3|Vr>95*#>EeVbRcF`}TpqZAVo0s|I_q@BH5;x+Fff=j0Bas2BTGXepRlj9tSk+q zwzzt5@?H3qRGg;7F#*shza)zq|$uC0^ha9w-CQ_Vl=@$0p#?d>-z`MIjk zJF?C1@Fa7Ix2$)T&-*-o7Nh(5{~A}SA5T*8m=txzqf>I;|9`iCpRc-RF(JHZ6};wI JH43nX007r0qa^?U literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/release/BACKSPACE.mp3 b/assets/samples/kbsim/inkblack/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..07755fa4e46b9418990418dcc073ceb85794557a GIT binary patch literal 2506 zcmezWd%_V0bl{nnmJbx;2VzzR2F_Cq#+V=t3z&%ooWTPAV*xapY61*SicU?M*E|0Rc(gij?OZ;o!htKJ|N4)px&}^% z0}LV-n_FjQl?E|*c`SAI5MtI){I81?w~N;{AN$SErpql-+pufT z>94c?t}k4?Y5J_Mzn{jh-)Y_Rb<(~w-yhDivwnT<=+k@W)^kj%zFR21G&%as>jm7) zyt=g(UrnhjZw(Rf63PC2wkcCQ@6bJGC3e@`Mg5tOLehA%0aK|o;u4P zY)!W83EHrOd4kJ&MNO`Ayivb<$7RsX!%E4M0HuGyXIx?EQ*i%)j>>6_KZ)fyJA zjPZP){n1kFe*4_1i>j0xdXoB-Eiz~C7i@dyk-2o!%hl(0b}(54O>0!q$p5n_t7#tR z(rcU68oQP;H9yVIvG<7CYF>KVOSUlUZ~wrrB$>hbq{zIM(3 zU-thtIIt-gv`*U6>1yQ3x$UXz&g8NO28Ya=+NP}tP-67^*z4+S>E~ zXPa`8Xc>PVD25ChWal>9?wrHG>}#z2eA5R8(TS#lQm-;jJzqHOslVn*qbDXBRjqZ0 zIm(?w)Rlhg9M>+-j^Em=dpqpK)10j*)J*m+yx(y9j%rY)?&(c)Z=Bll&aB|n^ZWyA zzJ6M>z=t(x#b)8z*<#YOK|C{$-YS**<^;_p`43n~+)#v>4pg{Fo!``SXH$ygu z&%LvI#%I01dd6Gjt&J{ie4#dzgMrI?;f6kCg(rb#jRsz}`~ixAT}!qW33X3mlGu4V z$8BOo>p>UoV}=WCnNM&E_|0D^$Lz_{=%UKbdBri< zl4nzvOyc%j~fD~G-*{#uc{Wa^TaXE)om6+I4I@Qv--Gm|#+6^NgoT&q=j6 zS6M?&`mWsYPpado^JM+`8q#%{nK$q2AF{mm^TxN*RW64vFgR;nkPr}J(>XukY1#H}?JFETowN%6Zl`D=M+#w(?KIP(y z3mK1I>rHlXxgZ|RuQJnOO7MwU&YN>uj-9*K$)lj1Xtt;|+KWG5Jmt#;E3fr)HC(?` zesRw}b4i$gt;B2}+e)k3FEu)gHaL}koxLgasxSAHnQNC^&G%h0(QxOMjyo^5N3WgO z_O3cwHtd>0azOf&rHT%X%wqDDf|kh|LiXlmUcX&z8iLO2)i?_I>|bDIRF$3T>A8GM z%&y~V+Oem@b_RKxw)*UzHuD~vk2>$3<*l;-n&8kNcae;#z7=-R0o^6Z>c&r$2}BuDQzMbSTR+kf^{4Gk&scNg-Gxxgvp r87ide=&%)DeTGsWfMQ6G`2Yjs5@0Q(z`$VAz`(#leQQQdBs&BEL-)(+ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/release/ENTER.mp3 b/assets/samples/kbsim/inkblack/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e2a26c1addbaba32139032fc8dacd75a62b597fa GIT binary patch literal 2088 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 N;dMgjC>X#H002tDATj^| literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkblack/release/SPACE.mp3 b/assets/samples/kbsim/inkblack/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b4e34ddef89e263fa7af8376d1108c4180e520fe GIT binary patch literal 2088 zcmd^=|2NZn9LGOKnlII+NJ8DVVUxA_P~^*e&Fl;1B8I+UxW0dnp_N4BTfSv1>DofL z(bgI&C5fyrilXw}y)Kobh^)2CJ*WG_J*U5*$2srwI_LTR;r%-2@jCC9RGfDo_&<(e z^zfBz!^)8Z0H_{d^#hncqU}dWf5ggLdnwjbdk~Aq;bcVLTiV1#%3ZMm0Oo2R*K8l$ z{eJPYRO!EhR4fo0F^f#ufL*#$W2OuM$e3ZGhAe#hz5Al{*MXGhMvoHAupu@?zyos4 zx!B0+5HO{95{IRia$_r}KQnL|feedp;qmWSzP2K;e%~JlD>LOC3OU+#DH8GG++zB< z*+psVo>^`41d>bPYBoFEc?(UlN>I62$i1^FZ4bwImLX+)Juu#xk4PQ)2G#rqg#gSW zl~2ZSNdyq*H)01lvNA4K0hqx0{k^vSKsE8cqfxC$Y!g7ID)=cMNgAD(-NJcTM>7h; z5&`1Wc;(fGw*5WokcXz#5~Xs1$po_e`CPK;#kl0ezS4}W8P2&9L8`_3kBiwAS;WvB>YKrU2`#9}mEg>#AJ3RRc37qfWr>XfP=@VBQGL&R@_C$pzOT;uLq@ZqnED%ZJ0q9#8b`e31rjr6?x# zG6XcNh9F2cm_Oa8CX2j|sqS?81Y0gu7(zARhQwR5S=|C+*o}`^R{3SP^sBkLNx`mt z{parj+o5t0(i)jx7Y#ncDv&yMXsF_8vJ1Ib!o3;bc!E1l>B3X;2D=g>Sk_G9DN>1B zzgJ;H4m}VB$$0BaK!*37}aI-$69BrLcdOYXlu`SrXCatA>=Bs*-H|@pY(UH(jH+6HK+D!`^4VFb4D&x&SP6 zxu*1yUiF9#?c6&=WjV(t(on^fcxOeo(Aa?Mo_0N7gk7Zt(L&4T29fn%v1P{nppr*l zykj)!NnQH`gAm_@2hv4RaHciq&RlSX<(=jJ4;BwR_gJa6sPTcrFK=HV_SYp$cpX;hF4 zugagD(d2dTDBGLAg{?;JcqKMRJd7Dtr2D~;$lVI-xv5ZIFDNoR!(u%>U;E4HdflwF zv={JNB`<0z!F1x!vG$3~V7&qzo7zvo%8oLL6n#60P9?|ASf z`%GFDhI-t0+-PqG%RhA-u}L_um)au#hScHBy_ZWjWDm9hil=f3N&Ix00$an?Xp^e> z?Ft?hza~NloM&DZp?>p1oOe*T?$~TXLgLa0HO(wtVr1B=Ax+r+D^aY&=DwkP#U(kjY04$9R9w$-&`)Hw&FkfknKanJxD3o<;W`pA&1lH`50B;aUbW*u=<~P^?c7+dsTbh@SR$(9y57sO`IDN~@38ZhY?c-;Q$osrU!4 Cr8x-z literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/press/BACKSPACE.mp3 b/assets/samples/kbsim/inkred/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c7e9abe9ce20fb59135a052d7a157d431c6a15cb GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(OyQ!ij;Q0pyOYX#o>p5+jBF4~`%a%|?YSX$;cQo3-~Fd|(n_V5u+Pb+P;mFnR>o z*_xa>e2#3?jXYp3bU*Q2?jPgY)~VJ)r!yI5$g3Yabac+m#-`(@Rp0+^ef_@rUdH|# z5gSj=$*ubO?_lE-H8wuq_w}>yKTAtX%e=h(=ic{~r-CxQf~L%z<#+G|SG)mjV|^14d|7#DO@lyNXS9XH!sf8lNQj|~S79y`*M_{iYHN69@d4*dO( z?@p4q$=eaqa6&0`#+BAZ7c)NmHV^T=a?Q+dZ!+tf*woE&rq3<%`a_#hU3{K8njyFnnC$}n= z`F-nnFRkR2Fzw$A%YI9ThrSTg-MwE^>A4Ul>@W z5xGMn!p?eM$W^l$&(`k0n)fc%NM6G3(yPoq%f959`}Xhul|SqM`>XknzncG3Tek4$ z)X=!J={J|I4_%g(+`K!4Ein9}aMWojg((w#k6*FWcr)3tv{6K*ai#S^enysUC)@ZA z<{vtc?(ft4H^g7zlcl_g!utAr=YXAjtgqJ{dOc^Zk*yhrwk~sgp`6S|?Uy-?o|E;h zS{7-1oc#K0l)t#i#glWAAAL>P)!DZ$S<L^Of}a+OXgweDRet@?3Sjd)${$?X9*lR|@A zU6XpZN?z1#vuCmXm?#O!{r#mm{ zER$LCRV7oY`?Y3GYKHr=Nbjzh52KECS52M8o%HmCnwD_>u{|%po;WR2urNyU@&1g= z<4YE+W_ojv}gA5#Jvo8^}%kd*W+h8#iu8%*uQb{w4iBW=Qg~m zi?z1d^s{^NA+CHP~{fxtygy2`~0?zi9kjdp4d4M+%m zVzWOwos+ka!#j$1;!L~Q?GGa#<|!p?I?S|;`A~@4)P$YdAr}vFtE|-2*3%SJ$u_#t zC9$ydcueaP1M7f{&g6{-HB$waFp65-+NpN3YUAl6dmiev$7y-j?Ee_)Hnqs(e6&{f znYB`rE}LqdoHtuNBr-ME>PoSN%M@-2pD9knO(-^vZcJ5TO%K2h(CsZvsY0hq2J*_aWg_o9l zZ*kvvQ}FD?k2B7m3k_SnXs1KRkyh!$zoev%Zv?;F9^~q>>Bm(irQCvwiVR-Sq^rJt zVtEEGvz~0&v%h0+e7McYfRodv#k&9hcTCe(E%_=ahMXD1W9J*bvDNSVv03TMVZMxy zKBuF@C(RNuS)>1?W0qddVPB!?Y@Q2LDfLm!i2YL z2t-7hz&=U>0)`^Zva6J(2+|$`Drz3SncWY3+YkHcz2D58Gw0s9_ndqFGxr|Bb}ARJ z8*Bh6aA$7+&JYCvB>VvyyCCd_zKe?8jP6FTi=9};IMjJ_JspIut`Psvl%RAtumcSM z(0}CNrXf}K=feMr75rBqD4|pn>PeTdLw+zpt_s6?E=lO$V07VtNjoqXMU)@sM6s=vb_FvC_qDq{>^-0|zcuEz`&0}@(kpNF<{t2X!BChV`4bqKgt4o(sRMXPo*xJke zC+J;mDRzx@4b`W{CA*^|1JrCrUSx0FJDM3FyUlB8dgp#VI?SVaE6nD*V%tjTZ&mo0 z?~omlq|Cac&5eGb&onOwd0nEM(m9LfjU@H?A1`d7NzpVa`b~E#4$O*^Vj)Kh+8Wm% zR168W)4AdRXnT@nYaCr1$XWcx+B@sSY3>AF)g-Xr)Z!F6cs()plOnDS;7bUf6NB2m zcQu;qpF1V2t;j~CUR1BiezWKn`$5yt^v!z`u4dS#EM0;}KHTc`SQ9%C6H6%_T|_ zm-kjp(jt4pdA?@BH?jyA1QZV}6%{isbVd&;HF={jm0^D@`GL4|THFC`;9eb|nr;i~ z4n~rBiXPML^SS&LsjjzLwa8NL`$Ek`MTlmai*x6}ikNuoMkS&3ltz0Z>50f)E=8dD zHu`(%8s&6#GSsNxL2zTHy9e%pDZ1W(GOa~Ij=;+EI`1cso}=#64j|GD1m&P07}r?* z6A}c1GL21k?*N;{Sg%^4(PhK&Z!p4)X0jp|KImlO7h=k*$cnc@+L%2ka#PS^taS(C9T}m=kMS`OV}h)?u>NBBr1~eWcU|Uin+8rz1a6!4wcxD!{!;mOonS5Mm7*UC zou-Sg|)h{T?&2i;!8(!GU^Yq&U4AEL1TmC1S(OVc5Si#+N0iV$s6g16Lan) zS6abi?$5K!>I{Z6GNU*q4N}w!YVYVzq=Xmw7^@Lv&r(%2`Ke@F?UR|(_4{?*Cd<6Z zO$OWVm197EF5#0w9LIa|n2blDK(K`He>vL}R69THl#jTk{W<|wg4dxvo!P@UNMx;9 z$f6P<=*gKLRtpbyM$Uj)(fqb793@(O$8qFxUySrY?`GSgiIdu>nd_I01N7irkW~G{ z2#(xVd)g2+jVSHpvPa?`vE>w+*3Q-%2YF81DDdBjbTjWuZJH>Lo~{T0gA#U`@leDp>eHvdk}g`IgMls zt1xvH*KNgexfwrA$okwmEv6uwYIiS1^_EH&mF>(1sm5}p$CZNfkcgltANjc>#z-2D z7xeqhdj@EWs*%-fKORpHQ`EO?>c`N-}gGZ z{BAt~oL>G=ZI9I$K^%^9$o5_L&{jfw$yir~uGY>bh~+o(#ZxxI>hKwMPKG~67tHq{ zoH?~z9o*4D>a$NSPg-%dZg0^&GCm4<=0}JUk<)Z|<-x=wg3Y+dEZmFA6x#K){@ zs0{&%4Sp3!Uzt7ge;X5Acq6JnAN7-xq&%=JcZP@$Ep>vSPo*P4%)DeJ7sowa91*DJK0+ ztzL@#wC(bpaNsIm+4EuP1-H=hGo#7ZLZuQp+KlkvBF)GRv#1sv}h&m)Ho^s7l( zdcM#V7B|E?!Zw`!oP%bbw+z6k*el<0T1prdM_y-^d&FSDAwI}*e~(~t0Zr2CU@Loe zF!)*FN0nqFTC)~1^HtS~xE&gSheFy3f91HlQ~JmJ9}0Qz>8pyCGXv6go?3nS&QJA^ MMf?B3f4>6%0r#1%>;M1& literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/press/GENERIC_R0.mp3 b/assets/samples/kbsim/inkred/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9b2e920174be82476dc4ab76728a2245ea49485e GIT binary patch literal 2506 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/press/SPACE.mp3 b/assets/samples/kbsim/inkred/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3283fd6880809c845bb379f67ef98f8f1d44ece7 GIT binary patch literal 2506 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 ZgkdlknQi35zzqU{5c2OYMb-a0e*vR4V+sHO literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/release/BACKSPACE.mp3 b/assets/samples/kbsim/inkred/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9a25df4221e622e939a6f239814a1e99d0581bb6 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oykn-c>=1IQf*`+oGoBt{DT9~?n^3$w!)cGL-d)Ke2}laB7(ak-;mNpW=hg#=?q zMh2Gf1_lncOhE<)fxm)+CN56ve$QZFwAlZHfx+)x=>LlhN9S-bFeo)J2rak%>;IxN zhKDEa-ShwZnHYq-i~fIk;J|XYvAZA0Yi!(=$Hw+i;NKpX1q@6Y5)zvo41OqZ$m~A& z;g5U+1Iw*A)kTwqxK(2OKWq9ezxh&#>!615ebJhjw3^oes>Oe9!Hf^rc zqR$>VvN`#Tif++#g_B)sOV%FORGe*?)7dk3>0KeN8>v?eRgb$oeBv2(UNmgW<@Gk# z97?>5j4CxIam;s8=}_`bu!?!V*0x;S=Cf?qwsPiM zpHe9+R*G4kr?JUo^PQ@?7XO1G}tNfYgS!3{{*LUh7DCH%PF02c8ko7whv}A2Z9*I&9{$ zo()etO=~V%B?$#ds2tDd@R~5Ah_#(1b*0StH6Ewt<%ItKJ?V%pgP7=S!#9Td%*vaS zQ>Up1WJWHGO}U=SePhaVdpW)(CA(R^e0yr?rLyhMk_FAnIr8`K*U#Eis`l96^Q@d{ zK`&I5qoc$VroOGd`u)&Z&Rnx=S6GC6bM;OcNzM*cEz6zH#5LbdMM!Fjm=XiSl8-7J z>KO_tf{sVM9i-Y7Eh=6dtO;CJqnIuiwRQT<>WLF?#OmJtS;ykAP9!Aye2SsXk?Eh* z?XGlo^{#r^uvX=H%*jQUo-Q8#(=EDG6TV%$<7qZ*D=? zQmYHv5^E>eY(8+MttP{>Buw;8%w@q4P6nU1cO!+nxZWR3Uf>nwxKT4>nq9}rKJIkw z9==ID%#9Ogc&+&>&}8Fvb)|@;qVzIE_XV+#P@tEiG>9KygH~SQqf2UMpdE_EX z(n>cQfMUq3K`eE;W{;s^mieX>lP`UiWkxrjUY>Dnh4YOSx5_%VaJ>K3-u^q_wrR@> z&wVp{wAOFt(Yt)%sp+Fjv*m>gJ^uJ=_b<6y-nb`G(z^I^hFG+~#is?UO5W&}-1cbn zJ+0DmORs^U#iEeEfL&46X-1&CV5y>ViBG6j63@1xzBM61t%-rfMoWA>L$o$ch%ou_ zlG`v|hQYF{E)(y6 z{vZF+*qH18*C>gCMd4Td-V_9{mJbhF*f4|hnndu2MInoYxwzovXDCI0O2&}j22c!H bG9O@ITmmfC6&M&y8h|wq3HnEs(mDhHkyY+Q literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/release/ENTER.mp3 b/assets/samples/kbsim/inkred/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2a4babafbf53353199f103bbf1ebb921f6613baf GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(OzX!-;{R0pyOf0|Gl>5+jBF4~`(dx%s9c#tgz?`kD5o6BtVKZ;0HPdb}`EP*Cvh z(HE^A0`1j%lTyAeQvRXP;#T)W;JD39>u5TrK&%pX&J-Jvgwne*cgE21`zU>2jXfEpcr< zulE9}+|%{{|9?NfG49Uo?cz^uchtrAJwDg{nKyK9+bXyHpw#y7k9~f@6GNT$*NLq@ zy3gJxPbmw%IWxpIZrk@&xn31B+B;jzl|xf+XWQL>o#n{I^CVP~;r4;a%&pSq7o07F z43})$s3O$IKVj(%gO~GGN^$<|RG%p&D8RItd&gBlVUhp8Cmm5}kiDC1{&Nol)6b2| z>*YQ$%33)s+Bdf=?lPkr6Bnyz#e&#A$J7Zjk>Y}nqdG7BWbQZ}ZS*&(U>VyV#^%yD znXhvebjHl?@N7!R&^#VM;oVypy!(y)*Tsmip2-CCfuHL)nZa=Q((q+sod=XU9QW-t&YSvE6ODM1vUL! zodk*@0R}0?$>uxT8<;k)OaE{1f$?5=&)c<3a}Hd2%Jg97ESD|KlQxw#%WZ!9GS5eP zG3!ddig`~OF2sd-)y;i+cax5qWbkRh{*Jdord~%Q3WP7jDGF_lO#HP@^6EB!;_C5|0|pRMomad34pOABdBF`nk3BG1jbz{v5L;0)gPM>}SPT@!ob6`~SZm2GMHAl_4I2m3iQl?D0o z$`2%5U-573s+?ZZ{HbM+n9lX59*uf0ye|LXkMzrVEx#&sMJw}>)y3K`CDQ)?zqdip zSnE&N_FJ{z*Z==NY5GLbjaQ4^vn}K7lg=&7yAKR;d-ElhqMzKuZomH<#&Z=E2Vedv zsVDC=HQc0qY2Q2JcVXdY0`9uj{JN=IXyTRA9J{^lxJu-b0*NU?s>>$2EJ*QF@zgB{ ziRm&Z)S6`F(kJ7oK4H;`iF1-%W`JTyg84$=tjl|n88{diOn}8b%ab{mj9oTOy6my& z$a4F&pY@HWhCbW>*>?4|pL4Q6w*R|*ujc%!>vKQP|8-4e@BJ kBGbLkYJ+9G)6%8VC7x`#WR+#5l`e2ILCbZxrb*lt?+&Zt~V+$b@Xtko@F ziy6X<-HDY}*%GbD_eiXW@F9?G+ccNczE&?X7A zFp)^q16@O-(IT7|VeU%nC5N%lP}-S3HBpmNPblv4dz+y2@IWdB4u_ExalM9y1&50Q zLi|w_Kv*E9Mie5nYmdW*&RAl1KofBf(U*D`Z5qsBgjl@v&Gt235Zc&_^&w4*%AB#&)W(a;Q?96SFxW81qn&_Z5DbbpMt>Fw9d|MV z$VYu$amhBj+?j$2i>~w}N$>K7`NZ)wTv~%3 zlHK7WpX$uO84scWGhY$aZSx!>AHLNZ)5Q;t=qjQLT4v;ex~HJs+%@hbH)AxMdy`L$ zUMjw+7s_GgcZIjHiT(-*0CW8raWFrJiVHB_hh?bR*j@^0_MTuqXVq6}X?kn~vdW}h zXx2+KsW`JFRHKlAHB##(tX#p&YufxI#Rlrq@mkWi!%7EnpjOmqmfmU;6kOvS=4Bc@ zjt_B_R$HznuO}oTyAf11XO53u*I3~o$#&pTu8(|M&-rhxFMquhu2Or#H`I$S?y)f{%X0wy%Fpn^eHn5 zC870)y<+`-PC_u(ijcX!T0NIAaKc}YO}lUE^_v zOH!uA1ja31vhDE$^W;D>{`{t)?e%WSlpEvit~~CT!1^zNcYC-)$p;kcs5WYH*AH4n zfR)FWlaS;w;&6~>tHLy8G$Vi~_u{Fi-9@UD=fQW6&Jlj?CP#MD@`?lRHQQ_AwCkJC zjHruozO7cnT~5y)Bys9+L&VQy9U?c%d|oyyi5}kITh>7GeB4v=eE+c;_D5bcC#Pj$ zzkHyh@??KaV4OkYv&!Hnf1EzeiLbbR}q*#AfV21w$#0ssI2 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/inkred/release/SPACE.mp3 b/assets/samples/kbsim/inkred/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c167c199afd5e1d7421ba463c164dd05ea306e4e GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Ox((20Se0pt#`RZHf>Bt{DT9~?pais|Mi#tg7a}_Iz&TJDa0tA6 zkn}LXh=oJ(yqeEUCKe8Xj*i{Cckli9|D&MznnWf+!Rnta90L9S-wLvvoUFdap{@S6 zi-f~Wqs+Vi#mlSTy;EppQ3l7#KOps1P{3!V_1?EYrD}Z4-2Riffrc7oHqUBgsQDKl zke9ozqb-<`VRojc{jKYV>UattKX|=Syz+0#v&DRx&Wcm+1U=EW4p?NoBx5s!151Ir zqm-bfl;y)74h1fQ0*T2-0_G^SC98?aNmq(8G>dv14yu?hmEy3>^~`|^hSLFeIV^s$ zK1vkfJy~WkbK^!C@g3GIJ1z?F+SoTl2>zA9o@CZya|$yGXZPu;0zy3!)<_G7MX30+)2)f5YlLz3#h#@!3@7Q0+h zIoY)`!-=J*_qmkCjLWPHC)e_7uaN9C`2Ty-5$*;-!Q{ZdEezWITavF%Up`?Q!@0Sc zDm>rx(lxA@5;d$G7YTgZmB#wS;%joNPSGSe_AMpGLJA#AHd{QES>??eGrN11PSmZR z>rKN}&XRaNQ&d#cs?`+;!mR)Q-Vf5Ok0Xk?DOl z!O7~o`BBzo(^{RHuQ71ReDYbKdRd6IMf`22IK$R%QSC`Kk%pJpox)ZBxNn(L`uyqH ztBq6Jo~@5iU9Yicb9civ^{y$ZTZJ-ax?Y)P;b3!7DpoS&j9S**S5uWFUQ~)N`>M0b zD5@fGopi3sWInBHX3yAnZkA%^@bBC@t2Wp0V^-J2`k=RFOP0**Y?ZNcHhX($jwiE6 zsgk4V`tz0ib^VuJ*`@V7OyB)f zF|}bh{YE_Gfk=Sl!fOti>YJzCy?jIGk*WBU=+#^my9{T@RY*rj{hrnfiXrI+DbeY& zJO+1~c=XcteCE?t%Se%uwBec=c^<>UEZY`+-me$1Cp60$WTc0m=j4<}g z40yd}OZ?7jhlCm@M#yl@6}sATw)6SQ{w1?~U);~w;;byW!?XUR)_oD_O+mJ;H=|n9 zFFZ)}xpP2COnCS1e~H`Y{wuOuw6k{Zu}fVtGMh4GHYs?9RT)e^XBH!;w?D?p_ynOOs-BrkIxQuSsZ18C)Hwb%v}(0er+(Zbc6|&5Y1p;~+%6ftqt~NDIi+J(G zQ>t)L!-0k)T|z8u3ZMDy^vyCZ^_e{O(m8xaW80oPD@`UYYH8#a(D7KP;B?03@WC@7 t0TB@q(f_-;y0}3xWWjvS<<)+bo@)sV3?>c0nunWP3tl0t8U+Iz0swAZfMx&y literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/manifest.json b/assets/samples/kbsim/manifest.json new file mode 100644 index 0000000..492109a --- /dev/null +++ b/assets/samples/kbsim/manifest.json @@ -0,0 +1,231 @@ +{ + "alpaca": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "alpsblue": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "GENERIC_long", + "SPACE" + ] + }, + "boxnavy": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "buckling": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "cream": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "holypanda": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "inkblack": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "inkred": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "mxblack": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "mxblue": { + "press": [ + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4" + ], + "release": [ + "GENERIC" + ] + }, + "mxbrown": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "topre": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + }, + "turquoise": { + "press": [ + "BACKSPACE", + "ENTER", + "GENERIC_R0", + "GENERIC_R1", + "GENERIC_R2", + "GENERIC_R3", + "GENERIC_R4", + "SPACE" + ], + "release": [ + "BACKSPACE", + "ENTER", + "GENERIC", + "SPACE" + ] + } +} diff --git a/assets/samples/kbsim/mxblack/press/BACKSPACE.mp3 b/assets/samples/kbsim/mxblack/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..23258bb48ae1a4af359f4f1a724a2d1f0eed3a9e GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/press/GENERIC_R0.mp3 b/assets/samples/kbsim/mxblack/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..8a47132ff70caefd36974b30eeb0cf35ce8b6bae GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oxx&WVAc0pt!J>*}>IiIGD82S<=_C$EA@4g<5(I<0zRU|4uKPge7pdrMFtL4iRj z)6(C6isOkorRr{>*Tsgt*N*Tfxn z_dk36Jjh)Coy^_pgaQQxlOJ{g0@Le1wOc7M9RGEop+SK|oJBUmLL&12)8E-es}y<; zFfed(Ff}j=E1B~Ov+tWW?2T29VFF#-TyzTSh|Fui+=02VNbgJ2vx|knx zuK(BKzxN54*d(USy3L%hbfd|l`4*XF$HQ}k?Y5^&FBY2n|M#RL{0(BQn)-8l7`XB@ z)4#UN+FYk|YO%1vk(Iss*X@4y$j1NCJfCfwRvipr=(rLrGb15v7L!tRbnf${i6Vci zZ;4d>+ioqiX+_UZ&Tlz*-%VaJU7G0^i?yTMA zk`1M-E4Zyg_D(n!yPRup{Z^@$XLMRm zySMz+xji~c8N1Rt90LVbczk?ln53h2HFnw>$=4TCpU&lf=`Izfc`TZDrqQfb`j#u! zM7B&<6=3ho?=0PM_NtZIB1t57r%S1*xsvsBsneO!fc}r$6Xiv-7Ko( z!ecp8ZQhv&DxC*!B>eALE9Ahyp!s2Q?xvN2Tc+|k)l>yCn;ca+K26uevs$5OnsSDv z>q9YtVxc`H41z|-uvhMz?_RIGe#TVU`sB4) zrflA}l^1>{9!zWIl5syDaaVVBz|*YFMcYo6g{$4N>yFfqPM4moBRTt($Rvh-#ZZ;Y z8UagdPA{l5eyNzsR~DX-aV4sBqSuQk?_XDE_SDUt;K+CR-lI+1b)%-7)SG^>G(uWC zW96w$;vX!W1jO%TEeK+l*`-^k6@4;9GckQmM9|Uc+bfgzJliy*snp-cY4e(2XT0x9 zEVL3`2Is< zCVso^c&JZu_v`z?U(EG+cCJY{wru}@rd6#%0fuJ}tZ}{HtJcF%VT>??fZRWAj(cakr$?>^#gJ(8#kUK!*BG3gz`$SvEaF(Q zt}hpN4_&UNbwucFf}K~=yXR}o96cs&2$ ze9O>#g(nsrXPCGsjFGd+KmK%h<)^F9wX4Htp10PS{{QF9ng7p*pMRbHYt^+?Gtb+e PRStz$IiaHfUkCsII>1o4 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/press/GENERIC_R1.mp3 b/assets/samples/kbsim/mxblack/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5d8a7ced0cb3821768d2abc0141f0da86dab4082 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oxx&WVAc0pt$-U9VkX5+jBF4~`)2rRwfm3>$qa zN`-a~Iz3|;?P7m2<5$M#F@{qB$UegCf)|95d(G5Va*f%DG`V5m9>Sa1~0{v>E&!NJ7X-*NCmjXeJ|-)BxMXEby$Fa$6(FfqC1iz)M5 z;j&=Y6kzn6xvfjiLek*~+bo?qD_2XlbUznKQV2XFFnw#xq`d(R{(?+#4>+za%a?jM zKV0TK(*nH@C)$3yy}UN_%sN*0#~ds_LR}cV?zlb;-RbhyTkoDHivu&mUIn%p6D~@* z-wrLmqgN+-*W>qoj)Gg&ie{8V`{3`Wc_S(nq9v_N~_RpMLSQpih7qxKKyxP(q zum8{eQJQ$e`o`P+#T)L#Y5Fr-Uw`MeIJ7iu)@+^KzwX!nfAs!nkLIV1{HK4BKfz`%Sawj@8?a9XbBsq6r0 zjec2a@cGha+Qpu>U9*&cf4Frr0T*KHBx|+Qh#Qy)DbVQor)>lte**OhN z|F)$hwsFtkd6N*;$hk~AwdH(OZ(zsm!qb1+Q!26@E;}}CzMiPx*f2X<+7$mQ|s~eAZ{HQjbn?FzGYd z<+>_*N8N{O)l2ub=El3#{64(DetCwL1M3rGRnMSzKvJ2cgOFD&EBg-3>)K0Kqn%>FJv_w>LPR|~v^s*pcBZe8$cV=Fm zTlMhUqs_73xA&e3*W~o-YF%(;Nr_71y#pOT7{U}LxUBUnQ zZW`Ai=C_HyjYoXMIlnjtay=1YnkUZ3p_Q^*gl*L|sr8rl#;koW*|Z=*IX1*VH&yke5 zbRWNW&L?Y742d?(Si4wzjiHsZ(x&8v)0YPn80QL1*?mb;TO%p2WnZaFnCeoQm{-46 zH_Y{A^45-UE4LIcYiBfZ(vacH{| zt*vH1ultE-UYeXZd2-2}+DS*6O1KvaTW*4_h^^HiE*vqblMb>Yq8rqJUrx!qf5^!-091!*IH=E`k~nE zH23ohXC-Hs=A3#oFD;$b{c8T#v&!*XLql1>F~of4B(LrA85;u_7)%;~HP75N6I0US z?bl|loMXY0*SDAX(EXrx=SBV(&V_1vKdoE(YwBi+HOZ3BYd>mme3-jC7<&EV(bznX8MUir=zufng zx^Dmf-v@CNsU~%TnUskI1IpjOn z0)|}8DkG*Y(-)!_az3X0Q}@*iEBd%M=qX#^3B9nbOJ9EryOtF1J7smiie6n+6}z{F znjuHHKVMjW#Vp`;i&N&y_Zt0Ym?OnxlRR2$cW&yq7*?{CXXoM-Yb)38T)8k%NN~Q$ zqRnOd_g>F7-}2?Zdf-%FLC$^iW=da}tne`}HTUe|Wm6STq^XOQTfg+5T73I_D=X9N zIn_mm`!DQ_xccGM+u6(lgbSjg}@{i|I-)4 z%2xm9b10~3dTCv?$i7$Qo}TBER@umz-s`p`+VZxFS3FXA*dbnZc1F}M)i@7j@8pNv z|2{2!95n6p>-nG<(r=K6UF^7K>E}yT`suc9ia)noGCAL+l!E#|+;(&$*nH|<~AFFOopigNwhp#EL;%UWyx!y=zUmz)SpuoBqZ zD3>?ogy*)3-e8Yg4g2OK28kR04cO(iV)80gtxmH;m(2@HR%A3w@9IBrEG4qiWl{76 z(}=2>o7%tfo%Zy(^Zf75<%SRBbY@)e?C4$nYR1W_@8=${!vwkOzM~Ki#s~ z^={P?edF-lsF_^8QQ7r`nhJ?Sr9Eck;?Z~*3a=ePM*-bK004>8Kehk> literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/press/GENERIC_R3.mp3 b/assets/samples/kbsim/mxblack/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1d2de1637c16b2d5cbf56e7d4488dbe21eefcc19 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oxx&WVAc0pyP5E7g)<5+jBF4~`(=UUNB<=?%=9`nmNcAD9>doHCAPTs$kqW;8{C zi%aQKnrXF7*DSf=}H2-#XiNAF}&mb+;=P4J`8|Nj?R zzHB}3-}kfkbo&24d(UP0mt~tiDO{+1diehu85WH;%Yqtt`v`j$MuQsr{|7&R4K5T| zv*w6{1D~bJB*l~;k`I*@oH=ml6HA!{PyYFihwFk??sY_oW2pYdf|lgj$(m*1vNIm5V7;;#JnJDQP9IE~@(` z&0luiQt9n-jW@ov|Nnk_d}-O$%(s)f)-3wA#AQ?9&)xao`5wjQuABYj63dPifA?M4 z(s`v@u59&JjhB;4vo5GiO#@~ElRHu>@N9Ubn(KfkN&VLye z#Li}u`uNJ6!`kSgp>V3x-jm0qKhCT0O1ptkxMF{p2JQ?j*FUt)~BMJGet97AMElz*_j{Mq~f-7(X&TOC!AnCX)d2&c{C|# zqRMK<`UR!(PVJ4Nk-f)`rhX5*=lIqvs>h3uYvP=#o9=I)@Y?zAqUFn3WNVdu^IC!(hCdW~fL+6!WhYjuv!`_!-UT<6=gcX`HV7TpeM+i>Zu?#hq9 zp3P4;>{Q*q{aE>#&%X1j^US|SzbcmAV3aYD^JH$?%H}Ok<}3ToQM&3;SuwLDAY|MB zlb?Fn1=<>?m@4qQzlpoENN?dv8P%!lj5s&-*Hwqk15{qdo~zwDlaRX=XcYj=i!lcpcv9=zIc{j|M`Y9CxD3>SlqLu zJXy7Eu2_<1_@WSRo2Hhd4Fykn85aMZSbw&|`2RttrnaLG0`9*E2)xH5Qr^_c`(weu R_zQun;C0BVQ9#8I005&upSu76 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/press/GENERIC_R4.mp3 b/assets/samples/kbsim/mxblack/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..f8851a8340cf5040ac5bb6d2209b4e1b044aec22 GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oxx&WVAc0pt$rC67`@f&Ar#pUJIe*b^^eoo?It+*fN=Jo~04Ew9kp5OQX z@B3;{w0$#tUw!ZUZQirr^A{RU=s5t10!HCvqXnA;gcZct*tp&KSR^}kws35?6!6ZD z&1+df=Br~y;;|c=8Zv}A)@GH(CGezc%Oup4KHJD^AWQ|)lU5}l8 zDy+fm?!*OuyuEJgZExBB>Fc_ibGN_Ke5^=tC3A4d$`qfC8QPyhYnb?Bb6^I0DJ5WN2}Ak=Nfv?c|h zAK9Do^euWyS1Ach*w)Bvv^`RH#_vs^)mI-*UlnHhl==VfNk@bmL>r?`|4wgUV%w7O zbsFa`9<7-?FBjcpT&NhN;oHn1{5WDRU&4KcCv4%~OQ$SuIAK4-=JUR`pF2-gM#LST z8qKGC@6>JUNtIpei@ru%-|u{~g)9EO-px68ViI0$TyR;>|BBzEOA!V&bHA^BdL{eW zmbLmTZYTB5xD+4yvA8$+$F)f&`P|R{f1UGxz1_*yDBq7lB2#WwYwiBOr)R<>&r_iS zMh#zQW%elvt(+77N$K4}q3`L64zE1*|*7??zA#$GCgmSDV6*rbzq9|1mQDXefB~DZ)d*pmXI*ic(BTq$IEEC zK*uXhtF~I9_uHl~U;VPO?%%!qKS~j+mQOPhV05)T9O9H9nb>%El0cKehDj^ut-Kmw zAi%&7cs)%+F}e z!R+;x+glX3XqQ~~m>`~cb(P;@nO37|KNik5QZ%W%mVfQ=yVV{UuObd7HK#JCu=n@3 z2)ixGnGp$!A!h~&-NmMFHX0oEGE5Gg-k;DqpQ%N+ghO!VoUoNAGcI{gl*q{0{aahh zp~28okzYb@l8F0x!Nvm}E4;2wn!JFwm8Di@<506NoV1T*wQoSRy;86dV5%8e}(#2V33*H=5II}F6VTY#9 zc4uv&4V4QDJ6ukBx9kcoF&1?UdnD7SrM_MHIL9`gO&O2;A{S`(P4?88?P?nr6}n@q z#_TIBsZ(vsUix1?D6lNeDdL{Ol0c0YkNzIgYV8ac=TeK%57psW`AyVm$H|PSzFpztiK@|9)ar9 zCw)A(Vda}OU9mwiTMV*HpJsJAYXmI(^w1$*Gdgq1h6Nfgk}U!R1jMGS)!>-a#w7A@ z|L6KwBL4qR2MA5wGcHn4B0nd5L|4ye2M=B1_qM`V9nE-3a<}B JN5KGx004x7EsOvF literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/press/SPACE.mp3 b/assets/samples/kbsim/mxblack/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..32c67511c390442ec5dc2bb8b89618dd94cc4458 GIT binary patch literal 2506 zcmd^>=Tj5d8ix}ID81u`1dJ?!&@>_Rc0&{-1VRZ#iqfSAM8$$aK!JdW5J*BO3xuKs zP!VvIh_qa!7wL-b6%-HAMW)(*k|UQ^UgUR&Tr6>B|2g{;m_MQSC-8p4{$0kl7Iv2CqbMX2*!Nc?S+a@%1PcI=f8>y3 z*%thD@ON2x{}v=&QVv_Ek@=M#s`GTd0Qg`4uPnZR?c!nwgbL=>{7`?%P)3_?w{P*1 zV#-mXL0sQ#a&o%Am=M4efK*c?>FWA{$Q#C8pLx99ZNb@%j>tF?X(w4h0rh#$J6L=z z)?dTBiMRBCmmI09YseK71J@RP8Q4t^R5cNz9g7>-tRU^v5np$uq?^(7*>-TK=trAB ziOXoW$pHb^wp;gpnYzVpOtB*ZP^p=I5yNCVs~*Iu3LsO%evh z!4=WCRap!{^-?7|mje-CCs$hQo#=f1k2TcM7~;DjoY&RI_EUS-4!Zu({c!wd&a(o)4~9_wkP#NN@qBDnE|j zp7gNv3aqq2`v|~jDi9rYxstYI7K#=ge3XSHU~uwySG(gfiT3A%xW%8NoyFXvcso?? zAu?nc?6{Q%5aH8gH={BE$egqQ(BRYqerId3dk+x@^OZj`WYk733xI$ap#Kdz0hYkI zBN)sgAAl;bI^-$8a%W$N-O*v6=*J5_zAH&vbAS>GgVpZ>~d`JHV12`P^GPmQmZW=xOp>4QV$-Td%C4 z#1gJE2!8bJiKTGzY`~VJdiFfyKQC}3E1ICF)}64_zoJon0t0|)w@7Ovuq52A+0NEf ztABP(v#L&8lv|a)K;$)kG3)E9x6Rft9k*rkqolB>s9ID5?Szn!QFq8mY)I7ZCu0A2 zrK$JyiiwO}cPP=Q%0bN3OnoG@{4v#m`6Z2*K;s6H^UScbhx0}!G=iJ?|y*Li<+X>%^UcTk#I*0YfP(4z^ zke!V3$24_DKV8Zc?{p$ba(^U1j4@o15fwp636W^1#^72D2ikV^haqtw-95!2}?#LUWRm9M@S?h?9|}hM7>ko0z;^fs1p;G0-ag!)LuR+ z@??W}tV$vG)ty|iC8owLCtta72DjD=}b_Q0A&^TK~Z>352W>efT1{9ZYZl zM1yn{LMXrpyoRpOMSMFXDvv|E{@qbuKEtuWW5*!IX2F{ydD*?~YmlZs8j;5^ovE8y zO*|qBQj$yW;;QBANYQj}x4u5)Qp$`=3L4f@>5Ac6)PvH{r#i|x%)RG?_}7_^uH0L% z;3A`BO5)A-$F*ixX?3B`6a#ZXM%@(Um<0~*gH%C&UA<9Ssij8t{;a;>KtHYb_P2!u z6r2DZ#``knWrZeVyaGi}fG}r@OPK4r@MrO`!=DgbUk8@S^B;!5dwOPN(<=a(vjhOym`$kT`}=;oe>sCj3Ke2x$wjk>`3{35K*f#IiH{}zd86Ui?y_w|zvE~BPc|2EM3&8Z+ zztlqjd>fQbw{x_%wMQMv->r&Hy0@iFosvVU**)>3({e@`X|0p!y5{E_p@mU9*jFu?)N+A}Q@VeldbB>JG*#{~ zUb6?T7u5J}YZ_g4FYFNO>Bq5FsZI3INf{I5@VNUtlowJk?&0%kTyO2B$>DG}k6e5C zLMgIz=Lgqe9)nrE-V?eWMI(NQr!`H?RZIrGFi_x_C|rcDcph-p5-_{%;%Z#nH~KxR z-?Om1GHe=kfSFt$eB2{;$VDyN3kk~<7f>4k2367D&%qae7?S57N7)ODB4ZB%0J{5< zLC7!(1LItMMuQ*ZfG2=L=^gn5h@Xo&+$#Y1ko^mKZ28@Ba4t-rauQ w`VGU({?X$`&F_mo!E+?xM=eV2wjFKpxIoog?%q5w?gl)E3jgo#!R2qspCY~xqW}N^ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/release/BACKSPACE.mp3 b/assets/samples/kbsim/mxblack/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..02e0d0e4ca9ef1cc7ab453511ba35adfc3b1c72b GIT binary patch literal 2088 zcmd^A`BTzq7>Bex^1#F^%@xv3O%1OWk5ZJ>67vKTm#DT>(6C&OQq!*~W!I>gLUu}; zCw3U-sI5n48lrgsno^eQk(gmtw6gYHY_|PjXZ#EL%slfv^Ld|l-e;cAGw%b+a@!&Q z$4**Aten%7n<50FYz}c>0l-RVSqb1ukiX@O!}#s6x3NW`puF!T!2wgnV;&F)uv`b% zXxQcZ!H?p>Zvv?uO5YJ;3%GREOiAr?A%}?dC4d=586y&jw6R#MsHKIs?6KYoCty{8 zvOKaDiF)I)pfoAT4HP#vgMWdtMivr@JW&IJEMzir)7R{57zC;%PaAIp|6abKrRC<1 zLP;c2@bqcG?hW?e7Q-OQUCi?ud$AE(hLiv!M@CEwKGS6l)gxTgT4|~{qi-{ zumwOBHah3*aQSBaW86@mTNbVCJC01y~IzyV!0Bz2fI>{OBsMZu0KI zqm0{Q`y8l>U-S%IGoI*|F_mLTTrJb3`n_{g4+?D7m_3U~ zCOy=pt}S#Wu=3`_K@FRoo8yGk0dj}gdXDAoOQE%~g-O0HPK5AC_3_XX9fj3=?$)_tikR%|cImeF#m!OOr_G`3^*Vps=zzA2OfFE(^|_ppfu~*BkA7mPcBAQ9thAvo zF?qnMN*(#?B6)V)>Ah>=tNwvQAFA_d6<^ZRmeMzPcG7*aSvM)uv!;YB)bemPW~4(I z%CEQe0|9~0N0<^%EMgeJqRpIhd)EGiVYe86hUwFeKrSn!2k7>tZ~DXl6q4AJQb%AF zX?N}4Yd2NcZu8gax9E}`uT0po(?GL7J?MI#F#P0ag(+Tj9gWALoT-%cj1KzTkBifr z_&j0AwKw1YljJfUHrBfkwmpJIkKwA?B&Cd}uoDi8#lhhY9rK4%Mq1g{F;i(d#htxO zJdKWf+tdG)e&OZe*0S0WZ;&VeWjspdBs{@t>)x!Zap=A?C9H#&f}%=%Y*HE!2n_?Y zxg>|8W@_werGg1o2Iy4`kG9Nprz8ePBF3KbU4?e7x|9GzuUhX)@%+0tXfuV7XiA7M zENFt%jTkP9y*ll5%H5h0P_JQxv6!j}X~P>cWAcRaX%80?X2R&MgY%(@gPOJ$jYH}> z#^xGJi$6abB29DVMjBJLy=OYm%PT~V%+^2ilEZ^$q~)dXdyf{x5M3w(#v!ud;q;w#$$I$5AD{Yw8>2)F(%(9;xmOUbFcPqqNIb zO-*M&r@(WIIBZV{eMbo1=Mo*3bu&gq#UpT8A?-{)<_6;0sbygu0Qu%YcO@LZ#R|A& zCQmrauOiJl+a<2<@bdCy*vwKAO7pe#E)x%MsQjwKG6F%s;jm)`yK$k!h)8RyfWwXs z;}Qk;C%BE)E(8*r9i7Ujjzn)J$@$Ayh&&s1G`6951J literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/release/ENTER.mp3 b/assets/samples/kbsim/mxblack/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..576e0d98865b5141f6969520af3c4ec6d8dcbc19 GIT binary patch literal 2088 zcmd^=`8U*i7{|YuGE;`JOa?91F_!F18g7=MCM0B=rewyJ++omWDqmT$Tr@M7nXV)k zSC(s!G12Hwwo*tgBPm-am69u@%+)=o`@=oQU(oBE&v~Bnd7g8g_xZff`8?v)t3u%a z5U3%M>vwYN2Lb?43}Ckb;6?~GLc9^{v-Y~$yE&N~nVOhL^nRD51Zqq18~_0Prel}n z^y}}1A0>+aH3-fN#Wt9NxQC`COXeVurahnz!tA)kcs!mKiU1t6=H(IP8q`;vXQNC^ zOsVUSqam+2Hn!FbNNUnsG}o~f&jW({d_KQO6L~h);f;81oz%3?>L|5&M1%W!Cjcb9 z5wGWmno+2Fu>i2KvDsHG000|cvgR@ZfF=Tf9bj=N=^8AlH8Bg)1D4C*t z{(^UFpnYML&WrJzC)k615gG#j3UBO_*dc{XeeVn1`ak^z5FUd7_2f#Z0#9}=Wy zRQ*=T9{Kac07p30BUfQCJ9`%%@5We5JX)~|Z=-R}1VFD$(e~ngoo!(s)SalMv#0Ya z@Oy{Kok<6%%+i(4PvJ=Yv?sx~`O?vrXO3pZT{zEQdOz1z`-tkh`x-Ai>sq4)c7Fip zSrZ|-x|KR5=hm`FcZ!FvDXj55U|#KVV?3W@?qsrMbOZf#6FF;q1Xh1?pV-PY^6VPn z(5cfPb1Rx8$|L+doqG1t+J*XP!h7oH!P^qG~ z^Qq&L)B;~(9J3=}G3u|ieVIn>q`R0jNHM925#f--yRz+If+d@vc%!-hA}fvMbWEiz zY}Eu>uuD~%nJ3(Q3hp*%%iL1eLB?F9$Y%JaP<>Jy?fb{ZLgnuIt933q=NUfIGllog zPI60U%lFfbX(3N&J4S`I19?B8ou4k=AM;`nI|~MY`G4<2Z2V(m_p$T3s$vkhxA4?qWhae=HRZ81cj>U_fG=M zUs)A=kRsA8i3s!Of434oOx9t&VOzP@;nq4WhP8#BZBguq;u{#H8HS*W>?v0&L3KfP z56d~@5`-zbu(-ZhRN$bpWb;k;DpsI zdr*ju!Bwxs<+rktNTUx)j+AiUS_9-f*I*}O7|EPj&0A_XKr3+iNY?36)MwQ$_V~6v-9()umvwrQ zffrV?UaegGaMpqH!zFQFC{?d#bl=WJ`ZG?2LbN}xeEB`9#};4H zi%%~6JQ!lJ17a^>@2r;`zYs?F{t}h)kxr?nBr@G(a>r8!E2A^GgE6pN&Wa&b&!?CChrnXOjzM_P=FS H{v+@Y^ca7t literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/release/GENERIC.mp3 b/assets/samples/kbsim/mxblack/release/GENERIC.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a3c640469c1b4b49671f66f045923302d75e9451 GIT binary patch literal 1670 zcmezWd%_V0bl{nnmJbx;2V!Oh2DUbaP(ol8A@H9N0NQ2cIoz<3tsB#{Oc zrf??)h6a#3c3N=Vgh`AP`ad{=1n}!JXI#F)=Z*@4vV>Iy!3}S5OT)wQ!?{QqbcNxRXD|ya6%OrY_J)N1%bfqVDqTAe;H*0lwTzh(b zeX?=6RYvRYZyS~_Te!Dh_tpLHk*RstwtqKxVy&^!uxhXRz0)(|uGL=KzyEf8uex69 z*{8R>#q8go(pUT*OCd&YQ8M;l8n4Q|9?+9BFrFpcBcEz))B3{~sPT7yBP}?)&1NI~K|tT$M@CuU(J8`9LQf(D0JS~XO)rzC^Jo9h$t56Ke|7?nW+F`>s#^8{LyomiSCo_uQ0>w;Y!qM9uDg?C|q*@s);9=9ZXM zX3_Fpr_$esUETd-Wl-D-?G4uwdP?W!eBXa~|K!5j`7g540#5DxzwWQq z7;2cV+OGL`c>}YNfs$d%?1eRPVZ5KOyi2XPw7Ms1MKF##mwP&K`1Xiw! za37KDbC>P4T`?tXTCnaxfvh7wt2qw}J=vu5#bV3Nr%_Y3uie#sjeZLG4~i<4$g@N=&}%9@~&3NOkD)f`}X0OjJlH~;_u literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblack/release/SPACE.mp3 b/assets/samples/kbsim/mxblack/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1ecc13931cea725c335baec3b09a2c7227ba1cae GIT binary patch literal 2506 zcmezWd%_V0bl{nnmJbx;2VzzR2F_Cq#+V=t3z&%ooWTPAV*x&vM*;%_2hd?G z-Hb~Dv(9t&E}I@)%42iIvrlNEr4D0;j#s$&Z0V;vjI|a|tvV&8WFyIDGU?sxf2VAx z-8DVHu5UQSAu+t;<{bB9kve?_$G=|64xPLH{_8wt|NTk&g|~W6XC-T1|6cYxNq+l> z+yC{K-ZPrNn&t<$cb6=*5`{`z^F;*!`^8Ck)75m%pmTpa<__fbQKSIaH4s>A^3 zlc}C-L_L*5Gei7$rU2Pn)M9KDlT~^ot|fBuY?j>7D*ylYq$45?Gi0Zm|7~wzHd>$Z zu)ROw)UvASY)3BI7%9z^uzB3nlCo@$zd#w!xw_C^8eIJ$nx=t5VuUvW0ZjV%)$yxujB%|fk z+WV`Gf-bK6Rky0B?Y`N9M;_O@cV}Cl`LShwM6buqk8k%R_FnOR6lo}VefiJh|BbKx z=UZIkc0_v`{{;qFWu;?tt*)(DdTB=4EVCP{O*_v-*F3#`w{+9G;H4VECsN*oDqmW; z)i2FeNbgoiPR!D;2D}0nTJJe1`|AivF?)$JtlAu!z!`Uw-??L5P~YPhmvTCmS^6z0 z{#sd+BJynUf}J~*Zi=k4ymg0t)w8m1%R<{vPrKHs_0{UzOZGPtXC&xN{UDyx`DC-^ z0t@f%?j+S?g6F0<&l1}-dF`#`y;9uHM@l3F4;(8Kd85HElG2!}+{n7Rg>6FY zk`;}C=WSZ&e19Qebw95wa%NYmAp?WX%05SCnTDGk+|1maZi}urG%n!X6Tgx#Zfo4{ z-K#j|8^AHdAo_B;@moWE?{Lc{7pF;QKCIx-k)ADb#bwKuswg!vw+TrPp19k~cV==w z>rmH~YCpbuk)v&@5KFYC@eQ|)W-7L+(z)6}{9o0&Wf$d4Nt+ya>}u5aJCka?!kRzR~qR#`bD7|4}ERZ zBPZFz|4DY(N^mTXD_Q*TwglRW~10<-G<3r@mdXcpG_5-UmDG=TB4Bh zWO?n~_KOELG%R$A+*#vug~e-;V1lsCqA8qh9%auqPI)-jb8dL-j0;ov<>Y5*cAV(r zeva$oE=X(>%zmMs-g6Y6NC_3OCUwKs<1CYANw63$heNgFS@CZq_hw!dfM zo!vrJ0&hOW*JwM`NdN+Rk@Krtl2Aa-@3_46gSoH@2DJ#6DoJmSG@W6%Aw zK;UD6uwgPYgZu#>hBwj-x5b&#`UCiuC|nNHx~X_ZT}8Bs!6G0`LBZsb=S1Uc!rc4< zZ7qwIrDz)KhBZ79hzr?#?BwnF_Bkngv$xlO|9|`31Ur6%oi*<#2b=ygzh3eG%65}? z_tPJ#ZP|3syi)$Bki)u3-1Dx_*s=4?teJa4R;=J@U|{;_8g_N5$#YlV_?ga;lbtiG zp4hxsET0u)cVl`8kC;V?!;+|Xi(hn|*?CHTPq0yNZ$MTNH zD6XqhY|6EuNBd8$k(}%z%=k06c+J$~XCitpc^!VT;L4_=WtYxJy?c2|Bw)8?PR!1! z8>4SkMZHbiy7J`PsMt>zzkl}o+3B%$!@Rj_Zg02shpu>$az?Xh;jy$;JS;Oe2V6XI zKJH_0!cvU|4gJZt4)1LBn_O_U(PEy+)kED}@M?7x`2Z9{O3Vis7?%KxcLfFplLlbf MNWO8SI;kE4083qf#sB~S literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblue/press/GENERIC_R0.mp3 b/assets/samples/kbsim/mxblue/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c9bc9a0fd8f54491e6efc8d763af0c83b9c7d0e2 GIT binary patch literal 2088 zcmd^={WsGK9LK*i6Ox&2LSe(mJk3L%?jhzOlW9oItuDn777I%^8f`MJ$C!wUOrDB) zD!0Ve19@5qB}!aHN~GM($u9St?hp5z{(yV#>zvQ|ob&no@cEqg`*Y4myq5g{_%{S9 z<-|q}x)G89AiWE){{f62(eWe1KVoB+jk^QU+04iUhXeI}UkSm`2HW8QfU&tpgindx z_s0Jvi~lxAo_*fB$%FxJZ>Zg4#*h%r8D`i!=BxvGR#7-Jdz_^?01zbrX ziGBd!>qhDHDNs91q0&Lx`Lh)O@}=9|X`M|59=5NEHq_IZ43Ll+7hi!X6axUr5}Yt0 z6obJ^3k%}W_1gfz#EZpW83EKYPNK0js~i#N9; zJaQ%y$rmt`<^Ji~bBjal9cMKlwOuFU{I0Q)^s)4XrlAiH!`XJPIvRP;pHZ;O{X${a z8_f&7H`TA4o79avruvjtvsAQiyshN!+}z7}_hd7PM-_AA7TOruXWQdqz4FDG%oD3u z#9VJEkzn+C)!cfo(Ve)Y=dGABk*w|DN55}(*Am}iPOl#-&w6o7Tpj0|(A2))pq$%t zN^HrQ3-|WM5<~n^8#>+A1O@a1%IS$CMKtx656rvS%d2oVPO$4pp3Xa>bewoC_W_(y zP<73*t$+d6HP$iVKno3}z6zZ%NV+XK#ASydW+#`dZ90S@{k$y-4d&XBSf_T&a&oCb zC9d8kaW?tA^Qp%<2Z>Yi!M_sbFV;`GP_Mnc^JfxSd)+`8zmpdR$k5*y=xysPTdoJ6=gu*$YYYI zFWT_U0b;2qNhTZsu!iy@4iu(H#IPj}K^8NK(ZB1T+~*Q}!gF{|Db$oD#Wx0_0GUXH zoigr`Vp5(-`2N(>e2EW=vf z&a|y&bFs{PQLJ_TyZD0UiNjq@7iF?9%#aj!>#`j~Zfg2gz|bf`Z|uah0&N%qvyW)5 zuRGW)JiHyR>)NFm!LQz1yN?B#obcWn3bhEDwJ4@?urw zxJKcy@T{3%fInUt+UTEWq+T_NRj<=utDb;q5s;;Uf+r0G{1Du3Pv_2Rx2H!~WSl^+ zvPS=MHTC|2t#xyYwgb^R)&>t%w-|!YICwpGAWuip-;N$C&3N76i6^OOg~X6^l_;0= z_LTZ+wH8e)J(j^%kc>S}Bc37JEo|~ojh0Of@2*z%eduu+=ogf|(BG<=zY^PDd0&dj zRo95mKD;H?HJMu+cqol<L7Resh} zB|w^GvwU}^N$4bh;+9MYw|E$id6-XiFgm)7LD`j8rD7M0Y7LI-*q Nk=p+GZ9e}={sN|aJaqs7 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblue/press/GENERIC_R1.mp3 b/assets/samples/kbsim/mxblue/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9de474450297190cf2ad8b580510e8875ae3d5fd GIT binary patch literal 2088 zcmezWd%_V0bl{nnmJbx;2Vxcm1`Z7d2OOXQ7dU_m{Ko}=c3Js2`nnqH85$Tco`pF{ zq(Oz*&WVAc0pt$mskXu}iIGD82S<>As&&qd-8U+Rh z#tw#g84L{5I0V{lX600s-)NG2#G@$pezKb1`)Ws%8;wkYZ<++>zB{kbZZp&5Yv*M3 z9EV00{eKsyr*J6Bz59Llea5+q0*NdJ9~hkYDox(sy$g(^yYu`bW?KIUEl$An|%M8Jjrphi16IqW1BqX%9a#)y% zuih(sdbvKsl$|WSG7_9lzQ-k1dKH*&@JdV)DC3xuc=FbL8?U(8Cl4(3`y|xv^~~X` z>ZLCQ&5<^tzbj8Kns-xk^Ga{&H}*WXUE3JSCK;ZX{7P#1)VyOsJ(+r^pY|%gJ~sDL z1eeE|ZJ|X{TlLqkc^9|jS*eD(Y2LIeV!xt~y~&!EH9h3q-Ctfl_PpPB7>XP#EqCU> z(h@UoyCdU?;w96I_M89NJHNi{ZNyugvgH$@*$*u;{tvLMHJ+C-0#M1TDxpQ@#k6GFrStQvInSSS4CFqok; zkLkywfNita8K&81O|9E`Ht*FMJ-xX8ypNwtzE$t9xYZh)mT~s_R@K@p-xc5QeXQ~O z<$FKkoaqjeX0yKw{iG`&_4D#KFM67k|3g%?rPDQ%Z))+0_N=noxfue&xp%A`8-B19 zaC8VMIez1wqa$n{7_i}`)3vJ(8jN+fPW%aHTz<5`fxmtI!l@z!UHsyQ4o-Tz^-PRY zR_nnNTT8nazkFjiaU(;jOY5_sg*rW=$1dJbD+%&0#OH*iGOlSx9LY0_jM>o5& z_$R4VmANHWsOZ=gPbs4_s|w`i6l+B5#@Ktzs**su(XYFfjS9QT*GkYS^lE#Bp&@>PxML>{TC4#U|~O zz8-CY_AZ_NAu`pL@<s#`lj_6{aQU;^v;$$%T-Q>L}{Ar{n#w> zR^tTBsvThx1KXGwPC(uf&~ z(MIRb?6uwPx8BwGbKdr+YqvH}ns2)FuX^sSBb}UgYOcGZHGg-(W^%6;=PzG_6wc;mx* zh-;BhRDNTvvHaf!u}q&%PG>vF7P!!j-zs-Q&h~WUr{3#(U;n)x5}R~--Gf9|&C=Z0 zTQVki``!|%yr3A$si9%A)4!l)r{PsCE*FF5Lmr3T>zh_Es5(`!>T@~;*33HN+o{Rz zuBu=w_Iz!^DLYP&B}+paKdK7d*>org6ho>FqMdUs*BI(YWh{vGY+q_2e7kF>*ri9) zsuoRdm}u;xbA3*Ni&XB^&7nmnCguid9!>F$G5XN?79I0?ab8j{eRZmf4Xty!nI@3e~X;(Xzh-O?BlByRE>R4obx$B$zM}6hu>ZVIe`7FIRI;G9-GUt4$9sKZCsBhD$=q zD-S&tovKsvs&{75tra2x5gr+mVqzvdUEES8qGGeyTp16$H7&Y3Cv^Y+|Kg8M!E3@* Hg9HEo$_8rT literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblue/press/GENERIC_R2.mp3 b/assets/samples/kbsim/mxblue/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..81b1b62a4515d8b116d76fbcb83f3fcb56467636 GIT binary patch literal 2088 zcmd^=dr;De7RP@GmZ%w)6&meQsevJ4qG`1nrir0Rn1xiXkYVwcXkK$DQf_J99rXXU@zyf1ESt`<*!k z-HmqOzwwWcN?5I}UkwNVn4o}zpMmu`T0e*3bF9wV7eEN~b-_C0aG!>e>eVLvf)pGHm+pu=#2uvwEMG67Zzys8i;FO7222a!Dc}LNZ8d9INZJD z(3&Y}1&DQNRAG*IJ(&rZfPIY<1HL5!;cM1DpI@#Ix4Y|L1SIl*9S~$@spO0E`jNE7 z-{$dQEz8vK@Kj}RWl^QzDgm}2rc-%L5T;Czn+bf=_SiW8vV=Mj9d*Hg{%&jreY7+# zO*b0L6bwn2^Gv}fIw^%mlILdNUSS`Wrz--yMuckNO~M9?O#bXMI#$9@oV4tJ#7*dCnu=rcQNARW|j5R1mRvQYPx|Yo_yN zVx2N_SHzv6lwxR!V+gYxAywV#QtazQKbkR&GId^l&=9dcRdWw6VWM6*S1M-bzh)Z@ zGYPse{feB_l1F7CW91~Nj*-X28m4GHWGvoWO)WBh&_)8zzjl#dgLYje&js?ET~Yc3Z<(;@SCkLMy>8{FwWt&XDlf3 z7#R!{22L1RgqgptF3AW<_ zUu)r4-NjPp?%B#G?%c8Yp~rXVHj=*sWhVG0$_cH8^77&58;a)a93G>7$!Y3M_2J;H zG|S4MF9&*hWXPWOMoaJ6AG6-OB|w*YcRlLQu)$yOI(J4ZSV{Y(aq^>?_IvlZDt*n- zxw=?bFk|?ewFjL!y;Wb5>Q}H+&r(fY76IE@$>GHoTn)QZXnkC{)f*PL;gdpJfc1@= zg2n$-6_Q&IxhkBN_HGw0_%Fx*Ls%Ng z+lw3v`uN598~&EKlyGQM79&(9y^T`Ztoy>@>R5%w=LmF7j{NTPi+m(td_tK8ZzLiP z9LHRg_0hLh4IuHu#e(G5R&w*m>Yf8eA8ZDaQ#+I)qYavAY96sd0?fJyZr;%B4U%R0bBv!6L$@U_U(nC&|6rfUXQx%_mH=+G|$$6 zOvyexMg~$^wZKHKQMipOAR*1NbY-Il8xsyp9DFEk7evGPe7^A79*X?)Y(rG+cw z55XEx2xZm#q1R*IT+i2@olvboU~=C1Hin^Fb6=Ph(73Ea+HmNp-N7d!#)~1%D26x6 z2FE9O`?4&c1i~&e+hRrkK@)9-C9KTU&9r6*qCYv7HwZDh#yy*r-S$Z#EX#VJcw1im z@Xt%qaMVrV89z1GLpYr-dQqDO6-Pf4nV#nDr~$pnwni`9KTkvWopu5&FSgq}!FjF= z3OLdIoL$p1Bk1ZYsLnnzrEUl;n=0H`cK7M-B%MalT)yA0<|x>lSe$SY^ShRlRIo_X z+$DaPD{q<@ANwf2ki8*=I7WDP(JaA-+0waxx=!C=ZQbo&7ojJEwT2H?1Hq)$ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblue/press/GENERIC_R3.mp3 b/assets/samples/kbsim/mxblue/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c47362b7b03a5f8713f1985094b929ab8e378a92 GIT binary patch literal 2088 zcmd^={WsGK7{I?~l3g@!GcRRCdD*lnBGD3K8fmkIT1<(exVqkMFXknN(UO;`q>QI?S; zS?kOw{QhJJ*ZvpkyB-Mjkrk$s-N%Mb0IPI9MnVnm3KQV{y|ITT7@;bT5}uP*l4+gWD*vfABGP`r05kP3*l_ zE!qtGi6lTYD65!6Senl-RY`3~X9~)F&$TtqwAbbo@%n`laSnlqpPD|q{Mw|_yri9U zB4_rdBb|ir@^#pgm*pe>c&|uqz3LoY?o0ITyN}k-#QN@Wd<1f^W@0Us9i@wz?Jz*) zVFL9|BA~6rGm|9de-DHP(`Z4ZBOcYp;oCN;$kdObGmUfP<9NJ!UQ6)35U&{OHB1+c zRua*n(Gf)~G#l5oFm2*pA#wzcJYma(nsFnmwGE1sZi ztP$Jdz8~~co#zKpxDlZ%^8j+6&jMVlu+Al>3jb;fPtfI&%R}#pei$Or^Oe#!q5`(I zdDa{iteIAMKowLm2!qhhlY#p8DypeapGw$~_b`N9Iy&f;w1 zxv3r51_K&QRx4Umq<5ZJn(#Gd#CpOHP*2oL^;q*OT^{VOs>@)x!D|x=g~lUg;G=cS zY`Qg4F5ZL)7H9UryyFmEywX}f4@1Eb@VrjNRewOm+~2dx3~ zA*S2ZFNN974iJ-|OU={c;}PP<+4;VY2Ar?)hZPxxm_DoS7)@qw(MY5F$URgm9->W;&a{a$cn841PkY)P#gK($JwXt z64*DQ{J0aW_sd_RP(#$uo1}xf$4+Z(L<0bbnZ9qFfKEukJRx@~V@0y4P39NfO!noF zMLs5c5k-y$TQtHF5ZBpksq6NDZ{sdKv#>Y$m6Sp!awL}JhVQ<0sk^mfFLI5N;vUXr z%M4rt&)dg`qU+?~mqeg&bhvo|$zw6W9@RLn^Ihs{oLp1}4p-w%%l)P;pijj<3;FIH rx@hbdf$Wq@A7<%dOfySY?x!gy#Z$Z5beUM8=vr-B@y{=-_)qW`uFik* literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxblue/press/GENERIC_R4.mp3 b/assets/samples/kbsim/mxblue/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2d41a4dcf3ad68367277c6cd2a16ac2315d15904 GIT binary patch literal 2088 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/press/BACKSPACE.mp3 b/assets/samples/kbsim/mxbrown/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0bae8fa2d71e8db9f40a5f94c64099277308ed11 GIT binary patch literal 2506 zcmd^>c{tPy7sr3bkbMSYNz_<}LNjKpU6d`dHOMX^yJQ)mlrhON$-+%7sdCqg5=bS&zd7ke%=Q$j9c0cgnScL~% z+>1f>j0XVthXC~d67Um>e!|F4;QWNWS_U>JY|YV{C?t|=^q-bscqMKx69B;f=)*>X zMfxZ4Z}FVJ1%iIPh+aPra9>8zDQG<4!a8rtZDHkqEDdUk9E< zKbEs&yaP=#d))%p<4v)|Kn{oVS@Ggu4aHue?uv@aQCG6e#jm_J?>Q|ajWC{u(710r z6`38y!o;Lv6fw8X=m}VPneEtT`-YUXEXvd}Qvt1>SEXyP>37xH0!tFmY5v4vl|bup zuD0d+yZIDypQ-6PqA|p8ooQCr!anw;@u{;x?i@4qkXqfD;1%HizM|%t)NqkN=+Z z>4S(;xc{d-fV*sOK)LRu=Q{&jAOH$r&62=?SOCbUDOrABiz@u4-{EgbP~Jl8p6iwT z9CmKMI3S%Xyl-rnQOUu zsCjsoOn^l|@}Pka_Hef1^^y}_)X6pyv6Z5kgI$lvkectrk!-iT>E6t7ElV35m}-6IZX%~9OcPrkowJS=%{pYC118~ThQ#FI?|SxXLDArXXq?sZw7P_dKe z29~?e;uApdxZCfPxMXRM=hL@ zcGDBqdb(6{F~UP!!%b^0zOBgD)Q{w{LNiTZT57~MQyq+2Q@0Y)r56PxFQf#`y(M>i z--R8uq22i!%BwgVykXdQvC~md4z2>lJCSM zHkLCK?-nasNLw|e#o48__ckH+OudaI%nnOecet_|rG57Ox6qMUmE@B`W$jngtkzf?$P zyTqt_mkAjoY>~H{5{f@R9Ph`XhpKW%;!{XcQosee0$>tXk+WEYHr108EFkC5fVe^e(aDgaPYTE zxh4OFzJO+BtwucX5qr4k?HI1^O+=A{jbWDo`Sg8cS-m6mG;In(iO5N3J9#~cjC^fQ zyQFxGkhhRFa;@+P-8`ru%mv}h%y<;Ua@eV#aq4dF@96Dn&A0q!Q&D*gl$5t?@}AuM zunGAqRzhnV@RC4&IXtH}otNdX5Rbu?fxjegxInr{R#~bt;xpGNy?UfflN{$uHo=!GTx;NI$N9+CyIsYSGhsu;LZY7%Jy&B(Ibx!d|ZEjRW_W%k)yo} zGQS~os-&u=^<4_(&6@FpH9L~$=I2p(*t^g8LZrf3Qw z+X>Y3n0BJJ_USo%t(2^#HpD^@jyoi$P(9&<)?QN|P25I%YjeI{ZXg!l5X2DMI1G-| l(B~)GL(J~C9c1CCCaad-Q3=)ZyVZn`x)T5SV$S?u`3vB8E)@U( literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/press/ENTER.mp3 b/assets/samples/kbsim/mxbrown/press/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..6e4f758669be123271226765d50de64e1e32bc89 GIT binary patch literal 2506 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 SD!BWZXs!G2-^25Nl)nMXc@u#E literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/press/GENERIC_R2.mp3 b/assets/samples/kbsim/mxbrown/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..620526682af42c84670d28dea8d45ff9110fe036 GIT binary patch literal 2506 zcmd^>X*3(!7J!4KW}=9>6^WrpC8lS7h8Pl|W--+qrKN^z>~Ld_TT>7v=BPPZbCtTZ zrHWS7(9%+hQnZ4$hN|Y)TkF0b@AdEd^}e;v+H39eWAC-Tz1KO+!|Z;*e}V}iT>hEk z|9LCLNGRJQ^uz?jhixxI1TK-EuaxxLKp%)RI+Ts(V>hP^#N8hUKN zrbtkMv=~WNW+&fb?NEDC?#_CFo3vaP$67$;;RcklfXldCxP@w=4N~4ze46bC#MbMg zRBc~BdPSU=SKFud{esu3<7MMs@6GUe4p?I`OT16eQlS35uB6 zGd(jSwt73vePjWcCbEvBR(hMZSi10jNY>QY)4h-={rFxz*5=B%2AiIT1FUW`*HHe*VLb-Z zt7^51cjymq#J$(!v(cqzJVisDyDGhMzgF7cX%zY4FkhtG@k+F);rg6L%+go4j^8&n zdhayk>9e-%9|bRcjkFTj)ahX|8~r!qPHIBl|emI}Gl~P?(7tTD|h>h@MGPh&h zzxyCeF~6@nwa(to&+{+&OpjL0x6bL^513%s)WPXt9?xnS zt^5;qW@N)T@x3hFZ?D$dAAgEnlcOzNpC0elJxINJ{?dechTCPx=f1LM-OptFSaUEq z?rp1)kW21feTeD4kcF_zcJKU^-^bT!fV`U}#<+A^r?dx^?1d(K*c#GrSXC^_vgKwS z8D(EWkTGyk&v`qYQ5*E?i!)S@3;``+A}!cxUOU>Iq>q$oL_o5HQfC)?Z^@!(4PQs=HNlL09j}?;`;J5HmTh| z!Kxc3)Ip>6rz`u}5S|uf?T1bk{(SrQ540W-27K8LY!fNz>(%NzFj@;&3*U=?H(Wj6 zvnl7XNE>wb`W(&zBP(UfgHmq?x* zFboP4<&{7dml<3o8T%DhO*ssM0{HSMQ*P8k_@UhZSR3RIoA#_VO4$&Z;+dIe>r}J_ z7#^=V7i9x};iWWH+8mdVBPxl)%MPc5#-P991c4_~N}oDHso`GZ>3L;@(2HLjTZgh6 z2Qj#*P7*s8gii=OQ^i7yz1jSdSSJsXNBhc(Ii%_k;vt^=Sc*aYc|J}9H2<+7wfHiY zDk*voHPIgFD||D{$5LE5i5>jShTqO$P#^~QB0^f4Eg_v%03!{!9wG=m=O`k}EqWj* zH~@wZIpq^fX1F}^C!^2y8rikgWJLtddU|@de~qWRDGR@(kB3sx24}M;Zt5DG%Pc)= zXkTAmwYK~6LF{o+bhW?bAeMX=C_h57qF|gHyrK$4cSEfar}FXmM}^NlE<+)0z^zx& zYkk1O8duG(vsw#&Z&osg$9WBbqTZ&jA<9Vgdv@*Y>F|hA53zCuU>dC=T`YgmElnA% zu;WXExdtkX!Hob4i6Etg+S+f2e8fz~JBJpAh=#LPIdp2;N2KMWK7qjPLo_w++BeW-#Y?oyNt+D@xbf3-93CKWh-N2;<$=RW?2l z7EhM3MhoR8kjt2b!}XO!8%iLU;{+#;n$~~Y+Wf~GZDx)6KXaZmjAG?+P{%x%-`Iyt zjltXEnx~Ra)@v?Jz;c>#ol)h}#c-0*liG`X>?rB2*%nz2=$I>n*Vm%JM3QqQWw07u zv23kWAW>)F8eXXLh+qp<4((!Fw6#gn)AV2qNF!NFY2nufCX3~0mQB01;C%k{RMHTC zA-X`BT!17QnwCDj+4elv@RYl4zy56lNxc`x2-qnVNg1nPytnZE;037gRJgbreNh z&?|;ZSV^VjR<32`&8(}r*0t_+DK%cbnfrctuRq|;+|SIJbLN~M&YAiAawKc44&cAB zJrflEy(j-YqyYfd0~r1YN){8O^z-+~ki%CT&AtQa67z4%h}K@X1b5~p`A90z0bbZ z#@+(x58a~-LOj>x-;X$Sy*iRs>9{x#o+*$+lKLMO_UB+X=zZ(WTm)n3{?}7Y>M3ku z?@^VaA#2h0w9emYNo_`}&wpD{zFW6OP*gvj(mb6$@WE?G^4p=$$1vuXzS>0PDPH!n z8tW3Q=w4|vt7-D25qs(*N=~lC6<_REZ}nJtyoR1+eWm}}zS_BTt$t&z>tc46zkj#a zu<=vF4{O!GMCpw0e=sXYVAj;0KN*My0ZF)&j>QmeiplIiH%cZMICTqLNN76Ri;sRUnrr`q&&;NxYm97Oq?MIn#W=*^xF_u6d}FmzS){JQy$i)Y zKMbK_;4>05F7QrEtmSf3&tC+*Se_O(LDv&ClXI+02jOH-EW zaB{)CQ*}+xt>G}dR{7<_@ngbXBV>-W@(&O6Xhjn(_NROKUN3zdRyF44U4CwA9PipR?6K7*fm#W!!v;mk)37f2EvyI?Xp7l85x<4 zb*Ie*;YW?;If2xzhI8SMK*$h0YCz6^@O1s1iyB#2v~n*mq06<3ami=IdigjVQDAeY zkY+qi#HF!ZY=AZu_3UqllfY!ym(1m;OWOU1bjl_80nqs%=YnSV-y zLiYQ<_8#bv!Na64rebxyJ%U)7Q@9zexLs3Pt>n|YR1TLZeA3(KOe%$V<1#H?8i+8M z2g3wHtqU}{^2`xbn{tNQsCnq{KHhz`r*0b>XQFQqzSuC*-c42>+fLSuWDJErX!8FY z)pyo-Ir5Y7fy^=kzFt^8<$U`tJTIKM&!eGTV7kDku%=|3PSAbT3T_die3KZi0|!tQ z*|%=GQ-w`@F&ItB&rygeSyl%hqEK+Lfp}Uk$VFBsQfRrb(5z*kH)kWZ&u_J?bUbBu zskA0PkCtsTqu**fBBVr<=xL;4qO*~KWssNJz2cZt+pG;ZvnxVF_G}@-P4kB#lY|#{ z(~$@>&j)95iefPjxGXgTP`F1C?HC7}s0)Hn**)I#>*ntMQE6QKPJ8Dzx3*_GoLRFc z^gRJba_!m1op!-he(P&=K39kQ=7{R3C^iM5V_(qoS}PpUFKX~Tu}YW-Zg4dwfDca; znL%TN;j)%e;ygN58qFf8!5<047u2OKn0i|naS`SUvTvcT3aN~&ieQcI#K`Wf9t)#y zTvZIc`XSe88`|nUi=&B5-?lRyJPl>qBw|UQ;`c%}-R8PE+P=OP9aVS=51ZsPc2|vM zVf0+9{VSmTMoB0X%#SC>!dk#qtG?4Bk$mkW`LG&To~|^8BRn-V^=jp_|9mO5|116l Dib)Qg literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/press/GENERIC_R4.mp3 b/assets/samples/kbsim/mxbrown/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..94ffaea9674c71d8cb19fc7d9689e5aa91c568b5 GIT binary patch literal 2506 zcmd^>XHe5?7Ki^3K@7bl1W@FLKq8UQm1bxG5{ll0&;+H0ei4aC00jaD2vUR)kPzt+ z5m5qy(ga18E+9=r2NWr;jiO#eP!{gY-4DBd-B0_>oOx%?`Ebt6GryU4do#NW_)iFD z0>XECk~<{?0Q>p@z5gcQ7jS;T;4j$z1v|Tp9V{HJ^)Ncx+5%7hK1q&_0IgdB0Dbok zmyfa;e-Hj&-tE5x$r@cpHc$Xj%{r8s?uvl83IHw@P&?^ptYV%>X8_*X3cA71Uunw; zrQjcwmNCHavkWjOf)*!Z#g`K>UwJaqD=*(}FOL-(t`{hcM){hw&M>{3nwnZ$o0>|? zW8rp)^c|)}(~Cd3wU$O%F^>P*Rr>0GnUc=c)-R4sgiaB;s z2-wSFqiQ*1?(@}Db+>av3(8$}to5ssA2#kGl()VgRh|6Ox}Kj2eY&45H^Zwu`mEsH zt@t}}(AptTQBh;$+}x6E^wElrbkFb~6n0%(M2W|fpN-+mY1abN@KMQo2ke&Jx+5}| ze#~MtsaD*`DCqt78r+uVfap}B41lQTWeD4pE2=@blH~Fg0TxV)9`nj|Z*d}^Mc>|J zb;$y-W`F06A^^Ok?SG%YB5><;P~{^(E0ss3Js^g3q?aoEFfjhU13&4|88PI49jWWf zk*Z!4a~pDLtm(S!gANhHQh&IHSo^Im`7AyhcFuIV4?a0I5+1QVpf#^ML>y9CcikLY zexKXov3_QD(TmDE9@pX0Yb;S2VeoBY;plmd-AH|XH7@VLiSOnwv^C0PhN8W;+Y29LH!DhfKzv$vn~lE zCvm;qoJ}vB)a`@bt$tnQ8u~0Oc4jGhGh%$O*6W0%c;me~VYFvLK1>gH$IF8{a2OWB zd1IFKeMKcyn-;y!%2x4J3-vfT_3Zn2*k;0KD0ik&f-`aJe*44(E%Uf#2-Q{r0T2*P zq85)Kl&Se|Vib_UYuLFi`Vqkocawv(Equ|=6KQ7s&9~jNtd6I<`;H)Y4Jpu}d5Kyz z{O5&D`auTl!WOm6^URq`e)^+n7msUyx?AOh74W-B&}|<_jn*pe7q_K3*a5V~bLv7pU(I z6js-#PE$L{n#Pv{rN*_4JcP7PWthu~Xd0TRh zE`kgT4YT}2q{0{XgAYqJ#;u%O!)~Xq9fr&!>Ly zkw1p#V{{ZA=~nfz3+F810}Vt_&?kf-eM8YsweY-{E&Ouz^D6AHKW58;&4J(wax3i0 zuWiX7Q8*AAM95W7u2Y16D(f@%Jqm7GquFfwFjm897Qr)hVzW}i7lz9tQ@6J-NMGTv z#I+hJIb=H#jIS-+^nUXga4{KFHmHzP_LyIa8zB#i)br(<%b<&qIxhMaD&PnO?R0v( zg!5?3#&`ZPYZ;MyHzjy!ovEk+mMmUs7Uy$!wVvtZ{g18xHEOYM$ZjV5aI*LRktuR>n=b9naf4UUJq@m%<>ZC&= zR`wjNKqD!AH|EzEF|CR)8Lmk>OC>wocci()YSuI?$b|i8NZ_%6B1)fJg4rK$oh*fT zpd^v_AmcY{yn}Z`r4r|J-(iRJw)+jG+^{1SU0^}*SwL9Auh-TZ@zeRYo?xmIeOd)> zDmZfez>R(1dp&Y`bF+aJovgD5EhmBbXu*OW=-59TZbxHx4JpwT#8aU+9_VzEZn(m_ z)izS4*CdEKWbm4EhAdoAwUgaUiNdCS9q-N=Z#ZRX9C3(z2tL1T=VyoTKU7{{Obly2 z*-ryr0#(M`8R$apw|7~cx6|{826a}fiKxN`cz&>)i?v~O%2kMLum}aGXbcG^8J(8pkJNB@n>y9Ajb>kO&-sHk;A}~o9DX&zjG0L3swoY;qw|?KrI_f0 zFEGe{oG8XO6DiZ?IUIrviuXK)MJO^xMON(9rBjKhnBSyQ>df=8l3k-jvXNp+-9!7s zXzC`nWYWKq-Vn~U9cy!sGT rA07gSP_Ioz<3tsB#{Oc zRv{+_h6a#3wC1$4!X!ot{U01b!i~{pCf^&FCDyFmY}mjcm|y*lsgNf`^W-6cd+odJ z*%y3}NMK=H(5srVcg8k3<~IxqY|I~PnkQ^}cAk+xeWJyh%iljKzA~%5_{1xX`BeQs z&FcG?m`|lXK9wf@{o{v!6@psF+Ba_y-n`D3`DEyuw=HjWZhrXqRP~YNd;kBNveYhr zmwkOr(3Jnb@BhmBvK$zd*U#R+&;R({tnd5ekK4ayzbCKpvf%&!=Jy&BuZos<0ON*f z0|Tp<_${W%dt5Xmc&_rYu8leT$nfpKTIf69v8^ZA-t!Rh(G{@*{kCU4rTHR~jf zC0U=@KdmxsdemufYJB9I`L#DV{eR!mkX_e`=B&=|Vwe2WIU&U$LyT7|qH<lj&)fp_pT`3^MU2XEn_BQL23P&0T;LOC@}p0J?V%@gS4%!{m(TFO#7E= z><30r67Mu#i3YWj$=@`#SO$0{w&n62DDL8YydZizO>$G2(U3a5ve?&uMhomHWA*xy4ipzn1O7`P8(x z9m!l(dFf%HQd`4kU5nbB^w!TedfMrQKWBN?dj3CMb$V-NX6BollRmwjzkKD#sLYvW z!8`9f`7cr7I?d(zx(N&nTv=gL-R3|4WvVxG+THd{$)IGtWv4hKXDmLUpuo~p@-Qzg z*D`X`*VkO27!qT?t~u?^-}VL$1_l#gVZySN*Tiqe8I3Hd)5}jiEs2S){4n*@iw#qO z?99*=IT`w;To?R;T~D_1re1Ga>l`yXbk&U=EkD23ZvVT`Zk?iCTCdht-d@(IZ~L$9 zJ|nSp-TwdAcD2lNUbInr>czdKe{0ufhOUylw>s{%9QWO4JW;RC&v#8q>y0{O*{d$5 gV(BVvy0-qu_NGH?w}@}dey}nNUh)wtM~A080JEO+6951J literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/release/BACKSPACE.mp3 b/assets/samples/kbsim/mxbrown/release/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..0bc7d05fc7bd5b09e893667fc46b0ac11f387df2 GIT binary patch literal 2088 zcmd^={a4b57so${7NI0AQ>-+Z_=MV5MVpi;keR47krYrVHFU(Xjx3*QB{*wzzBles`gpZ1QEPhy>oEnCVkecrAbe|V0Cg@tv-eZH|b1a6P#iFmf=TWOYq z;rj-|=R0q)qcJ7&Yv-CM0jXf3>wPgtGr(8FlvFdg+APAV@w0HAEXVq6r(0^XZLiZZ zmUV^3=bDJX+t|R*VYp4<=pPizPpfq0S5!XxmGiYWVY0waK{YoHAQI|N${!!u5#ir{ zV00YJUTQD&s=8@Aqm}Bnf5x(jq(&~@O+4~W>d&}aaY;I~ko*egl;*S$)0S{TJN_u; zO@-pS(}CB|4#!aC`d7=@(B@N_M;{CXQ94uIRK06XEL4_`po43Y$cFvSIQNdoR@K7E znUvAC^dmIO@#dgJSB}>~IwLnpS`k_GS~?J0$E_{#y9fYA{hkOFP}IFAOn0VF!>ri1 z3*l~fb4FtZSoMGHij(o6gWglPGE^qSrWO){?!1c6;XC;zUcaO?A&E58U0u4L!Sv*z zvqL@#tam^h;cVOtD@wv|!6+9F5BGEEihHjc%(@#d{K7~#j5r>eD_U@YINRuk4rQPt(8fcxEk0qU{ z2xZ4sjn1h%dQRDEBHwB#%W=yuOylA6cMfrf z6(NkheYbMga3bO#o~g@nd?J+8H|kDZP5F`DIyIRO-BU)te#|U=0GE=FNk?0er~n8} zs4HKpPd7CrAvW5y@K7IrxNlfB`@DQ zWD8jTdJfr-`wtk2VPR#J)vW#0vprnlvFVEpCP7kSliCuz5A%sIkz)4)_#|kTC{&dj z=&`+!vH`5M+RY{mQFe#74$e08%mtBlY3nR5;i`^v)X>>$;DayAi`^r?7jLtpu?y4Vy^);Bj7%Zk$MCc+ z;S(1`Xp*a-+NF5c+U=|_*H`1Bd8J6P!on-8%Q}IkUJxYsjdx#G-HR?}3SW(F`0j1D zcLx8y<#$x`3qce8#RsnAu_g72A_Z60_gAr zf+r7HWL%Oz;aFve`vvqZ27!T!RhWjXRG&W{nx~NY=+~pfK#^05@oktyYtJGIBIh-dP5J~eYwXD+nzjU~)I8({-`=*t9 zB4$aq_cSRkPB%89I`;5*P>wKSn)()PgSqn~wcpzik2j9R?TDf~)H%1+ zXUS3y)sHcI%&#tF^`dS**EY13dgOhvhf;fSv%?%L=Z_9l3X0B%I8@~n&0y8RA3cv8 zzFjNL_K?qc7^JaV3Ob(q#$V!(K4fV_bAuz_*RVio*jou4-LAayQMIq(4Vg9-^%HG{ XjH}G=SULKd-7;9I{O8Fj|Cjg^s=$74 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/release/ENTER.mp3 b/assets/samples/kbsim/mxbrown/release/ENTER.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9d2492862ccb60283368d48fdecac8e50864adc6 GIT binary patch literal 4596 zcmeH~XD}SxzkpY=1PNhTy{sizb+u@TPPElm579fZqNXSjEr=49h(yoocGV4nDA9%J zB1)7f5oHl|Z*pf|AMU63%l&`3_nA3!W={K^`8{*anL|8D>Hz#tw7i{t{l%mmk<$y!$}7I*%Eyi4=_Xp00{fL z4+G2w@Sl$VD>d=I1ySGCk&=`E$op3FwTOiQd|oMmGb14pIrkiLSn;g@015kM_Uvqj z8Vw{WDCYc^Ih(M;@SAQLhzgXONNk+s)jOq8k-Y>Yr-3MwH#VN-iEQpV_N4MEMbL5* zX=%x5R769Gzj^;Gk*WvfK0i7?5_Q6e+=}j5>#An-C3+A-^+CAOfE(X(Kn8ea^tGV_mkJk?J@4gw zizqum3*t#i2M2(?8Et!14gh_S;3ZaV0}#5~T-;IRrTnHpnrs+*c3Llq10dYWD@BV* zClyPbxhPrz!S*3tvMqb^_F%Zc$N=J#NG_w?yu2p}2OU}A*7gAp=tjT^tB4HR(eGA=PX!KN>^TD3x7o}NVr zuJZo)YX}@hPldi+1|ND=RLxf#T_}*n%b7fzJWe*w48ywCR=lkd7Gwiu!elA+LAvg< z)*2gvn!kb**WQu!YE<300vle*Zd&0|GcyxXH+5y!{All({CMJiCT$k7lByefG`%WS zxrQl*Nzb;Q;j3ML3{G}NXsau@awTUtxr}59-s@4@?0gR@C0c3bP$KYJZE>>l5T1l* zF)`_jkVyJSOO~5yj*z7AuYE@Ki;Uz(I*Czqa@I|8Im&JAtxzuDGJ;Oz8aa?eGBBOl0e;#34f#DQ z+-xD>FbY6c%B@F!S#0U*OIrSC_x!^07(95v^w(4z(EipXNLJ4{V7EO&+qxa>P_tDp zL!tQBkTl6WS37;ea&jL-ef~letJsa?um-BeE1`}l`GQS|yRkNRj7VLEvBjQkzFZUR zWm5i$aoP)9IwiS=^e(9wA(=H;-Ucg3Yu-AK>ua3wy;FU@7fTN7kzpBIieN^CfZbiZ zHJ!2~2(;6kA5TH53UwRRK^Rd`B~pp<#axN({NaM?yL#P2y!eD6w{rPIcHmTzL^XKG zcZ|{7xo<{V(RQ2Pu1D`l_94C}Z!Vv8LIpQJoh_z;0QtRr5@LAWR;zJrtLH$0a7HBd z_WP6jtHU7x`gHy#YZdrH{>b%4O3Lo3h`7SigYsVUBk9`FZe?*rG!?Cpj`tNiLM6($ zG~=%!768-OTj8$<{4G*pfYCA+*ts8PubSqZBY5xh^ag2L@+o%?8jA)(1%^)( zg-}eZhB*&XaJq0H7o7Ctwpqq13)6iWqvVPyFV(%7kmn-K+YHnbSZF|?_fJfcUx@o> z*v|yp6Jyyy(YrnqHtFA-njseZhmTdGo0MjEf(S)EaSB0G=10*@K3`0}aZkvP%}u|R z8~XiihWipUK;GI*zN9z@5(WTJXcc;Ud$lb3_sim`DenU;|X6<`&|w8yQa{!8*i83 z*;11lG*!4PDz*~5w{zNJ5qeMwmi%)!1L^ycDP%MJzJcMg_6th=fFbx81insp-zbf& z|F0pMFb1q0Cp$WfGG5$Swv6W%V;jdK?ar4>@3gu|lH^DW>ZAo2b?rY?x;sBA;ASNkea#mA6RS+aa+dh-%xRnJDaXC-fb&PuSRprbvtE0@4E8ox zgS!>xkq=qbQYw{U{p(@E@SH~0s%bEX(5*$CRRiCX9?#XL4Y)*k>*E(v5a-E$tjFG& zTiL=QmOxFj>iP2*{2(scf{x_*dt6XFl7MFFe!3YX0~7QrK<`6Yj7V?Z8Q$_R!0Qg* z*JQDtEL-H~WI<{6m5RHBR3%?%$nZ@R1-1` zT_fG_tba63*Qrr3RILN`sd$$oW}Y6G_;v8vtMXS3`FEZCC+Y~RtR^9lKuNOvkGu8K zPon=C5(uO5O%v{~^7^PM?s$~W9Hg1zEX_P=vadYvzDlu{9j;|f+HPyxBG;A9c)q{T z@ijXRkgh7Y6uMLudIv`d4GJ`+1F%}$v-CEkEh{H+Q^G&reya^!EZzXzFEFQ0QOeB3 z1guFGQ%(zq_cz_raNf_u*_&1Q%1PAg>Wa2OI-J(qJwT|+EmpL)*yM)Revt!h#|=)L z#p)!jx?~UxC+qEVB%wdsM68~fo4vzYKU=3V*M2Z_{zNi#cIfTLpUmUB1s?K-{l_2l zwF`kf;43bXDsWg`I_yD1b%{xnL%AIxkd8#xauX#|5?@?o<~Y(=Wpqew1T4z{?~hY# zASyUTHjj$%k=bpPfYm;SYVjqAOc?Lr>G!>2-da^z z3)kP2U_0#o8QZAQCAUr-(o|SNRkMCOyj@!T%LQ|L=NhViK(Jj45$-q%RVLb=VqXQ|czzfD686w_LW!_91^mLBHjD@HU3X3Z0lcpfS< zOa3+F90rnl#@7!Y))ubj!A3DpzH0cGCmsIPO|RPqdrR#(y3Vyb!qj8mvgJ#Wjr50E z=ik5kiS+_a#3W;T***51EGy}aKE2iQIq6KN&f&AK#Ujf$B=cX-i{QT=9n&>GX1wAW z^gx{T$c$C(yNtcqZ_7{q%+-%#Xr({yiMSM-oY5skguis4;tet@sIFUEtKhqZf)-go zQApsD1aJwGnbN9S9Rm;lZBgb%uCZKKNS<;?Ib;33Z|&iUkH_xF>(M&K%Dek(etPJm zmlI&b8_tKO@(x-8Yo@_pf1Q{Rwh~7^Pf2aB_`{EH%0teb67$byG-mfnfazcO^_?N9 z*K&7b71oQ!7d^BZYgfUaLJN&N?RxN=F8~`H<8tbf`39P4GY%Xa08D-o)D%@O^U~P; z2_b*99Xkx)?#*dyf8A_@<0!DDUeOHBhPIjXP@&NuUK3=JPnw_wYPQ8hAUnLGl?YP#xs@##bU8~z%46Gpp}#n;a>q!y){-$Lt=o7TH4T*Cl z4ANk$jhE%{IJ*U;0aBWY>ic=$j!03iA2 QH3t5tg8zSDX3lvy-^@32j&zgN z3j8+?=V+1Jy}jEd3jh#3!16oLzem&ekbaNtU8YV}&Ne^k<8e4p&)=5dbX}Rf#{q!; z&4-3_EQaRRF&5(=I~ABUZuz}GbA5>lmW5c+!SR!cU`VKBF(IRd!C<(o-qAjG zdB0PE;pq<4KFKT#nVKL)rfThx0i~327Zyix0Fb0mv@VqlsKz(0Be&bRP7=BqZk5k` z3<7}dU4YC@Lw%^0v8w2SNfZ+hrko;r>D996)ZUgP_nAa@MLk6gL1IIy5Cq03Vfmj{ zQ#|UO(DPiso$!)a`C2GHpY3lAluWrc|NP+6944#5K#YD~Ag+zV*Nmtryv#Cj4hQ9h z{PVTZDPzwG%FLVprL2?M0{Jz*5NLG4nRkPA?LBj^_0CWSe?#{R5o)HRQBhyIz)z_-yVAg0Q`2JveSV$ zG-XGozVXs8ZT)KU!&{%}Zc^dxY7RnDt8gyt(H>dc+o{#!HNI+gg?-GNF}doCa4vlq z6SSDyv0|&qd!EbtOrnWK)U!mrCAhPA<&3V68kz2+H+!s3l;8gino!sdrImDc{w`?W zEH?-?Pw?F`>wYr6+&HtkF?Xex`|igrsl|m=Y7qI8jwJn7eCP!uPY;`;CxTI|VMt4c z?yrH-ma_8Vh$zqfzD-tI%6Mnln5+JB&rKZSM(%nES8CrGZPuS3iRNGtoIm8qmF%sG z#+A+G`UL76Tv0rdAL;dE=E@Lsajfd+=(S5#6v8=A=Y~g)B3uBjuP#BNcmSNP!H=x2 zKQxV{i_C6Le0WeC@Cg@w?YJB+#&o48+<|OGg#o(&ME1OuzbT^iS7oe-^DUv>bfxSJ z!qyrflUx;yN-GOYfKd$(-|N?Bh7I~SSnBOH2m;Q!Se%kiF4YNl6QLhb7D1*PowN`e(!5WBC6x|aSK1q_wq;ILcMpt z>$x|#(A_uNJ+LtDBz_$*J60276fc;=D;JHQh>c@EGk#5p3!QkQN?u0U0|2NBL;C3W z@;+PSNE4&lC<}wwI%Fi0;KFgy?@&QMbSu@)gdL{F5Dys$e<=OS#&UkxY~T;|o>kiz zOGD6@V+<1lzM4zkKKo-DN@puqsW<`hkSJIW#4YZnQ-l*Q39sx*X{=Eq^8GN zE`$O7&nx?OyvKfh^2_*TC7qF6F{BG@Gbz%pE#}F2G-m~1&%>^>I3z=7-H!3y2Mv!v zx_S2MXRP`2aPB}51|&*g=awcU_gs3A@G%1-ZY6(-P@SZ;f=ro61E z$>qgy?_K?Agom1T@MaQfUX6*Kx(i7w`H3kri_*v~bk_Nk(ihf?h~{xk4X+;5xDgbS zb5&C(q?toF#B!K&c=fQose^J2ZSlmY(qp2fa?JcLo8XrhKIfX>nLm7?ig(ReJzdRc z^u(8t$_C#atu>-}gF93#k5Oq7kY;=>Oi1Si!`*q{;vI0N%=#su=_3Q0sIUuUGKJsO zHd?EVGQPfob}X>r*=KN-Rk)Cu4LyeNC;{O|xtGaO%1lqzv61H=lu8i? z<0@ne=LVkiCJ^0);$~6#yNHd0*83heD~k6 eymNgIQ5ddEgtY#HFSO0m&3Q@t&rkLIpZFKE3|h(n literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/mxbrown/release/SPACE.mp3 b/assets/samples/kbsim/mxbrown/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d1a8a8e4f3e89b6c7de2248fa0b3813aedf146bb GIT binary patch literal 1670 zcmezWd%_V0bl{nnmJbx;2V!Oh2DUbaP(ol8A@H9N0NQ2cIoz<3tsB#{Oc z*5ytN3=JT6>{rWL1Ctmj^nY*!iKJ?(iF|Kh>egGi-QWX5#hNgq%)N2X=E!Ze1}fx;UBYBhbp|bJbrHN{)%1yJp89WT(j@!`j7wD8Gr2oroH(8vNjWA zY-_9I_UReE?yY%T_Wzs%0|N{5rbNb0M%`E0%?!P&IjgxQ`A=d<$y$``A%5e`B*R93 zL1Q1$8^&ytRVOkwFnV^hXe%$sV(wPEQUtwKJuAVth|Aw#)pAJ||+zrheLVY4gKnAvf2a^;X>eP1I&z>YBi= zgQsuaOZR=#wdvQ?T|wdgJaM;!R;l~`s<}5kHfux1YV*p()9XTIR|lPlIhuWK=_XBI zTk#8b*Zt48-k zI`&J*2Hlg@mUE^C?lv*%sM@pj+oU}_5@NhLg`z98oEkTr-V+vE#GuK$@My<`2@9Ja zr#YSEnZ!ABqxW9V5W^!L4IZr0Jzgun&+0jI=5+9Rv#82dJ0j(NZo0QpUFkZf|C^{z zOYc)}JU>7CcXsowheF}AT(>SOyfS5OgqCD#lB37PLWSO_Jhegq0M}1!MgRZ+ literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/BACKSPACE.mp3 b/assets/samples/kbsim/topre/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..710ab530b501bb74fb9e02c12e9cc816241a644a GIT binary patch literal 2924 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/GENERIC_R0.mp3 b/assets/samples/kbsim/topre/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..00990d37a7951c11066f2515b4c261fb95d0eb7e GIT binary patch literal 3342 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 F;4f4%pdSDL literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/GENERIC_R1.mp3 b/assets/samples/kbsim/topre/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a3acbe6faa9af73146bae9e057d3b169e68178a5 GIT binary patch literal 3342 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/GENERIC_R2.mp3 b/assets/samples/kbsim/topre/press/GENERIC_R2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..798303676f1440f3aa1331b37d51eaf6bf04d04d GIT binary patch literal 3342 zcmeH}XHb*N8i2o`6cK5LK#+r>gkA!nNs-<`dO(^2Qax}Ch;+mdO6UX-gotzqMM~gA zq*o0fMT#_$fS||$JxCK!j@+4ZXSjdPzx(IjXJ%(-_MP4L-F;?f_xLca7x+&M{XBmA zImYs{(F4E*WIkT}!~GrjU+ItkC5VMKPP8xw{V9dywpG^&+$^#7Z{B#SjODqGg%0u2LpGHF1mm}} zJoy>#rhAc86*Z-P?A}-KwFcObdblTPlk)C+u?U87*VI&O+nja>v<<#wNLY zKk^Dq$nxt#0;lx%F}NN^uXJB`BtZcq`~bvyhi!N&ha&@8S>(epGQ^ot4xYgL(ZlC(t6?6NMou889z<{@FR>qLx@@uS8gHjV_n zrMqBRZue&K<3oI}62Q~^NWGZ=T+EOy6-K53QHw$TcqDi8z1$RSi8kpZRAKd!Xy}LX zQv9nonQpHBNJDjXNWIxyOU;k>+S#?#q2^?`uhXg{F*fKh?p=3&yWMS;m36YT?O~ww zZeDInn508-{{qx0`E9CU=~w(Yc;wU+QN@@sj<;$8IijO={Ze_R)y~N+0RTE(FbzXP zOe2I#>Onj(LG6+b2I<wUXF5$V5+ zCVPKF=QYYMHctB>iGd2>*8X;fmQX)&Y=*77jmx7dyfJ5uO&QtPQ`OIZ^)uDaCdh7* z=#V!leWkjc{DW(qg_PweX|>zrF#7^k`Fh~CyXozX05W+tXQ8y?-Qm5xnrU+WPHXvd zmg65`$J8v1_@BE3nGP~zoI#J;VaP%Ri2ijhQTkSEeFNhnbJQ(1+8ynl?d;~Jb~IUi#D+VZTs8Aj zMYK$5{*69=afjXfB_-EQ!V{y~^grM(qtyYoN~W_?)Z@1V4btn$oMSs7ZXYZ*;xFGz ze4pC9SLt(xH%Q8L(AVHY^+@%8*l>WFDEsHxsswxb?Ka^B7c2A+dtwL2D!j}gk4L_R zx>;~#A!k0s^R0`;2H{Wk2BR5~f;|6%GD}G(5%w}mO%I}v<`sm`r2ma%&22=@!ZPuJ4hGfM92WBUhUHJM)%kqb{NI zwTCqFo1&572ge7toWF&}eLfZqn+RZ}xHpL#L{&b&lK%(&>&$435LOWCaZZ=5Xqlq7 zwNgl8=Ed{NL8?Bq#%dgBL4>re`;g0(55N)FNv0PgI7(_7R$yg`fy|VYeVKV!!TC8d zCL`S3@D4t49HAy>8A*pL$r28HT4O(cx3#r$hJ65x+eaOR`@=_H#NXjS+7s#oWc|Rrvf3&H7#og9u41l_`WLG zQK#`4@^0?$d{JOX=D9Xhc zFYdxjUrYJ>-@>h)#e_Dtno4>zr!it(Yh|pK_LFfJbl&bH9-*wBZc z7(zxtou2R|yF~XqXmmrDH;6>%qRu~?p==n@ucy6@DlrH-r?&J7UR0{M%3o~WH7MJ$ z=K3pD7Z%e)RCuQrxw!(#u$lC*7cQa%e;tQv4nBwPLFQ5k3`9Ugsilej_`@f&Ko&E6734RQ4H;@fs@if~* z#<)VVcj6-?tT0MSwb10QAVX9aUUO#LAxmeBYMeHlM2M|zr!JwO z{V-)K1M`_{-)7G~n|(dicTv9mYUIHaUUt=PGgNYgTE5PAagQ9FzeuE=+Id67Wi-Wc zV_nFC$9-?A60-@D_M)uLNgV7tvFe!}hsH1-&HB6v+X`D7c(h@W- z3WEKvK%{XZqeC^M^3KE?2?N#u>{d)sLMCFmhC~NfswClAXvyfw=@=zw64M8Y@kj65yel%( zb*eddj@1c1tLa9SO{?Kl$`$bSZ5&Sxf1(Mc#J^&qDi0}W5QQOgS0_kIeo6+4e1w0l zF|Q)urFC=3&;|g&7I0*PvMAdx7Tk#yx!zI_$O=W3)dZI4fdC`PnnaO$n0`T{_ZM7W zL8BqJ74I;*Kx-(qVyqlup-UoVUf0m@;C1g>0XsPRSyqax+`lJVB<65zZ8KlS$iP*X q_U3p(;@`j4%75U*kY4mq1Z<`x$6^rxy6Zi|-ybtXF literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/GENERIC_R3.mp3 b/assets/samples/kbsim/topre/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..3f56111c399ad712dde285024c7fb3823017394a GIT binary patch literal 3342 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 QCItY%e@Fh`{db(eU#CfVU;qFB literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/topre/press/GENERIC_R4.mp3 b/assets/samples/kbsim/topre/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..723e752c75442657d01c64507952f89863cd31b0 GIT binary patch literal 3342 zcmeH}`BM_=8pm;sQcs9WqG*^xT40J`xpgsDP)|s>U?+3KYoz9$SF3}jsAQ%HDY)d4 znz^K6xOOtb4K+7 z>e0O!Keyi@d8hghCmngitkDShvYQt`#I|b}F>?~^{H>)x;Xrv=DWGxJPVSq)eNHZ_ zD^rSYV~&g$XXU;gZBcdb>Q&?&>f&3_e5Z7zdX+m)hrNv=e~3<-b1}@hyBpoYdj0pz z;Cl*l@hkJ!VVZH5e))=R36p$b2@e9aXLI4)41kO?8u8hL4mgFvfiLp;gdu7KoF7B$ z*06XPAr1)X*VM{nE{1uu&9-`$=Q{0w(@g!f<=R^R?#A=84fhwV6Ml=lqIIK!bJ5wf zaV!5(b41&RfjL_2yV)Y|iV4c8-qR_}39Rjj~Gc9%BUYuQxT&XH{^TBq>tU&TH@9M!vYezk`(z-bM* z-kzzo_^e=)R;z|R$$RzDgMYpDN$Yu?fGBIfYIW0L?vvsdXs1@__J_DG>Ow9So5@T0 z>iO&BE3ZN`^b=H~GNyHpX?!;XqAQ19bL{v8(0YO{lNvJFZ1sD3>Ef$o4P0@Yp$-m& zsh@gol%|0zb(2n-y4T(Ph553jDITV&fhz&B-%T`K2CYn6^kr2m`{h)aVQ;JR_R`j6 zcS9I&(JUPtwY>LHD)|j=S8XUT_)K2M?72#~57Mp*x@hl#bK2_QBB{xPCQ; zeVtxtNYByy!s(cv_paX!snb>5uh?c74@bpe0;nA(aiHg`4>iXp6bPg5nIJP0MAOOu z{-zfqcq(oHWiJ`0!3Af8*)m76VW8iSoo3^z<`X`5jo z{Md6E>^qA{g$edTKI-MUwGuC%?&iD54fm$Qv$+z&KF8;omQMOL0HvP^yZn6^efrcl z{>E?R9E{OKSQ-dt2h&qAs>k4ARNTH=Wr(xCRkAj!{Upj6zQgRONH>n zB9$!lXEc=O#XsrsKFTCQ%^SjT)D|C%grVAH*#XktQEzCPjxNkhxJuuFJ$DEqhs3#N zp3zMwLUNtM-)z72EfrTmMhRj)XY$LtXK$AroPXR6>4ueR5zP(Vr_&~Af^l42TzPKU zA6${1sOK|v#peSsi`n^tP!?EzhOl)oCR9|dUg^YcYmz)tG?O8n3R?(%?)MxoiH8CJ zFrX+^wnwQjPAD^&*3p9l(}Ph%$oVO0WHS>xgh~MzRRJwYUDEcJHF`>!5T{*lv3nXGVas zTuXVom%Q{7DE7XV=K{e^t^p_%UVO(*_4_csJTebW@(&sU7pvBb`Mc!Ti6LhFJFP~L z;n_1_#HmB#{WF{Gc^DU#DGf;>r3}`MRk#)spuCEytB6(myk=>4QHaVXuBIiYxcn*2 z$g5Fa#fcnKC8$Qugr_ga4>nmO+N-tOpm3(}K-tl2BS^m7s^PPe+o083^FM{w>eirB z7;)V<0P-wnDz`m*Zo`w(j`s6fj)a$?vO8M|m&HZwbg5}uTkP9TCq*Twx1h2Yq%&p` zzFdW#JMLaxI-tu5TDF+!F}CV5868W$&wD(epbF(0_B*8P+|qR=;MY}zlF^W(GtPGGemin>!2rrsohZ1y=BFx3s=Q%lLo`yq zb?eGmE~>l6shH#@`jm-O&TA2*ls6^h8_u)B~8Yp_Xb1Jx?iO*{~dVl}Yc9 zbebWeYvDj-MBQhKa+cj{#g+5tUS*azDb~wOkL-fEe=1T>UwV(AnTP**^g=4Dd6^Rp zV*7TxvKu*euXTMWF9eeh>33TolZ>Y2eKOu$nf%g|&?}|5_!9Gd+nLSd7)^%cB?<^; zw<>1%I?ib>$k-*{l-Xl=9zDm*5{1m#jvFszi*f^S6E`aDNo@`DcY}oBey;)sFs;6A za(o7lxCz478-42WJQ>B=kB=3P5O=|Z1sNOq9rEzj*>o_zFZ;E-BOs~ho#n8&qOMne z{$m);)ZF}q_*+^Tc{9dbSbdTTPMf8)dasl5sMRY2*$!2!K|A4p2phrj_g6*IzKHxt zfG-)U#?rEy_?6{OCAnhia`2d3SN&PF96XlfihmeIRpV@T@cZVq&@RU)nBQkgl9J>V z^-8KK$jGe+NlDR>^~RV8ZorN0OiT6cd|+YKP}4Z@6S8btEIJ~H#Y}gmNacMuguOi6 sK38kijc`HJ0c+iGXUU{df739&9c7P{dso7c{g_ePp z+F`9ngjiDBnwE)@R+?63g(>9`X4`LRXWAD#<6p4*nR(`!d7c-~GvDts^MDJ*BH-V6 z(PHR|nx-O@0RV;u@Qc7&jP}I<7eg`2$=8GIiM6t^wuW^7SP8*0Q+6Q$0PFi6$;oqS zKN|m)4E}A9##uUs8o^pWfJM7wivd6*7KKOQ1=b2x2yn;=@ah>CvTeh z>W{1JaBbbk@l1eMo22SqbS%rekO5#3M@JKOv^|+(op%hjqvR5M*3Wyctjft=8wH1I zrxLeJTzila8qEcSp%U#;JNUJ({YkGmGi~v~=I2@5q&%`HJ%sU+f;idhZAJMo$*pN6 z(>|~#1y14kU#AC0Q!COrVO~C^_Y(y;J=!mI+0vWEJ2mayy?p!)sydJQzo5U84|W*t z>nnDi`WhPOm69t=A%0rWX?sr-xJ}S4nj4-79<)mR@&_Wi=4nUnvn|}GOt-1A}*wtVB8_+!yV%6v8D+h+&j!G#i$7R$h+eEa+< z7PO^tH{+@d0wnf$e_mII2=>@yQz)M>>9UH<2`Tc^-SP)@c}o@AC$_2Xlz2kQlTf$j zE6Ih1)$vwd`jQ&m#xDnp0I}^rYFo$9sC6(o)7Y>~aT)$-VO*1u;!fN9diX=)yH-(;tSY4-b=@|OD zRmy|LA{8Z%w{WxYb8Z?n_r)9PdB^Rt{JY*$5%hh+2O?NuVERKIg2eYB8!a_Ap28O=8K82ip^xW|Ff<$<4E$>79-P}EU z+-ByE73n?$|CH=`V*zfheeoq@toieekT+GK>!+spkNSJc8rHm&YBm?p--w+P*C7;# zsTU0f?7Ey-YST@L;fWFZ>%GH>Rs}bK2W0?zS>u|F)c(256!6F!G`@hR}dJd$H^suY}a}yN~9HT7n}qkLEvWdyAXSp$-Q1 z)l#{y8r#x)-yb-%Gj0}lBRYSn^mNLu6eT~0O;KHHPxLb4h3tGEXywqDyw7_9&yC}c z8}!>ZOnz>Yx+UaEX1aO9A9n^j2HV~>4 zbvhF^h}qkjvB5NpTJN~@@%;on)gi&&w;XKmSBLK9hff1xB=gGLdwqr5T#nwEz5IAZ zeZk(cL|qUmU+^cO#{Azzm=hyg;9)J2l-L40n#+txqTiClO_$% zrZK2pO+#ZJUFns?V=Xo@!_!g$ePIfVwjM3|b3-L~hLEK*+lIOMRVpEqjGUT^oZs-J2TVg^`s#TRlL~Nl!2OVOGP?S=G)>6CDu|#UglzLH8 zZJD9AQ92|_s9H*Gt)-?+HIAvMx61G3J!jrO-nW0h|IB>OdG2%0bMHC#p8LJex!`Vo zAMoE0!-FCY-o89Iq5uFH1Tg7(Z`cwg@t3m10(#snimN2 z`TW(atn;f`*@B*f7+Fbhzny`z282ZU{0$IX6%*qpW+6|WJegp8mxadU+_pTLdWPO& zcR|EQf@M{HTrv1pBMgmu%TP61#V>8AH?JrcT`A@%akM7|np~|wuH&eB>$^|+*H3b^ zHxbT>DweGJ^J%4#Go-XGSTSW@M=)0#rT3#9t7+VK!{CD(MATrEYTjDuaMX@PMadTr z25t%HdKI1w^L4Y~V~|9@ZEzhMnb1zs4IQlSmgxRay~);}Ts2tKswXB%@n?Gt=J?8E zl#y=7h>gX}6>4kPGm;^tHJqHl_Z%^3Ix)5RbLdYA#cOXOxm_arr|!DWZMPa_wEnTn z>Te6#2wOZD&4pFywRjpF4k%j-0nq6Jv{9PQD1}gbE#RJ^zo@6jUP7-_hiU+?r_pTk zaw)i5*rx!fh^CPCasi23CVCc(vJU%_gtr#56AHFB7J8KGK`$+MNP~xN(TEBUY05~% zNIlqwZ}&E?vrW%9jr$w#$Y?lAz13xUL~v_^=rt`Ni4P`gZ?#LiaP%-;v#0Ysn8O{A zHIz2*ti>#2y5&4muohu?_=niraUCI{340UWL3ait?^PIqAa}3aEQ*J;1b3E4`X&CD zOX}=@-w(#~P=Vi~2J^z6Wha56NMm>bL?UNCt#Kw#+_=O91II=mvn{KFLLH_`$Ly;~ z(ms0gM-18OcCUVm`HH#i6@}DL|JJoW2XD!4pqpLtA8cEKp*{qpJ>IhM&UH_bg|P*} zS><6$H%>`S=O7$46ZppVzu5om@uj1w@~2l0R+Ma2Lbe&N`I%;xps+Mv`=$kosogZF z-8i!&@Y(};=`3Qv#iFN}GNIB--;L^vX(PyS8#;lfwulEK2`GQ@Te_>7e!qk0kY8qr zl#3KOqx@lLfmDvzV~?yxeTiV>0{3ErIAAWRg40|!Ed8sS=y$dsy)!F3hZJuZl}8^c zq?N3uep9=ltLz#Tqhp#`qU*QxKYg!wNMbLrg{_n!f#Uw7+~dcRSQFSMcHGoI5altAwd zsseGJ97KKd!IVwNJc~U8vlcRNI;s4K6qAzyq-H>JB@3Hv7J6h&ozh10*9ylGA*qO* z08>T8re3*8av=J-+Hv$eW59XQ(#7N(c(s)kvXMxM;*ALKmDISzwsiJPzNSq1M9Vc60hd9)_8L&x(+A1D( zWxz+bs=nA2Rwd7^zv7ePfOK5HSFHf?JDsNu`<|FG1k>!BydR47z7SqGDTli)rC_60 zf=mRf)LXdt{mBT#QV*-U4fQW zZ9pXy;#*BTDnuAbeC;bDPgg0Mi(}nE5MMBP!RTchf4j#>)_dK~eQITI2mrv`=a!v* zSCCcL?YPb`j6qEJ;3s@c?ufmZyNbZMD5uJexKh~k>D968CgShas(R8Z6rVnwYIn0` zA;=ttmm)b({+x%*Q$IXoosMUaFRY)#m$;RzpCfQ1!0k91?H~3?sj5STFsUQb4zty1 nW4Zufk_-SMi!XkLI%(%EX z-{#_CcPocpnLh#wEf*BpXT5zRxOn~wXI(eNdBwNfdS(7P|8SDbUYs{^aehK0Gj|s& zPwKhq=a%RH{{xB_e>c6jIIq?vRi zm4PC!1CNTNnP@%amRoIPrF8u(-iPi{0hiLY~|gXLc?%*curz^TPFwO8e_)7V4bInY_(4 z=4dP1nbSNsV=Dru8YXP8I5O*M)lDhal1uj{*=@;w^olU z-Oy?FWQxEH`J+yUrk;qsG&x8sR)wSL*7BCcw?EGESgE_?XO?KSyOPHgNmUE8)I$w( z6B{or)M|QS?sAottFu|Lo$auC2=AJ`6Kv`Pe(v6~t!Rqt<4uvrvn0xL&YD+Fw|pPd zZED)FhO?$F(pa%%VuH^*4=FdNMrMiGK@NVK zEm_nq9;$e`GKD+JjMe3hN@dy6&V_1=pUvhudvf|Dfs+pTWnl{1`J0t3E33DMI47Fj z*>py!#4sgy&3W0|9<$GtU;pa;E6zCov+ShECt(v#WvuE*SoUQ1v{Je5qzSLGqOTeY zCGC&QeZZi(ludujti3|u*(d=quyDX{@U5;@_ZiGKRs$b8onUr*R9KLXFeCzCr5socX8uFx4G*# z8$W$=Yip#C{?yrLHB0yH`}gzrx3cg2|NpIes=M#qskwQsj6pvIf&zt)HK;5Qa9API z(W@N5?4eGSs|v` zw$m(gL?mW*tqKds?5h72(V5d_sc>n<(m$zcDwCo>G33#FSybSUjzM7u1A_^$xMvAE T<*Cb>sF3Qt%g>zRLpE5BuxX z|8;c4FZ?}ApqMYie^KTvC8azz{`pU3*Cu``_3B|%6& zhTfve4F_(>1X*iOoW;U$P;pvtB%8}lDGQ?m3*C(L>pDCquAdaSb6afrnk|7U&yqf_ zxcwlI&F`8e$^v{$^JW@$&bFG}`5+?XoPbZo5)F&Y^~cjb z()Wj_s`BSf(}gS@y@B-?IWvFR=8ETl3)X_Ja0hg^Ttq(#jQL zoM4(9+}JxSc4?%HL~*Kdc=5uGSIgXXY9*&>Us?00a#EN`=>Ol7j)XJM_}QzZ`{ev# zRpaE&Jxh181{v$>e>r>U=9V3|*WXY6|CZ;UeNWHs|J*)evRqbS2hJ8-xk{yQ=&}ec zn%LPW(ZST+CMMRBVROLgq$z7orC0oyo!%uj>~?Gy^VC-*Y-pQuAyt3N+=MHFyDjpw zmy3n3lV)BiT)K2Z*22Tmso|P(=Tdv1#@9aW ztJcoGIh_;jvOejrT;nqJSjb#WU5mFOp2DF#w?q~hSKZWN4XrpN{BxD`U)My_L~FM_ z1t(RM#l3yQW4tD-+keP%Z|QlO-O=tiu~))i<;r7ajfak2W!%8PB<1NkDN~PMO-^gg zGZ`h}<6W8=9Fc~i);_6*5=_fD3UnGXx+^}fEHDUJv@bzQ_o(D$i`|yE3^Q zZ}+(InK@}n$!T>iu%F^nvcRJEUt^+x?9n7)_UUGtat1B)jPuM+ax7WYbF@8it8V1F zoo{>v{ia+<+N3^bAy1{h^5(@)JQvK7o^W|e%<46vN+DHU`ctD{<=ov+GqGJ&yM1p$ zsgvSeEl>=FGDw)tSN63vIP}2ynQ8kh%ic)|pG4mlxwlctqq~VQ}!?^XeMdtvHP^>SsUdiWUPKtwAMgFwCm>$S@TJs z%9fc3Z2vH&BUR$&^I0lhW`TcR9ko2S-G=iv_haRx!buB{i9eZJQY4qMAcixkB)|WQ zzEA3(&u!~tc@LWCvFtTFaMFC<`@X6dN92wvE?*YNY_EOOD9;IrD4P}7Z}ceGN^ zPAt8!aBoqawy#nC?8)a}Zc*8^#o%76VmK&<;u<7f=NqrFHJ99@y6nqmKCb;UFU?sh z-4|DTRlLjVq{=q43!W?WIXHTHAD_5u;ePR$+OmwPR{f9vRLpXJrRlRgBV5d6Vyb9e z;z~BpHKy$hjXhc`*?K+a%(|4dCdt|P)Bl&I8rkb^R=owWLuz32df-@E4n>DFIj@7Q!tGBMQ85|6#};Xy(|Leky;9UZf*ca)cxy8wam z`7bWz^}x8ed-rf-W8<#U`yK7EcX)Ur|L@+pKte)#=eq|C4DCml9a&vU%o0m20-Ytg z7#S}1x;Y+GuK1?1eBvrYh13+*hTTeg8B;iTOl&5|HmcnVE1JNf)Vzah(!4VQ%pNt3 zu1?G*XVq-IH}BS%uz`~~KKRD8i;H($UHD2X!e`>$!g(Rbc?63L#DW$GW=JI&%1#UI za@Bmi;g2Ox=s9C&Q@v*SKStAIed=Ihz?6yt7&UHrN??(SP< z$LmM8e#}nO(>q$e>-YcPcIOs`$IEfw*tRXQ=zG|YZAtG1^g3BzUu$rXpWD-#zUc@Tg0O_IdSCV8v+Et@XLq;_Tr zOfU$L(wbM8ZJp*PO`*+1+ z3Nv(OXza3NpOC1wCR*p#!b^{LH?7P6d-?CP2g`%pe6>mstk#J+`pwLEZk?apOI1+@ z#*|CUk>4h2Jb2c_bW!2d1P9G+m1`L{T+~)N&L|xaa3D-%JCBjZjY+B#CO-G=mNwjQ zYp2sZv87)Qw_URC`I34uOXPKz!6CEh>=$b;?VVn9II--BW5}CHlNW{9p9|8Idse5O zBz=18H#SfVnKDSFPFL>PYk25^(bKJufYnW%?OK+6T=-Q&V}x+^)*{^=Y-3EY@yxN^nS>;r_B)=d*}%F zQub}j$~!xiGj;OS4M|nR$zgFW>=TypTv%M5kbbbfF+f#Vw+wq zo2w+_2|<_RgSHDwezo~X8R`x3QZOA4`^BPNJ}z}dsnGk zovgg5aR>ka0Ff$& literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/BACKSPACE.mp3 b/assets/samples/kbsim/turquoise/press/BACKSPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..69c6029e1fae3ebbbe5a634d71a38d45ee9607fb GIT binary patch literal 2088 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 B?j8UD literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/GENERIC_R0.mp3 b/assets/samples/kbsim/turquoise/press/GENERIC_R0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9c4d891210e423478fdddb4b551afb3be592e1f2 GIT binary patch literal 2506 zcmeH}X;9Ni8pi)XKrSJ{ghNDPLV!R91B79S2SfvMs>p-|1O=2pK#)rjRxtuXKs?Ao zF6D}b8%2TlT=Z}rnvPs`SB z2!VgcErxtru4&7MG61Oc0=EAN`8%+`L;rV>eFu3hyeGlS+1AP$i&Yr-vn43iL|JVg z08lsj81&0B_;cZZWtRQZAh1`GWj+p2irz_Sv!w!Rm1acXflni!M!PouQ3!~|;yLA^ zhDyv@lAfMcdt++*W8krt#?S?EKNLzN5|dIPI<2P(#BQj&SUe1o^YKg4%h#$q!S2K!(!jl;1FIvAmwgl8;u~3gn?^@GBqw3|O2p5a2A8&nGj^|s2mJkO1sM6Q z8s%CTpg>ZSzb;4`WnqVao{l;a&-FN)IHtBgU;t+6b-~~y#3HE67<=INI{Hc8?3`?k zF4O}IAol3OTY!4ay|DExUZa(tO10}CvnRN^(cdG_id10*w`Mhz*qGyc$M&do$HNdf zO;Z=G1k%;I2t|8xjX(-%B%^k+n7*|N`0?AK%CkCbuZm`+7_{O*?>qQ;q<4=IPE&Sa zJ873~%B0QQ>Iy>IcAqnfOSxyCvD}N1@B`Q!W@Ju?bi7yHB0A*Q!_~b@%f1r>Gsu># zDRq|{(#nfU(#5E?)jD%p_z3_op$kfj6@I;Q84L@wWj#NN41^sr#F{|hV(%v7&OCRv zrAspYM`P$gV)yX_dM5ngYne@gW8{-LXX2+iKM_51c|Pfv82ml#R``>v3<{1O0m5Ra zw9J>wVG#+YSylbMrjh8Mk%yVV{C7FNBj_gvuG!4c6w)e)n=i_wM8vq03^ZMys=YDU z+924AjoejxZn}6NW99G@U7yuBUQuG`;8ADG=tMWgo6*l`-0jzG-dRimAa+U`gEkvt zte+fZn8pkFsE|CYc}}Aj!txiwS>6>@3msWb3++FNg^RC1*e!d%RO_;ENJ|h$1egF<3Y19v~xfW%w z$%GOrmDY{sH=aN+=9CB#B`TYk&#;fbZJ81kXNcUL3EJX`LCYmdZX?Z36&@OVnJYO)AXV#mudeNWXkt@y(h@7$onW$wE{g zOlcC5s?RAoO{&bdnJ^Uv`*K*FTXNw9K3jzkWCBfLtQgcI=M9HYRHI7f_6Ie9 zVi^i;Z%tKfq;s5>yqR(74^_;-DI81d6!R(V(Is%qJZK;4hjAw4E2I6>v=*nuBPhqG zXG(7ecissnxHHsWg={)MbtPd@UB9CxCRB{c!F-*jtXHix*w+Wl+{e4YSfQz)7RZ(T zwL$%Pos`?GMb420k7xO#4*BWOy=-8MiL6T_ropMJZ*a`WV_R(mP|F zMjo(Bu}rk?ZjPLM4c_yyInact)VdL%+0G*$lwa*o(Q&w3;7Rc;!n1iHVOMe}FjV~I z%f9Mb>C;+HKc9==KD@8P2?`*v@ror4&&X}$Xg63BX~Q9S`sgrqDDd+}^x~)h0J=*` zCRLc@wJS==1!cNrQIjEIcMWoM@hrdD0uq_->_rGZMcFs7aJaq$n&5^IxK?%eBWkLT zBe=CDRg*G{M;aO!4Gp^RL3RVC54OIP~|KbMz0F$g& Au>b%7 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/GENERIC_R1.mp3 b/assets/samples/kbsim/turquoise/press/GENERIC_R1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..2ce90c35983fb023a849ccc4f301eee14feb5b0f GIT binary patch literal 2506 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 literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/GENERIC_R3.mp3 b/assets/samples/kbsim/turquoise/press/GENERIC_R3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a41d3a1a3ef12aa77393b517727e4372283acda6 GIT binary patch literal 2506 zcmeH|Sx^&58h{f>1Of_@giBZwLV!THi4a&2A}IGQ5CjJ>LJkZh>et ziA16gGE1G{p#zHJbU=feY-+M@LA^-yBMb5e=r{&5{0ImFLC1Z~-(}Efw0wig>76Pg zBcm8YGsacvB8?knA1*oY`43`5(pfz{1eed}5AHG;MyI)Z@OkKqe4e3%x3{4NSw`wZ z_R*t9uZN_;+WPA1>Y9*D(vQIn{E*ags1H%vi3Y{Z%_ctq&O1|*8u6Y5QFTTm!0mX8 zIHV=a4x;|~bCa7~CT+}roJhJZazAQg;_s?@Z_Mp%Uq1k8-HA_hoJ%DN9gmU1js`8H zyvJaVl(J5SMrgOEJyz;%W!td@y%^Vk&XslpoU%vyYugg1`hI2(_w$r*NKufmBfP|6 z?#ja*i6nDTPGpH4#Ey$snNL$wo_D;6z;8<=J69y1p6rU#tN#`${COunP4Yc#Aq#S{ zV)L00_+5asCd&&?!e!(0EVC+o>OU?6bD~&JgTF~zEQGSbNYZ%Ly$;W%0&To@-!ngVoM_N}hxmau$npyj^cx4gJ zdt9*4oZnivX#`D4>nJHq_|dOZ3yaPujLIxfL*DrfT18Pc%{rmd3}P&VCc29j6P7Ys znm%}c%)=1w(|WC40ypl3!3c_@*O0Gdu(?D}tKQSYNh4jh=2gLHYF{=3U#q9mu8Ij> zUVysqCY?Z8<$IbRotkG(*ZIbkB26(p*VTQo-4yK0jZ^Y$@r?(cROTBq4$%nhyq^!=mK0B`a zS3vMi=0SCxvI1J5X0M-{{8kp0z$KU)*M!+S7+2hhS+|F&UEWeIxt+RJE{!SM)9cH1@-$De)nI_Rz&2Sx2G&0_eCC89Eq&F zI9PytA*k<*nIC;ie)>A7-+{RXo6g_CaOuX}VP;jWD@}V5F+TYD|20IYR|Q zIy0@`;X)~l+{(U@Iun+<)AS5+1XpJlaglbjeep(4M)kF4 zH}Rt+>vM}}*a|3_h4Fd$OS#zQ-YdtU?NZ9UX!$3cY}Vb922R_tS*Pq;a5)qY(KN`1 z31A|VbG-DWx1j<6Adki^9Kwh) PZTz2)`}Y6&vu@ybftXGd literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/GENERIC_R4.mp3 b/assets/samples/kbsim/turquoise/press/GENERIC_R4.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..af772ff0d64e4803004e13ff5fd07a083fee7187 GIT binary patch literal 2506 zcmeH|XHe7W7RLV}Ag}?c(&8Y5(2F2Vki~$Zmypn!y$pWEm!Yh)6AME7{msy$=W(UnxDpf_PFNwE!G2PQdhNj*Xk2pC1!C z;Uu0Wf--=_pFnBso^FJofil0~rY!{kI6;|6m>XXn09+~$n_#8^U%G z0?WlGot0C^&@bM+d(N%G*wsSdIU-#Gi$K)t7_0lXNam-(&gyMHaFqbDL=o7kr=EuU zMY)tPNZGBPrp2;rWX%{1C*~uIZl}h+58Y_{~ zSKzU#^_6a|w$S_mRL$2erfp~-tD;Ou4f1VMCTyY|;(9@^8nE>#&$gT`ugP!<$s^`o zgCiQnf{`|MI6cYC3H1_msBl$s09m;*F-!BYjSI_nz%6@*y3m{kD_DSCcks}8RHvbo z<*ZWit61qOx-)FWoW(dNc2hMn!rC4c!r5~V(kU`$v63;oY#$nCnKTe`97YwUii=T>S$PCksi#^=6ll;l`|a*T0oB~TlcCQu$Dq2fcxbUB-ZH~yi!MRV{<1yB)t5&9Lov`T1`SY76++`hqN4Pv z?eCeQnxB58KsCo3&H>8ZOuU=3wU2GplB~?L)OlTq5WgCs1M!=uu9mxc)KJpLLy5KK zk?ozMx5aPbcB*Z3Bf_sIiO#Q}2T7xMU?fEmTXSBND^*RG#hpFdFE5gYmM7=>36Iyv zq&8fA!$+-jcDd@T@H_pgMfUUN7T=Ee2qS8+;Nh1uiN*=<2 zQwCa` zs-n+K$CUa1yu(=Jf@s9{j%sms1jS*PZXSlKDdbwPZIUb0lkVM@fZ;7_Xe^-!K(Arp zb}wh*)*E))#ESynzciQLaE;AL4kr5sU0x$<49zLBGK>3|H7`yT3dGBM<%rM%d3#%H zDIK{Am({Q~0W)(gg!MdWLTlK4&x z%P}1);y+}|zThgpGuI;7hh19N@RVY#Tl^aR+u(lgW)5>aQWe@4?=3L(v0fjCsVdi3 z#R+o;#fe%jD)kA9#%r_CJ-tbI3_%>JgAINPxrhqlC%#72B1wCR!f71tOS=YlEilqQ zNl`0u&J(kQCWub@ns!nLMhPD5ZOAOTc_2LIiW92R6^t%gOZLgUeW1c{p(qNdx1c;f zja|_b;63=)FW2rna`25Yha3c zfFX`p%-Qv|t#Q4DrvpTubWksZ-vuE2BTx6b@II%5!gNWl$ela|v;N&n-eRm63hXY9 z*^vfI{es9?0SYB#`2gfz4& z$&yy;p^k~oG*BdFD$6;*z2n16XWt(+B?M2NG$G5MoGN4jX3B<&ryDU+0YC?T;t7@? jgxw|N2{bWUQNFUAll9Ltu&#b9|9{zd)&KeLy}&;Km-K6D literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/press/SPACE.mp3 b/assets/samples/kbsim/turquoise/press/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4cd97b5fd635e77a3721f1cf61455c57eaee7e1b GIT binary patch literal 2088 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 nQ!&|i;)+2)!p!LIoz<3tsB#{Oc zre97B3=JT6oM>`)g-MJQ`ad{=xLZrDLkt^iRChhAHeSG>n!i-(l*17vzIX3lbO6CS zAb8Qbd;kBhcP|PG?Eld*?~!nM@nfLC|KB@+A;qM=gP}$LyNmwci*~zrFH%xctp6w| z5WRc%*NgW5%gf8{UH&OCFgAif`+_N!TVwet3Ca-*7uHO_`75I>E57)nUs-=xWM;{SD&@~$!lGy=npWkr>Xpej$Q00U>(1jE!B zs}?H?*q%EZ9T?iO>x#l7qyN7r9T8@j-dnD?cXGOG4;q9sPBScvDyuhN>^C*6!$S z_th5fQs>YE(cHgMPxk9C^Xa&FwB+OFh}1j!+UutJZ=D%>L)C&u$+$D9DPhrpRw)4` z>r2U1e45QC-m67#XY4pNHJjaHSLEvCSxcw7?fdOhit#Ho1OmZr25`R&i!9k|M?R%vvT&Y{hLoFG2H*3|7)s1 zdwGkY0F!5DOP9&kjOhzDRe6P$%-kMyTy}pLoB5T;gP>)+d2tNR&auuwD0! z;%uf4lf=xHzMbLQ&t5yPbty7to8*Syde5c)ni+N2ISclAFJF`3vE{B8?_Ab7m*!gS z()5#2?4NaWeoJER=KVXi{&Zbb|26ENd(0M}wcHV!x=x8jOOt|aF5mfhdcEGi>cyx2 zzIy*{%h#X{JztGhi+e8DJF=74LB(4>Hu{3zDy?Y60GBKWhAC_&KbVSgrv224JyEs$ zGs7j<`H?P>UniJ8_mXa2`08Usmc3`&>wpazK}!774YEx0Tv}RO*jrg1oKR8Z7m!a2 z51$=AX~(I;9@7YumQA12maLI$O_i7bW@@`%`(#csr`uAQNzqa_t}XQA)n@VBF{8uI z!$wnQ_eAHIH>Nu$2PJHoHSxZs=QO#4j(i)Nnw<3$R^+^r>bc%n+p$#WW-GiDCRFHC GPaXhJBcj^? literal 0 HcmV?d00001 diff --git a/assets/samples/kbsim/turquoise/release/SPACE.mp3 b/assets/samples/kbsim/turquoise/release/SPACE.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..10c5b6c4c94ba8ba6b3f90fb4b3a9c42520a9300 GIT binary patch literal 1252 zcmezWd%_V0bl{nnmJbx;2Vy1$29_rb4WxqqBmgY*vLWxI_hFm8{{aZ!ky=F`y;dXBx^LQv3F zQ22|B(zMFA55B|G#J}C@5&v(GefZ zz3yH0ZeT3^li}gviGI(=44$Nn4l9K8Cn z@qzT0Wj(4^2MjfCzt>XbWS;!6W8(_TRoi->91f~q8oX7slYNGWTT-lW_2=f){3}ip zJGmy`is%tz@H2aI_3m-4Xn&p)c3XC9+1=cFb;IGOd+MIt*t)FRG+O?!{j9t9^6o#r zJ>OJ6d%L_?#F5yrsh(nYqot2a+{r~^^=>LDSR+kh;h4g-FTyuQMXG6`nf9oXv ztxL@=v;P18JUD^=zUuYpq$nZU+J<#cP)AIm{+Yhzlyvta(WNlj|`Rts2 z&!+A1X0wm)k+7`Xed|VVN8khJA6Ijk>`&j#y5#ox(f;q3p0UY1aO<4&W7F$+fs`%s z=GPMQ!Y}IYer$QqxM$C_syNU2=lOnDt~oyU$(Ksj^Z9CZf_8`h_S-dOwM6gEf6UPG z{FeS=j;Xy2D-ZR1@HGd0z19$(J?p>>W5sgG63<_m`q^9c+wSR$r52lS(92O20ABd!SnYjx&i AudioSegment: - path = SAMPLES_DIR / SWITCH_FILES[switch] +def _load_sample(path: Path) -> AudioSegment: if not path.exists(): raise FileNotFoundError(f"Sample not found: {path}") sample = AudioSegment.from_file(path) @@ -24,14 +22,29 @@ def _load_sample(switch: SwitchType) -> AudioSegment: def export_keyboard_audio(request: ExportRequest) -> bytes: + if request.switch not in MANIFEST: + raise FileNotFoundError(f"Unknown switch: {request.switch}") + duration_ms = int(request.duration * 1000) base = AudioSegment.silent(duration=duration_ms, frame_rate=SAMPLE_RATE) - click = _load_sample(request.switch) for marker in sorted(request.markers, key=lambda m: m.time): - position_ms = int(marker.time * 1000) - if position_ms < duration_ms: - base = base.overlay(click, position=position_ms) + press_key, release_key = resolve_marker_samples( + request.switch, + marker.key, + marker.code, + ) + press_sample = _load_sample(sample_path(request.switch, "press", press_key)) + release_sample = _load_sample(sample_path(request.switch, "release", release_key)) + + press_ms = int(marker.time * 1000) + if press_ms < duration_ms: + base = base.overlay(press_sample, position=press_ms) + + release_time = marker_release_time(marker.time, marker.release_time) + release_ms = int(release_time * 1000) + if release_ms < duration_ms: + base = base.overlay(release_sample, position=release_ms) buffer = io.BytesIO() base.export(buffer, format="wav") diff --git a/backend/key_sound_map.py b/backend/key_sound_map.py new file mode 100644 index 0000000..5bb8741 --- /dev/null +++ b/backend/key_sound_map.py @@ -0,0 +1,83 @@ +from __future__ import annotations + +import json +from pathlib import Path +from typing import Optional + +SAMPLES_DIR = Path(__file__).resolve().parent.parent / "assets" / "samples" / "kbsim" +MANIFEST_PATH = SAMPLES_DIR / "manifest.json" +DEFAULT_RELEASE_OFFSET = 0.08 + +SPECIAL_KEY_SAMPLES: dict[str, str] = { + "Space": "SPACE", + "Enter": "ENTER", + "Backspace": "BACKSPACE", +} + + +def _load_manifest() -> dict[str, dict[str, list[str]]]: + with MANIFEST_PATH.open(encoding="utf-8") as f: + return json.load(f) + + +MANIFEST = _load_manifest() + + +def hash_code(value: str) -> int: + """djb2 hash — mirrored in frontend/src/lib/audio/keySoundMap.ts""" + hash_val = 5381 + for ch in value: + hash_val = ((hash_val * 33) ^ ord(ch)) & 0xFFFFFFFF + return hash_val + + +def press_variant_index(code: str) -> int: + return hash_code(code) % 5 + + +def press_variant_key(code: str) -> str: + return f"GENERIC_R{press_variant_index(code)}" + + +def resolve_press_sample_key(key_label: str, code: str, available: list[str]) -> str: + special = SPECIAL_KEY_SAMPLES.get(key_label) + if special and special in available: + return special + variant = press_variant_key(code) + if variant in available: + return variant + for sample in available: + if sample.startswith("GENERIC_R"): + return sample + return available[0] + + +def resolve_release_sample_key(key_label: str, available: list[str]) -> str: + special = SPECIAL_KEY_SAMPLES.get(key_label) + if special and special in available: + return special + if "GENERIC" in available: + return "GENERIC" + return available[0] + + +def sample_path(switch_id: str, phase: str, sample_key: str) -> Path: + return SAMPLES_DIR / switch_id / phase / f"{sample_key}.mp3" + + +def marker_release_time(time: float, release_time: Optional[float]) -> float: + return release_time if release_time is not None else time + DEFAULT_RELEASE_OFFSET + + +def resolve_marker_samples( + switch_id: str, + key_label: str, + code: Optional[str], +) -> tuple[str, str]: + switch_manifest = MANIFEST[switch_id] + press_available = switch_manifest["press"] + release_available = switch_manifest["release"] + resolved_code = code or key_label + press_key = resolve_press_sample_key(key_label, resolved_code, press_available) + release_key = resolve_release_sample_key(key_label, release_available) + return press_key, release_key diff --git a/backend/models.py b/backend/models.py index 2fde559..8a50c13 100644 --- a/backend/models.py +++ b/backend/models.py @@ -1,23 +1,43 @@ -from typing import Literal +from __future__ import annotations + +from typing import Literal, Optional from pydantic import BaseModel, Field -SwitchType = Literal["cherry-mx-blue", "cherry-mx-red", "cherry-mx-brown"] +SwitchType = Literal[ + "cream", + "holypanda", + "alpaca", + "turquoise", + "inkblack", + "inkred", + "mxblack", + "mxbrown", + "mxblue", + "boxnavy", + "buckling", + "alpsblue", + "topre", +] class Marker(BaseModel): id: str time: float = Field(ge=0) key: str + code: Optional[str] = None + release_time: Optional[float] = Field(default=None, ge=0, alias="releaseTime") + + model_config = {"populate_by_name": True} class Project(BaseModel): - version: int = 1 - switch: SwitchType = "cherry-mx-blue" + version: int = 2 + switch: SwitchType = "mxbrown" markers: list[Marker] = Field(default_factory=list) class ExportRequest(BaseModel): duration: float = Field(gt=0) - switch: SwitchType = "cherry-mx-blue" + switch: SwitchType = "mxbrown" markers: list[Marker] = Field(default_factory=list) diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index 99fcefd..225804a 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -3,7 +3,9 @@ import { createAudioEngine } from './lib/audio/engine'; import { isEditableTarget, + keyCode, keyLabel, + shouldDeleteSelected, shouldOverrideSelected, shouldRecordMarker, } from './lib/keyboard'; @@ -32,6 +34,7 @@ let audioEngine = createAudioEngine(); let statusMessage = $state(''); let lastScheduledTime = -1; + const pendingPresses = new Map(); function rescheduleAudio() { if (!videoEl) return; @@ -79,12 +82,10 @@ return; } - if (event.key === 'Backspace' || event.key === 'Delete') { - if (app.selectedIds.size > 0) { - event.preventDefault(); - deleteMarkers(new Set(app.selectedIds)); - rescheduleAudio(); - } + if (shouldDeleteSelected(event, app.selectedIds.size > 0)) { + event.preventDefault(); + deleteMarkers(new Set(app.selectedIds)); + rescheduleAudio(); return; } @@ -109,14 +110,36 @@ const label = keyLabel(event); if (!label) return; event.preventDefault(); + const code = keyCode(event); const time = snapToFrame(videoEl.currentTime); - addMarker(time, label); + const marker = addMarker(time, label, code); + pendingPresses.set(code, marker.id); + audioEngine.playKey(code, label, 'press'); rescheduleAudio(); } }; + const onKeyUp = (event: KeyboardEvent) => { + if (isEditableTarget(event.target)) return; + const code = keyCode(event); + const markerId = pendingPresses.get(code); + if (!markerId || !videoEl) return; + + event.preventDefault(); + const label = keyLabel(event); + pendingPresses.delete(code); + const releaseTime = snapToFrame(videoEl.currentTime); + updateMarker(markerId, { releaseTime }); + if (label) audioEngine.playKey(code, label, 'release'); + rescheduleAudio(); + }; + window.addEventListener('keydown', onKeyDown); - return () => window.removeEventListener('keydown', onKeyDown); + window.addEventListener('keyup', onKeyUp); + return () => { + window.removeEventListener('keydown', onKeyDown); + window.removeEventListener('keyup', onKeyUp); + }; }); onDestroy(() => { @@ -237,7 +260,7 @@ value={app.activeSwitch} onchange={(event) => { setActiveSwitch(event.currentTarget.value as typeof app.activeSwitch); - rescheduleAudio(); + void audioEngine.preloadActiveSwitch().then(() => rescheduleAudio()); }} > {#each SWITCH_OPTIONS as option} diff --git a/frontend/src/lib/audio/engine.ts b/frontend/src/lib/audio/engine.ts index 7d6dfef..407708d 100644 --- a/frontend/src/lib/audio/engine.ts +++ b/frontend/src/lib/audio/engine.ts @@ -1,42 +1,92 @@ +import { + markerReleaseTime, + resolvePressSampleKey, + resolveReleaseSampleKey, + sampleUrl, + type SoundPhase, + type SwitchManifest, +} from './keySoundMap'; import type { Marker, SwitchType } from '../types'; import { app } from '../store.svelte'; -const SAMPLE_PATHS: Record = { - 'cherry-mx-blue': '/assets/samples/cherry-mx-blue.wav', - 'cherry-mx-red': '/assets/samples/cherry-mx-red.wav', - 'cherry-mx-brown': '/assets/samples/cherry-mx-brown.wav', -}; - export type AudioEngine = { init: (video: HTMLVideoElement) => Promise; reschedule: (currentTime: number, markers: Marker[], isPlaying: boolean) => void; + playKey: (code: string, keyLabel: string, phase: SoundPhase) => void; + preloadActiveSwitch: () => Promise; destroy: () => void; }; +type Manifest = Record; + export function createAudioEngine(): AudioEngine { let ctx: AudioContext | null = null; let videoSource: MediaElementAudioSourceNode | null = null; let videoGain: GainNode | null = null; - const buffers = new Map(); + let sfxGain: GainNode | null = null; + let manifest: Manifest | null = null; + let loadedSwitch: SwitchType | null = null; + const buffers = new Map(); const scheduledSources: AudioBufferSourceNode[] = []; async function ensureContext() { - if (!ctx) ctx = new AudioContext(); + if (!ctx) { + ctx = new AudioContext(); + sfxGain = ctx.createGain(); + sfxGain.connect(ctx.destination); + } if (ctx.state === 'suspended') await ctx.resume(); return ctx; } - async function loadBuffer(switchType: SwitchType): Promise { - const cached = buffers.get(switchType); + async function ensureManifest() { + if (manifest) return manifest; + const response = await fetch('/assets/samples/kbsim/manifest.json'); + manifest = (await response.json()) as Manifest; + return manifest; + } + + function bufferKey(switchType: SwitchType, phase: SoundPhase, sampleKey: string): string { + return `${switchType}/${phase}/${sampleKey}`; + } + + async function loadBuffer( + switchType: SwitchType, + phase: SoundPhase, + sampleKey: string, + ): Promise { + const key = bufferKey(switchType, phase, sampleKey); + const cached = buffers.get(key); if (cached) return cached; + const audioCtx = await ensureContext(); - const response = await fetch(SAMPLE_PATHS[switchType]); + const response = await fetch(sampleUrl(switchType, phase, sampleKey)); + if (!response.ok) { + throw new Error(`Sample not found: ${sampleUrl(switchType, phase, sampleKey)}`); + } const arrayBuffer = await response.arrayBuffer(); const audioBuffer = await audioCtx.decodeAudioData(arrayBuffer); - buffers.set(switchType, audioBuffer); + buffers.set(key, audioBuffer); return audioBuffer; } + async function preloadSwitch(switchType: SwitchType) { + const data = await ensureManifest(); + const entry = data[switchType]; + if (!entry) throw new Error(`Unknown switch: ${switchType}`); + + const loads: Promise[] = []; + for (const sampleKey of entry.press) { + loads.push(loadBuffer(switchType, 'press', sampleKey)); + } + for (const sampleKey of entry.release) { + if (sampleKey === 'GENERIC_long') continue; + loads.push(loadBuffer(switchType, 'release', sampleKey)); + } + await Promise.all(loads); + loadedSwitch = switchType; + } + function clearScheduled() { for (const source of scheduledSources) { try { @@ -48,6 +98,41 @@ export function createAudioEngine(): AudioEngine { scheduledSources.length = 0; } + function playBuffer(buffer: AudioBuffer, when = 0) { + if (!ctx || !sfxGain) return; + const source = ctx.createBufferSource(); + source.buffer = buffer; + source.connect(sfxGain); + source.start(when); + return source; + } + + async function resolveAndPlay( + switchType: SwitchType, + code: string, + keyLabel: string, + phase: SoundPhase, + when = 0, + ) { + const data = await ensureManifest(); + const entry = data[switchType]; + if (!entry) return null; + + const sampleKey = + phase === 'press' + ? resolvePressSampleKey(keyLabel, code, entry.press) + : resolveReleaseSampleKey(keyLabel, entry.release); + + if (phase === 'release' && sampleKey === 'GENERIC_long') return null; + + if (loadedSwitch !== switchType) { + await preloadSwitch(switchType); + } + + const buffer = await loadBuffer(switchType, phase, sampleKey); + return playBuffer(buffer, when); + } + return { async init(video: HTMLVideoElement) { const audioCtx = await ensureContext(); @@ -57,9 +142,8 @@ export function createAudioEngine(): AudioEngine { videoSource.connect(videoGain); videoGain.connect(audioCtx.destination); } - await Promise.all( - (Object.keys(SAMPLE_PATHS) as SwitchType[]).map((id) => loadBuffer(id)), - ); + await ensureManifest(); + await preloadSwitch(app.activeSwitch); }, reschedule(time: number, markers: Marker[], playing: boolean) { @@ -71,28 +155,60 @@ export function createAudioEngine(): AudioEngine { clearScheduled(); const audioCtx = ctx; const startAt = audioCtx.currentTime + 0.02; - const buffer = buffers.get(app.activeSwitch); - if (!buffer) return; + const switchType = app.activeSwitch; - for (const marker of markers) { - if (marker.time < time - 0.05) continue; - const delay = marker.time - time; - const source = audioCtx.createBufferSource(); - source.buffer = buffer; - source.connect(audioCtx.destination); - source.start(startAt + Math.max(0, delay)); - scheduledSources.push(source); - } + void (async () => { + const data = await ensureManifest(); + const entry = data[switchType]; + if (!entry) return; + if (loadedSwitch !== switchType) { + await preloadSwitch(switchType); + } + + for (const marker of markers) { + const code = marker.code ?? marker.key; + const pressKey = resolvePressSampleKey(marker.key, code, entry.press); + const releaseKey = resolveReleaseSampleKey(marker.key, entry.release); + const releaseTime = markerReleaseTime(marker); + + if (marker.time >= time - 0.05) { + const pressDelay = marker.time - time; + const pressBuffer = await loadBuffer(switchType, 'press', pressKey); + const pressSource = playBuffer(pressBuffer, startAt + Math.max(0, pressDelay)); + if (pressSource) scheduledSources.push(pressSource); + } + + if (releaseTime >= time - 0.05) { + const releaseDelay = releaseTime - time; + const releaseBuffer = await loadBuffer(switchType, 'release', releaseKey); + const releaseSource = playBuffer(releaseBuffer, startAt + Math.max(0, releaseDelay)); + if (releaseSource) scheduledSources.push(releaseSource); + } + } + })(); + }, + + playKey(code: string, keyLabel: string, phase: SoundPhase) { + void resolveAndPlay(app.activeSwitch, code, keyLabel, phase); + }, + + async preloadActiveSwitch() { + await ensureManifest(); + await preloadSwitch(app.activeSwitch); }, destroy() { clearScheduled(); videoSource?.disconnect(); videoGain?.disconnect(); + sfxGain?.disconnect(); void ctx?.close(); ctx = null; videoSource = null; videoGain = null; + sfxGain = null; + manifest = null; + loadedSwitch = null; buffers.clear(); }, }; diff --git a/frontend/src/lib/audio/keySoundMap.ts b/frontend/src/lib/audio/keySoundMap.ts new file mode 100644 index 0000000..ca0d5ac --- /dev/null +++ b/frontend/src/lib/audio/keySoundMap.ts @@ -0,0 +1,83 @@ +import type { SwitchType } from '../types'; + +export type SoundPhase = 'press' | 'release'; +export type PressSampleKey = + | 'SPACE' + | 'ENTER' + | 'BACKSPACE' + | 'GENERIC_R0' + | 'GENERIC_R1' + | 'GENERIC_R2' + | 'GENERIC_R3' + | 'GENERIC_R4'; +export type ReleaseSampleKey = 'SPACE' | 'ENTER' | 'BACKSPACE' | 'GENERIC'; + +export type SwitchManifest = { + press: string[]; + release: string[]; +}; + +export const DEFAULT_RELEASE_OFFSET = 0.08; + +const SPECIAL_KEY_SAMPLES: Record = { + Space: 'SPACE', + Enter: 'ENTER', + Backspace: 'BACKSPACE', +}; + +/** djb2 hash — mirrored in backend/key_sound_map.py */ +export function hashCode(value: string): number { + let hash = 5381; + for (let i = 0; i < value.length; i++) { + hash = (hash * 33) ^ value.charCodeAt(i); + } + return hash >>> 0; +} + +export function pressVariantIndex(code: string): number { + return hashCode(code) % 5; +} + +export function pressVariantKey(code: string): PressSampleKey { + return `GENERIC_R${pressVariantIndex(code)}` as PressSampleKey; +} + +export function resolvePressSampleKey( + keyLabel: string, + code: string, + available: string[], +): PressSampleKey { + const special = SPECIAL_KEY_SAMPLES[keyLabel]; + if (special && available.includes(special)) return special; + const variant = pressVariantKey(code); + if (available.includes(variant)) return variant; + const fallback = `GENERIC_R${pressVariantIndex(code)}`; + if (available.includes(fallback)) return fallback as PressSampleKey; + const generic = available.find((s) => s.startsWith('GENERIC_R')); + return (generic ?? available[0]) as PressSampleKey; +} + +export function resolveReleaseSampleKey( + keyLabel: string, + available: string[], +): ReleaseSampleKey { + const special = SPECIAL_KEY_SAMPLES[keyLabel]; + if (special && available.includes(special)) return special; + if (available.includes('GENERIC')) return 'GENERIC'; + return (available[0] ?? 'GENERIC') as ReleaseSampleKey; +} + +export function sampleUrl( + switchType: SwitchType, + phase: SoundPhase, + sampleKey: string, +): string { + return `/assets/samples/kbsim/${switchType}/${phase}/${sampleKey}.mp3`; +} + +export function markerReleaseTime(marker: { + time: number; + releaseTime?: number; +}): number { + return marker.releaseTime ?? marker.time + DEFAULT_RELEASE_OFFSET; +} diff --git a/frontend/src/lib/keyboard.ts b/frontend/src/lib/keyboard.ts index 24093ee..baa7e7e 100644 --- a/frontend/src/lib/keyboard.ts +++ b/frontend/src/lib/keyboard.ts @@ -1,24 +1,5 @@ -const MODIFIER_KEYS = new Set([ - 'Control', - 'Shift', - 'Alt', - 'Meta', - 'CapsLock', - 'Tab', - 'Escape', -]); - -const IGNORED_KEYS = new Set([ - ...MODIFIER_KEYS, - 'ArrowUp', - 'ArrowDown', - 'ArrowLeft', - 'ArrowRight', - 'Backspace', - 'Delete', - 'Enter', - ' ', -]); +/** Keys that are modifiers only — never annotated on their own. */ +const MODIFIER_ONLY_KEYS = new Set(['Control', 'Shift', 'Alt', 'Meta', 'CapsLock']); export function isEditableTarget(target: EventTarget | null): boolean { if (!(target instanceof HTMLElement)) return false; @@ -26,9 +7,17 @@ export function isEditableTarget(target: EventTarget | null): boolean { return tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA' || target.isContentEditable; } +export function keyCode(event: KeyboardEvent): string { + return event.code; +} + +export function hasShortcutModifier(event: KeyboardEvent): boolean { + return event.ctrlKey || event.metaKey; +} + export function keyLabel(event: KeyboardEvent): string | null { - if (event.ctrlKey && event.code === 'Space') return null; - if (IGNORED_KEYS.has(event.key)) return null; + if (hasShortcutModifier(event)) return null; + if (MODIFIER_ONLY_KEYS.has(event.key)) return null; if (event.key.length === 1) return event.key; if (event.key === ' ') return 'Space'; return event.key; @@ -36,12 +25,18 @@ export function keyLabel(event: KeyboardEvent): string | null { export function shouldOverrideSelected(event: KeyboardEvent, hasSelection: boolean): boolean { if (!hasSelection) return false; - if (event.ctrlKey || event.metaKey || event.altKey) return false; + if (hasShortcutModifier(event)) return false; if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'].includes(event.key)) return false; return keyLabel(event) !== null; } export function shouldRecordMarker(event: KeyboardEvent): boolean { - if (event.ctrlKey || event.metaKey || event.altKey) return false; + if (event.repeat) return false; + if (hasShortcutModifier(event)) return false; return keyLabel(event) !== null; } + +export function shouldDeleteSelected(event: KeyboardEvent, hasSelection: boolean): boolean { + if (!hasSelection) return false; + return event.key === 'Backspace' || event.key === 'Delete'; +} diff --git a/frontend/src/lib/project.ts b/frontend/src/lib/project.ts index 3fd6b80..13f358f 100644 --- a/frontend/src/lib/project.ts +++ b/frontend/src/lib/project.ts @@ -1,9 +1,30 @@ -import type { Project } from './types'; +import type { LegacySwitchType, Marker, Project, SwitchType } from './types'; import { app, setActiveSwitch, setMarkers, setSelectedIds } from './store.svelte'; +const LEGACY_SWITCH_MAP: Record = { + 'cherry-mx-blue': 'mxblue', + 'cherry-mx-red': 'mxblack', + 'cherry-mx-brown': 'mxbrown', +}; + +function migrateSwitch(value: string): SwitchType { + if (value in LEGACY_SWITCH_MAP) { + return LEGACY_SWITCH_MAP[value as LegacySwitchType]; + } + return value as SwitchType; +} + +function migrateMarker(marker: Marker): Marker { + return { + ...marker, + code: marker.code, + releaseTime: marker.releaseTime, + }; +} + export function buildProject(): Project { return { - version: 1, + version: 2, switch: app.activeSwitch, markers: app.markers.map((m) => ({ ...m })), }; @@ -20,12 +41,12 @@ export function downloadProject(filename = 'project.json') { URL.revokeObjectURL(url); } -export function loadProject(data: Project) { - if (data.version !== 1) { +export function loadProject(data: Project & { version?: number; switch?: string }) { + if (data.version !== 1 && data.version !== 2) { throw new Error(`Unsupported project version: ${data.version}`); } - setMarkers(data.markers.map((m) => ({ ...m }))); - setActiveSwitch(data.switch); + setMarkers((data.markers ?? []).map(migrateMarker)); + setActiveSwitch(migrateSwitch(data.switch ?? 'mxbrown')); setSelectedIds(new Set()); } diff --git a/frontend/src/lib/store.svelte.ts b/frontend/src/lib/store.svelte.ts index cb5e609..ff5c5ae 100644 --- a/frontend/src/lib/store.svelte.ts +++ b/frontend/src/lib/store.svelte.ts @@ -10,7 +10,7 @@ export const app = $state({ fps: 30, pixelsPerSecond: ZOOM_DEFAULT, scrollLeft: 0, - activeSwitch: 'cherry-mx-blue' as SwitchType, + activeSwitch: 'mxbrown' as SwitchType, videoUrl: null as string | null, videoName: null as string | null, timelineWidth: 800, @@ -68,13 +68,16 @@ export function setTimelineWidth(value: number) { app.timelineWidth = value; } -export function addMarker(time: number, key: string): Marker { - const marker: Marker = { id: createMarkerId(), time, key }; +export function addMarker(time: number, key: string, code?: string): Marker { + const marker: Marker = { id: createMarkerId(), time, key, code }; app.markers = [...app.markers, marker].sort((a, b) => a.time - b.time); return marker; } -export function updateMarker(id: string, patch: Partial>) { +export function updateMarker( + id: string, + patch: Partial>, +) { app.markers = app.markers .map((m) => (m.id === id ? { ...m, ...patch } : m)) .sort((a, b) => a.time - b.time); diff --git a/frontend/src/lib/types.ts b/frontend/src/lib/types.ts index fd6dc76..378244a 100644 --- a/frontend/src/lib/types.ts +++ b/frontend/src/lib/types.ts @@ -1,9 +1,27 @@ -export type SwitchType = 'cherry-mx-blue' | 'cherry-mx-red' | 'cherry-mx-brown'; +export type SwitchType = + | 'cream' + | 'holypanda' + | 'alpaca' + | 'turquoise' + | 'inkblack' + | 'inkred' + | 'mxblack' + | 'mxbrown' + | 'mxblue' + | 'boxnavy' + | 'buckling' + | 'alpsblue' + | 'topre'; + +/** @deprecated v1 project switch ids — migrated on load */ +export type LegacySwitchType = 'cherry-mx-blue' | 'cherry-mx-red' | 'cherry-mx-brown'; export interface Marker { id: string; time: number; key: string; + code?: string; + releaseTime?: number; } export interface Project { @@ -13,9 +31,19 @@ export interface Project { } export const SWITCH_OPTIONS: { id: SwitchType; label: string }[] = [ - { id: 'cherry-mx-blue', label: 'Cherry MX Blue (clicky)' }, - { id: 'cherry-mx-red', label: 'Cherry MX Red (linear)' }, - { id: 'cherry-mx-brown', label: 'Cherry MX Brown (tactile)' }, + { id: 'cream', label: 'NovelKeys Creams' }, + { id: 'holypanda', label: 'Holy Pandas' }, + { id: 'alpaca', label: 'Alpacas' }, + { id: 'turquoise', label: 'Turquoise Tealios' }, + { id: 'inkblack', label: 'Gateron Black Inks' }, + { id: 'inkred', label: 'Gateron Red Inks' }, + { id: 'mxblack', label: 'Cherry MX Blacks' }, + { id: 'mxbrown', label: 'Cherry MX Browns' }, + { id: 'mxblue', label: 'Cherry MX Blues' }, + { id: 'boxnavy', label: 'Kailh Box Navies' }, + { id: 'buckling', label: 'Buckling Spring' }, + { id: 'alpsblue', label: 'SKCM Blue Alps' }, + { id: 'topre', label: 'Topre' }, ]; export const ZOOM_MIN = 20; diff --git a/scripts/fetch_kbsim_samples.sh b/scripts/fetch_kbsim_samples.sh new file mode 100755 index 0000000..af92aaf --- /dev/null +++ b/scripts/fetch_kbsim_samples.sh @@ -0,0 +1,81 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +DEST="$ROOT/assets/samples/kbsim" +TMP="$(mktemp -d)" +REPO="https://github.com/tplai/kbsim.git" + +cleanup() { + rm -rf "$TMP" +} +trap cleanup EXIT + +echo "Cloning kbsim audio assets..." +git clone --depth 1 --filter=blob:none --sparse "$REPO" "$TMP/kbsim" +cd "$TMP/kbsim" +git sparse-checkout set src/assets/audio + +AUDIO_SRC="$TMP/kbsim/src/assets/audio" +if [[ ! -d "$AUDIO_SRC" ]]; then + echo "Expected audio directory not found in kbsim repo" >&2 + exit 1 +fi + +rm -rf "$DEST" +mkdir -p "$DEST" + +# folder:switch_id pairs (kbsim folder name -> sfxkeeb switch id) +PAIRS=( + "cream:cream" + "holypanda:holypanda" + "alpaca:alpaca" + "turquoise:turquoise" + "blackink:inkblack" + "redink:inkred" + "mxblack:mxblack" + "mxbrown:mxbrown" + "mxblue:mxblue" + "boxnavy:boxnavy" + "buckling:buckling" + "bluealps:alpsblue" + "topre:topre" +) + +for pair in "${PAIRS[@]}"; do + folder="${pair%%:*}" + switch_id="${pair##*:}" + if [[ -d "$AUDIO_SRC/$folder" ]]; then + cp -R "$AUDIO_SRC/$folder" "$DEST/$switch_id" + echo " copied $folder -> $switch_id" + else + echo " warning: missing folder $folder" >&2 + fi +done + +echo "Generating manifest.json..." +python3 - "$DEST" <<'PY' +import json +import sys +from pathlib import Path + +dest = Path(sys.argv[1]) +manifest: dict[str, dict[str, list[str]]] = {} + +for switch_dir in sorted(dest.iterdir()): + if not switch_dir.is_dir() or switch_dir.name == "__pycache__": + continue + switch_id = switch_dir.name + press_dir = switch_dir / "press" + release_dir = switch_dir / "release" + press = sorted(p.stem for p in press_dir.glob("*.mp3")) if press_dir.is_dir() else [] + release = sorted(p.stem for p in release_dir.glob("*.mp3")) if release_dir.is_dir() else [] + manifest[switch_id] = {"press": press, "release": release} + +manifest_path = dest / "manifest.json" +manifest_path.write_text(json.dumps(manifest, indent=2) + "\n") +total = sum(len(v["press"]) + len(v["release"]) for v in manifest.values()) +print(f" wrote {manifest_path} ({len(manifest)} switches, {total} samples)") +PY + +echo "Done. Samples installed to $DEST" diff --git a/scripts/generate_samples.py b/scripts/generate_samples.py deleted file mode 100644 index 85c6e33..0000000 --- a/scripts/generate_samples.py +++ /dev/null @@ -1,83 +0,0 @@ -"""Generate synthetic mechanical keyboard switch samples.""" - -import math -import struct -import wave -from pathlib import Path - -SAMPLE_RATE = 48000 -OUT_DIR = Path(__file__).resolve().parent.parent / "assets" / "samples" - - -def write_wav(path: Path, samples: list[float]) -> None: - pcm = b"".join( - struct.pack(" list[float]: - env = [] - attack_samples = int(attack * SAMPLE_RATE) - decay_samples = int(decay * SAMPLE_RATE) - for i in range(length): - if i < attack_samples: - env.append(i / max(attack_samples, 1)) - elif i < attack_samples + decay_samples: - t = (i - attack_samples) / max(decay_samples, 1) - env.append(1.0 - t) - else: - env.append(0.0) - return env - - -def generate_click( - freq: float, - duration: float, - attack: float, - decay: float, - noise_mix: float = 0.0, - click_burst: bool = False, -) -> list[float]: - length = int(duration * SAMPLE_RATE) - env = envelope(length, attack, decay) - out = [] - for i in range(length): - t = i / SAMPLE_RATE - tone = math.sin(2 * math.pi * freq * t) * (0.7 if not click_burst else 0.4) - if click_burst and t < 0.008: - tone += math.sin(2 * math.pi * (freq * 2.8) * t) * 0.5 - noise = 0.0 - if noise_mix > 0: - noise = (((i * 1103515245 + 12345) & 0x7FFFFFFF) / 0x7FFFFFFF - 0.5) * noise_mix - out.append((tone + noise) * env[i]) - peak = max(abs(s) for s in out) or 1.0 - return [s / peak * 0.85 for s in out] - - -def main() -> None: - OUT_DIR.mkdir(parents=True, exist_ok=True) - - profiles = { - "cherry-mx-blue.wav": generate_click( - 2800, 0.09, 0.001, 0.085, noise_mix=0.15, click_burst=True - ), - "cherry-mx-red.wav": generate_click( - 1200, 0.05, 0.002, 0.045, noise_mix=0.08 - ), - "cherry-mx-brown.wav": generate_click( - 1800, 0.07, 0.002, 0.065, noise_mix=0.12, click_burst=True - ), - } - - for name, samples in profiles.items(): - write_wav(OUT_DIR / name, samples) - print(f"Wrote {OUT_DIR / name}") - - -if __name__ == "__main__": - main()