This started the night I put on The Fly (1986) and couldn't hear Jeff Goldblum mumbling fly noises at the woman from Beetlejuice - so there I was again, riding the volume remote: up for the whispers, down for the explosions. The industry already solved this once - Dolby Volume and friends do it by baking loudness metadata into the mix at mastering time, then lock the fix inside licensed hardware. I hate walled gardens, so TAN does the job blind instead: it measures perceived loudness the way your ear does and rides gain in real time, and it's MIT licensed Rust you can actually read.
One waveform, three problems. Click a section to see what TAN does there.
Hear it
A deliberately badly mixed test signal: whisper-level dialogue alternating with loud action bursts. Same clip, before and after TAN's movie profile. Careful with your volume on the first one.
Before
Dialogue sits ~26 dB below the action - the "constantly grabbing the remote" experience.
After TAN (live mode)
Processed in real time with 8 ms of latency, the way system-wide audio would be. Big cuts complete inside the onset transient itself, where the ear can't track them.
After TAN (two-pass)
For files, TAN analyzes everything first: gain ramps down ahead of each loud onset, so corrections are completely inaudible. Zero reactive artifacts.
Click a wave to jump around. Gray is the untouched input and color is that player's audio, so wherever the color pulls in from the gray is where TAN did its work.
Loudness range - how far apart the quiet and loud parts sit:
Full breakdown
| K-weighted loudness | Before | Live | Two-pass |
|---|---|---|---|
| Quiet passages | -31.9 dB | -28.3 dB | -20.7 dB |
| Loud passages | -5.9 dB | -8.9 dB | -8.3 dB |
| Loudness range | 26.0 dB | 19.4 dB | 12.4 dB |
| Peak | 0.95 | 0.89 (limited) | 0.89 (limited) |
Loud passages barely move. TAN levels around the content's own baseline, so overall volume stays right where the source put it, and dialogue rises to meet the action. (Live numbers include the engine's first cold seconds; on real-length content the adapted behavior dominates.)
Try it yourself, right here
Same Rust engine, compiled to WebAssembly, running entirely in your browser. Nothing you drop in here ever leaves your machine.
Your own file
Drop any audio or video file (mp4, mkv, mp3, wav...). TAN runs its two-pass normalization on the audio and gives you both versions to compare.
Original
Normalized by TAN
Across every kind of content
Music, a movie, a game, a podcast interview - four real, licensed recordings, four different mixing problems. See how TAN handles each one.
Live on YouTube - or anything else
Chrome/Edge only. Click start, pick the browser tab that's playing your video, and check "also share tab audio". That tab's sound then plays through TAN's live engine instead. Stop sharing to go back to normal.
How it works
Three stages, all classical DSP, all in tan-core:
Perceptual loudness metering
ITU-R BS.1770 K-weighting (shelf + high-pass biquads), so gain decisions track how loud things sound, not raw sample amplitude.
Baseline-anchored gain riding
The engine tracks the content's own average loudness (following louder material quickly, sinking toward quiet slowly) and levels around that, never an absolute target - so enabling TAN never changes how loud things feel overall. Cut speed scales with overshoot, so a big correction finishes within ~50 ms of a loud onset, masked by the onset itself, while small corrections stay too slow to hear as pumping.
Look-ahead limiting
Output is delayed 8 ms while the limiter watches incoming audio, so gain ramps down before a peak arrives instead of clicking after it.
Reproduce it
git clone https://github.com/bknie1/True-Audio-Normalizer cd True-Audio-Normalizer cargo run --release -p tan-cli -- gen demo-input.wav cargo run --release -p tan-cli -- process demo-input.wav demo-output.wav movie
Roadmap
- Now - hand-written WAV codec, perceptual metering, baseline-anchored AGC, look-ahead limiter, movie/music profiles, a native shared library, a first-cut Windows live tool, tagged releases with installers, CI on Windows/macOS/Linux.
- Next - a real Windows Audio Processing Object, so TAN sits in the system audio pipeline directly instead of needing a second device or a virtual cable.
- Then - blind dialogue detection: a lightweight real-time neural model (DeepFilterNet-style) so speech specifically stays intelligible in the mix - the thing Dolby needs mastering-time metadata to do.
- After that - live system-audio adapters for macOS/Linux, mobile.
Get TAN
Windows installer plus Windows, macOS, and Linux builds are on the releases page. The installer sets up the system-tray app; open it, pick your input and output, and go.
Download for Windows installer All builds Pre-ReleaseHeads up: TAN is early, pre-release software under active development - expect rough edges, and set-up still takes a little manual audio routing. Builds aren't code-signed yet, so Windows SmartScreen will warn on first run; choose "More info" then "Run anyway". New to it? The plain-language setup guide walks through it, including using TAN alongside SteelSeries Sonar, plus optional guides for Jellyfin and Stremio integrations.