DISPATCHESARCHIVE
KeyEcho 1.1 is out, paid soundpacks are live
KeyEcho 1.1 shipped today, along with the first batch of paid soundpacks.
14 packs: 6 free, 8 paid. $3.99 each, or Pick 5 for $14.99, Pick 10 for $19.99.
KeyEcho is the desktop app that makes a regular keyboard sound like a mechanical one. Last issue I wrote about its first paying user. Since then I've been chewing on the obvious follow-up. If people are paying, the sound has to be worth paying for.
The old version fell short in one obvious place. Keys only made a sound on press; release was silent.
A real mechanical keyboard makes two sounds. The thock on the way down, then a lighter, shorter tick as the keycap springs back. Without that second half, one keystroke sounds fine, but typing a sentence sounds like the same sample on repeat. The longer you listen, the faker it gets.
1.1 gives press and release their own samples and their own triggers. Type a paragraph and the sound has a back-and-forth to it. It's the one change in this version you can hear immediately.
Getting there meant rewriting the playback engine.
The old engine did full decode work on every keystroke: seek to a millisecond offset in the audio file, reset the decoder, decode a short stretch on the spot. The decoder lived on the hot path and ran the whole routine every time.
The new engine decodes the entire file once, at load, into a sample bank. Each key stores a sample range: start at sample N, take M samples. A keystroke just reads a slice of already-decoded memory; the decoder is off the hot path entirely. Identical slices share one buffer, and each playback gets its own cursor. Memory gets two hard budgets, 64 MiB for the decoded bank and 48 MiB per pack, and anything over is refused at load.
This design is what forced lossless. Address keys by sample position and the decoded grid has to match the authored grid exactly. Lossy codecs pad the start with silence and requantize the rest; the grid drifts, and every key reads from the wrong spot. The whole batch is FLAC.
That's the rule I'm keeping from this round. Audio indexed by exact sample position can't go through a lossy codec; the bytes you save don't pay for the misreads.
The packs themselves went through a cull. I ran the whole library through an AI screening pass, cut everything under the bar, and rebuilt what survived to the new engine's standard: lossless, sample-accurate slices, press and release in pairs. Everything on sale had its license cleared pack by pack. The old community packs aren't for sale; for longtime users, 1.1 adds a one-click import that reads them from their original local path.
A comment on my last post about the hot-path work said it better than the post did:
the harder skill is knowing which faster version you shouldn't ship
Picking packs, that line kept proving itself. How fast the engine runs, you know when the code compiles. Which sounds deserve to go on sale, you find out one listen at a time. I cut more than I kept.
Every pack has a preview on the site, built from the same samples that ship in the pack. What you hear is what you buy.