Interface SFX
Sound as a texture, not a notification.
Most interfaces are silent, and most that aren't are annoying. The difference is scale: good interface sound works like haptics — tiny, quiet confirmations of physical actions, not announcements.
These are the sounds this site uses — from the Minimal patch, synthesized on the fly. No audio files.
Principles
- Attach sound to user actions, never to things that merely happen. A click can tick; an incoming update should stay silent.
- Keep it short and quiet. Under 100ms, mixed well below speech volume. If a sound is noticeable in isolation, it's too loud.
- Vary by meaning. Navigation, confirmation, and toggles each get their own voice, so the ear learns the vocabulary without thinking.
- Always provide mute, persisted. Sound is opt-in texture; the site must be complete without it.
Synthesized, not sampled
This site uses @web-kits/audio to describe sounds as plain objects — an oscillator, an envelope, a gain — synthesized by the Web Audio API at play time. The palette is a subset of the Minimal patch: pure sines, tiny envelopes, gains under 0.1. No audio files, no network requests:
const patch = definePatch({
name: "Minimal",
sounds: {
tick: {
source: { type: "sine", frequency: 1200 },
envelope: { attack: 0, decay: 0.012, sustain: 0, release: 0.004 },
gain: 0.08,
},
},
});
patch.play("tick");
A falling sine reads as "dismiss", two quick ascending sines as "success" — three parameters away from a whole sound vocabulary.
Resources
@web-kits/audio — Declarative audio synthesis for the web.
Web Audio API - Web APIs | MDN — The Web Audio API provides a powerful and versatile system for controlling audio on the Web, allowing developers to choose audio sources, add effects to audio, create audio visualizations, apply spatial effects (such as panning) and much more.