# Speed Obby audio sources

| Shipped file | Source | Author | Licence | Checked |
| --- | --- | --- | --- | --- |
| `v2/mechanical-bank.wav` | [Keychron K10 linear impacts](https://freesound.org/people/Sadiquecat/sounds/789627/), [spacebar](https://freesound.org/people/Sadiquecat/sounds/789630/); [linear single key](https://freesound.org/people/shanecutrufello/sounds/556286/); [Mechanical Keyboards](https://freesound.org/people/StavSounds/packs/42151/) (eight tactile takes); [mechanicalKeys](https://freesound.org/people/UberBosser/packs/23846/) (Q, W, Ctrl, Space) | Sadiquecat; shanecutrufello; StavSounds; UberBosser | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) verified on each of the 15 individual source pages | 2026-10-05 |
| `v1/switch-grains.wav` | [Keyboard Soundpack #1: Typing and Single Keystrokes](https://opengameart.org/content/keyboard-soundpack-1-typing-and-single-keystrokes), [original ZIP](https://opengameart.org/sites/default/files/unicae_games_keyboard_soundpack_1_0.zip) | unicaegames | [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | 2026-10-05 |

The previous v1 46,124-byte mono bank contains edited press/return excerpts from eight single-key takes in the source pack.
The creator identifies the recording equipment as a Cherry KC 1000 and Shure SM7B. Our six pack names describe
our processed sound designs; they do not identify six separately recorded keyboards.

`v1/switch-grains.json` records every input filename/hash, cue point, archive hash and output hash.
`tools/keyobby/prepare-switch-grains.py` reproduces the bank from that exact archive. Processing: mono conversion,
24 kHz resampling, filtering, edge fades and level matching. Runtime sound shaping adds original housing,
spring/stabilizer and synthetic material layers; all event effects and wind are generated from original code.

Original-game video audio is private research evidence only and is never an input to the asset preparation script
or the shipped sound banks. No competitor audio, speech or music ships in the game.

## Current v2 bank

104,492 bytes: 34 mono PCM16 slots, 64 ms each, 24 kHz. The 15 source files are the creators' publicly
served HQ MP3 previews; these are not lossless original downloads. `v2/mechanical-bank.json` lists every
individual source page, public preview URL, SHA-256, cue, role and gain, plus the output hash.
`tools/keyobby/mechanical-bank-sources.json` pins the inputs; `prepare-mechanical-bank.py` reproduces the bank
with ffmpeg 7.0.2 and numpy/scipy. No runtime request goes to Freesound.

Creamy uses linear impacts, Tactile uses tactile takes, and Clicky uses blue-switch takes. Eight linear
impacts share a separate rebound. The three blue-switch ordinary takes produce eight shaped variants;
this is not eight distinct recorded blue keys. Long keys use recorded spacebars. Typewriter, Jelly and Glass
add original resonant shaping to these families. The starter packs add no synthetic noise. Processing retains
recorded body and attack, removes rumble, matches energy, fades excerpt edges and shortens the press/return gap.
The six pack names describe our designs, not six separately recorded keyboard models.

The v1 asset remains immutable for old clients; new clients fetch v2 only.
