Why it exists
Most “white noise” sites are loops of recorded rain and fans, and their “speech blocker”, when they have one, is a brightness slider. But steady broadband hiss is a poor speech masker per decibel of loudness. To stop hearing the conversation next door you have to crank it until it’s its own nuisance. The thing that kills intelligibility is noise shaped to the speech band and, better still, noise that fluctuates like conversation does. hush treats the speech blocker as the real signal-processing problem it is, and synthesizes everything live so there are no files to load and nothing to stream.
The noise, synthesized
The base sound is generated sample-by-sample on the audio thread in an
AudioWorklet, so it never glitches when the main thread is
busy and there are no loops to download. White is flat;
pink (−3 dB/octave, via a Paul Kellet
filter) is the natural, balanced one most people reach for;
brown (−6 dB/octave, a leaky integrator) is
the deep, warm, rumbly one. Custom opens a seven-band
graphic EQ (60 Hz to 14 kHz, ±18 dB peaking
filters on white noise), so you can sculpt your own spectrum. The EQ
panel unfurls beneath the colors only when custom is
selected.
The speech blocker is real DSP
The blocker isn’t a mode you switch to. It’s another layer you mix in alongside the noise, on its own slider. Speech-shaped bends a noise source toward the long-term average speech spectrum (a high-pass below 180 Hz, a lift around 500 Hz where the vowels sit, and a roll-off above 1.6 kHz), so the masker’s energy lands exactly where a voice’s does and covers it efficiently, killing intelligibility at a far lower loudness than flat hiss would need. It’s all built from filtered noise, with no recordings of anyone.
Adapt to the room
The optional adapt to room mode is the twist. With your permission it opens the microphone, band-passes the incoming sound to the speech range, and tracks a rolling estimate of the quiet baseline. When the room rises above its own floor (someone starts talking), it raises the mask to cover them; when the room goes quiet again the mask eases back to a low resting level. So instead of a constant drone you get a masker that mostly stays out of the way and steps in only when there is something to mask. A quiet level slider sets that resting level. Drop it to save more volume when the room is silent, or raise it toward full so the mask barely ducks at all.
The microphone signal is analysed entirely on your device. It feeds a level meter and nothing else. It is never connected to the speakers, never recorded, and never sent anywhere. The mode is strictly opt-in, and everything on the page works without it; deny the permission and hush runs as a fixed masker.
Once you grant access, a picker lets you choose which microphone hush listens through. This is more than a convenience on a Mac with Bluetooth headphones: opening the headset’s own mic forces it out of high-quality stereo (A2DP) and into the low-fidelity hands-free call profile (HFP), which audibly muddies the playback you came for. hush defaults to a built-in mic when it can recognise one and lets you switch at any time, so the headset can stay in A2DP while a different mic does the listening.
On-device, nothing recorded
hush is a single static page. There is no backend, no account, no API key, and no audio files. Every sound is generated by the Web Audio graph in your tab. The two layers run in parallel and sum into one mix bus, so any blend plays at once; a sleep timer fades it to silence after a while. The aurora behind the controls breathes with the noise envelope, on the same nightfield as the rest of floatbird.