A WaveLens report never just says “pass” or “fail.” Underneath the overall verdict are six independent checks, each looking at a different way two audio files can stop being the same file. Here’s what each one is actually measuring, and what it means when one of them turns red.

Every run starts the same way: wavelens analyze takes a reference file and a device-under-test (DUT) copy, and runs both through the same six-check battery.

$ wavelens analyze --ref reference.wav --dut device_under_test.wav --out report.html

wrote report.html (bit_exact: FAIL, level_fidelity: PASS, loudness: PASS)

The one-line stdout summary is a preview. The full report breaks the verdict down check by check, and that’s where the useful information actually lives.

Signal Alignment

Before any comparison can mean anything, both files need to be looking at the same moment in time. Signal Alignment finds the time offset between reference and DUT — a few samples of latency from a codec, a resampler, or a processing chain — and corrects for it before every other check runs. If this check fails, every other result on the report should be treated with suspicion: the tool may be comparing the wrong samples to each other.

Spectral Fidelity

This is the frequency-domain comparison — does the DUT have the same frequency response as the reference, or has something rolled off the highs, boosted the low end, or introduced energy that wasn’t there before? A Spectral Fidelity failure usually points at filtering, EQ, or a lossy codec’s psychoacoustic model doing something audible.

Bit-Exactness

The strictest check on the report. Bit-Exactness asks a literal question: is every sample in the DUT identical to the corresponding sample in the reference? Not “close,” not “inaudibly different” — identical. A single flipped bit anywhere in the file fails this check.

FAIL

Bit-Exactness · sample 48,204 — the report names the exact sample where the files first diverge, so you're not hunting for it by ear.

This is also the check most likely to fail for reasons that don’t matter. Dither, a different but valid resampling implementation, or an intentional processing step will all break bit-exactness while leaving the audio perceptually identical. That’s exactly why it’s one check among six, not the whole verdict — see Bit-Exact vs. “close enough” for when this one actually matters.

Level Fidelity

Checks that overall amplitude/gain wasn’t quietly changed somewhere in the chain — a mismatched gain stage, an unintended normalize, a broadcast chain applying makeup gain. Level Fidelity catches shifts that a spectral or loudness check alone might not flag clearly.

Distortion

Compares the harmonic and noise floor content between files — has the DUT introduced clipping, quantization noise, or harmonic artifacts that weren’t present in the reference? This is where a bad gain-staging decision or an overloaded encoder tends to show up first.

Loudness (BS.1770)

Added in v0.7.0. Measures integrated loudness per the BS.1770 standard broadcasters actually use for delivery specs. A file can pass every other check and still fail loudness if a normalization step or a broadcast chain pushed it out of spec — see BS.1770 loudness, explained for what this measurement does and doesn’t catch.

Reading the overall verdict

The Overall Verdict is a rollup of all six — if any check fails, the run fails. That’s deliberately strict by default, and deliberately not the end of the story. A report showing Bit-Exactness: FAIL next to five passes is telling you something very different from one showing Spectral Fidelity: FAIL and Loudness: FAIL together. The point of six checks instead of one PASS/FAIL light is that you get to make that call yourself, with the actual evidence in front of you.

See it for yourself.

WaveLens compares a reference file against a processed copy and shows you exactly where they diverge — down to the sample — not just whether they still sound the same. One command, one report you can point at.

Get WaveLens Read the docs