Sound spec
The numbers for a shipped UI sound — duration by category, loudness in LUFS, peak headroom, mono, 44.1 kHz, zero leading silence, file format per target.
Raw markdown On GitHubreferences/sound/sound-spec.md
Taught in
A UI sound is a tiny file with strict numbers. Most "this sound feels wrong" complaints are a spec miss — too long for its animation, too loud next to speech, or ten milliseconds of silence before the hit — not a taste miss. Fix the spec first.
Duration
| Category | Duration | Rule |
|---|---|---|
| Tick / toggle / snap | 40–80 ms | Finishes before the eye has registered the state change |
| Tap / press | 80–150 ms | Only in tactile products — see sound-decision-framework |
| Hover | 0 ms | Hover is silent. If a design insists, 120–200 ms and off by default |
| Send / save / confirm | 150–250 ms | One or two notes |
| Notification / receive | 200–600 ms | Longer because attention is being requested |
| Error | 100–200 ms | Short and low; the shake carries the rest |
| Transition (video / marketing) | 300–1000 ms | Product UI never gets these |
| Brand stinger | 1–3 s | Launch video, onboarding hero, once |
The Toptal rule ties duration to motion: a sound should not last more than ~300 ms longer than the animation it accompanies. A 120 ms press with an 800 ms tail is a bell, not feedback. Match the duration-table.
Loudness
| Sound | Integrated loudness | Notes |
|---|---|---|
| Taps, ticks, toggles | −18 to −14 LUFS | Below speech, above silence |
| Notifications | ≈ −12 LUFS | The one class allowed to be louder |
| Launch-video master | −1 dBTP true peak; integrated loudness stated for the register (medians ≈ −18 LUFS; beat-cut sizzles median ≈ −13, 3 of 4 at −12 to −13; the three quietest films, Linear Agent, Cursor 2.0 and Claude Cowork, sit at −33 to −36) | Loudness-normalizing players (YouTube-style) turn loud masters down and do not raise quiet ones — launch-video-sound |
Peak every file at −3 dBFS (−1 dBTP for delivered video). Set the design level in the file and the user level in the mixer — never bake "a bit quieter" into the asset. Interface sounds stay subordinate to speech and media; convey urgency with timbre and rhythm, not volume.
Integrated LUFS is unstable on files under ~400 ms — for ticks and taps, match by ear against a reference tick at −16 LUFS and check the peak, rather than trusting the meter.
Format
- Mono. Phones, laptops, and Bluetooth speakers sum to mono anyway; stereo UI sounds phase-smear and double the bytes.
- 44.1 kHz, 16-bit WAV as the source of truth. Ship MP3 (128 kbps) for universal playback or Opus/OGG for smaller web bundles; keep WAV for native and for video timelines.
- Zero leading silence. Trim to the first sample above −60 dBFS. Five milliseconds of pre-roll is a visible sync error — see sound-motion-sync.
- Short tail, then cut. Fade the last 10 ms to avoid a click; do not let reverb ride 500 ms past the event.
- Sprite when there are many. One decoded buffer, offsets per sound;
use-soundand Howler supportspritemaps.
Frequency shaping
- High-pass at 150–200 Hz. Nothing in that band survives a laptop speaker; it only eats headroom.
- Tame 3–6 kHz by a few dB if the sound is "needly" — that is where small speakers resonate.
- Keep the body in the mid-range (500 Hz–4 kHz), where every device is honest and where the voice lives.
When to apply
Post-processing every generated or downloaded file, and reviewing any PR that adds an audio asset. scripts/sound-family.mjs applies the trim and peak steps automatically; the LUFS check is yours.
Gotcha
Loudness normalization tools (loudnorm, streaming platforms) measure integrated loudness across the whole file. A sound that is 60 ms of hit and 600 ms of quiet tail will be normalized up until the hit clips. Trim the tail first, normalize second.
Sources
- Envato, UI sound design with AI — LUFS targets by class, duration bands, mono, the 0–5 ms trim.
- Toptal, A Quick Guide to Designing UX Sounds — the 300 ms-over-animation rule; mid-range guidance.
- uisfx.com, UI Sound Design — subordinate to speech, urgency by timbre not volume, one-shots vs loops.
- EBU R 128 (−23 LUFS, −1 dBTP max) and streaming practice (≈ −14 LUFS): platform reference levels, not what launch films ship at (medians −18.1 LUFS for 28 Skale client films and −18.4 for 18 acclaimed films, measured by HKTITAN 2026-09-28,
docs/research/launch-films/). - Related: duration-table, sound-palette.
soundspecloudnessaudioformat