drag edges · double-click resetsClick either waveform to seek · both accept dropped files
dBgain on B
No null test yet
Track B offsetpositive values push B later
−10s+10s
samples
Preset
Loading
This app is using cookies
Null Test
Help & Instructions
What is this?
Compare two versions of a track — a mix and a master, two masters, an export and its source — at exactly the same loudness, sample-aligned, and switch between them while playing. Loudness is measured to the broadcast standard (ITU-R BS.1770-4, K-weighted, gated), so what you hear is a fair comparison rather than a louder-wins one.
Everything runs in your browser. Nothing is uploaded.
How to use
Load: Drop two files on the A and B cells at the top (or click a cell) — WAV, AIFF, FLAC, MP3, AAC/M4A. Put your reference in Track A; if they landed the wrong way round, Swap A↔B exchanges them (while the offset is 0). Each cell shows the file's bit depth and sample rate. While a file loads, an overlay shows what is happening (reading, decoding, drawing, measuring loudness) and the controls are blocked until the track is ready.
Match LUFS (M): Sets the gain on Track B so both play at the same loudness, by applying the opposite of the difference it measures. Louder always sounds better — this removes that bias. The green dot next to the gain figure means the pair is matched; typing a value by hand turns it off. On a silent track there is no loudness to match, so it says so instead.
Align: If the two versions don't start at the same sample, use the Track B offset control, or run a Null Test and click "Apply offset" — and "Apply gain" if it found a level difference too.
Play and switch: Space starts playback and stops it again; P pauses in place. ← / → or W switch between A and B — the big A and B cells beside the waveforms show which one you are hearing. Switching is seamless mid-playback, so listen for what changes at the moment you switch.
Seek: Click anywhere on a waveform to jump there.
Repeat (R): Set repeat-start and repeat-end on the strip above the waveforms. Rewind goes to repeat-start, and with Repeat on, playback cycles between the two markers. See "Repeat Markers" below.
Null Test (N): Find out whether the two files are actually the same audio. The last verdict stays under the buttons until a file is replaced.
The readout on each track
LUFS is the integrated loudness of the whole file (mono and stereo), measured to ITU-R BS.1770-4: K-weighted to follow how the ear hears, and gated so silence and quiet passages don't drag the figure down. This is what Match LUFS equalises.
RMS is the plain average level, with no weighting or gating. It's shown for reference — two files with the same LUFS can have different RMS if their spectral balance differs.
Null Test
Answers one question: are these two files the same audio? It compares the
decoded samples, not the file bytes, so metadata and container differences are ignored.
Track B is subtracted from Track A and whatever is left over is measured; any leftover is
then explained as a head offset, a level difference or a polarity inversion where possible.
What the verdict means
Identical — exactly the same audio.
Audio identical — the same audio, one file is longer.
Identical, offset by N samples — the same audio, one file starts later. "Apply offset" lines them up.
Near null — differs only at dither level. Inaudible.
Small difference — light processing or a good lossy encode. Possibly audible in quiet passages.
Gain difference only — the same audio at a different level. The figure is Track B's level relative to Track A (negative = B is quieter), the same convention as the Loudness section and the LUFS readouts. "Apply gain" and Match LUFS apply the opposite of it.
Polarity inverted — the same audio, polarity flipped. The gain control cannot undo that — fix it in your DAW.
Files diverge at mm:ss — identical up to that point, then edited.
Not null — genuinely different audio.
Cannot compare — different sample rate or channel count, or a file with no audio in it.
A verdict is named after one correction but lists the others alongside it, so
"Gain difference only (−1.00 dB), offset by 15360 samples" means both:
Track B is a decibel quieter and starts 320 ms later.
Apply offset and Apply gain put those
corrections into the Track B offset and gain controls so you can
hear the two lined up; neither touches your files.
Peak difference decides the verdict — a single differing sample proves
the files aren't identical. Average difference (RMS) tells you how much it
matters to the ear. Sections turn green when that aspect is identical and
red when it differs; "Export report as HTML" saves the whole result as one
self-contained file.
Both files must share a sample rate and channel count — converting would invalidate
the test. Video files are not accepted; extract the audio first, e.g.
ffmpeg -i in.mov -vn -c:a copy out.wav.
The null test and AIFF import both use FFmpeg, which loads in the background when the
app starts — the status bar shows a spinner (and, on the web, download progress)
until it is ready. Everything else works without it.
Keyboard Shortcuts
Transport
Space: Play / Stop — stop rewinds to the start
P: Pause / resume in place
Enter: Stop and rewind
R: Repeat on / off
Switching
Left Arrow: Switch to Track A
Right Arrow: Switch to Track B
W: Toggle between A and B
Actions
M: Match LUFS
N: Run a null test
Shortcuts are ignored while you're typing in a number field. The legend in the status bar lists them too.
Limits
Gain on Track B: −90 dB to +6 dB. Values typed outside this range are clamped and the field flashes red.
Track B offset: ±10 seconds, and never more than the length of Track A. Values outside this range are clamped and the field flashes red. In Pro, the same offset is shown in milliseconds next to the field, at the sample rate the audio engine is running at.
Channels: Mono and stereo files only. Surround / multichannel files are not supported — the LUFS readout does not apply the BS.1770-4 surround weighting (Ls/Rs +1.5 dB, LFE excluded), so it would be wrong for them. The Null Test itself compares any channel count, sample for sample.
Null Test: Both files need the same sample rate and channel count. Very long files (roughly more than 200 million samples in total) work but need a lot of memory — compare shorter excerpts if the browser runs out.
Presets
Save and load your track combinations with all settings (gain on B, offset, file paths).
Save: Enter a name when prompted to save the current pair and settings
Load: Pick a preset from the list to restore it
Delete: Removes the preset that is selected in the list
Presets store file paths, not the files themselves. If a file has been moved or renamed, loading the preset reports "File not found" and leaves that track empty — re-import the file and save the preset again.
Audio output device and channel settings are NOT saved in presets — they remain global.
Repeat Markers
The strip above the waveforms holds a region with two edges, repeat-start and repeat-end, like the cycle range in a DAW. Each edge's line runs down through both tracks, and the times are shown under the waveforms.
Move a marker: Drag an edge of the region along the strip. A click on an empty part of the strip moves the nearer edge there.
Set a new region: Drag across the strip from one point to the other.
Reset: Double-click the strip to span the whole file again.
Rewind, Enter and Space go to repeat-start, so every listen begins at the same spot. Pause (P) stays where it is.
Repeat (R): While it is on, playback jumps back to repeat-start the moment it reaches repeat-end — sample-accurately, with no gap. Playback that starts after repeat-end runs on to the end of the file.
The markers stay where they are when you load another file, as long as they still fit in it; otherwise they go back to spanning the whole file.
Audio Output
The Device block in the left rail selects your audio interface and routes to specific output channels.
Device: Choose which audio interface to use (System Default or any connected device)
L / R: Which physical output carries the left and the right channel (up to the number of outputs the selected device reports)
The device and channel choice is remembered between sessions. If that device is
gone the next time you start, playback stays on the system default.
Use cases:
Route to specific monitors in multi-speaker setups
Send to external hardware for monitoring
Compare through different output chains
Support this App
If you find LUFS Compare useful, please consider donating.