wavelens only ever compares a mono or stereo pair — so multichannel content has to go through wavchan first. That step isn’t just a format conversion; it’s a real signal-processing operation with its own tolerances to think about before you compare.
Why you can’t just “add the channels together”
A naive 5.1-to-stereo downmix — summing left and right surrounds straight into the stereo pair, full level — clips easily and throws away the spatial information a real downmix coefficient set is designed to preserve. wavchan’s downmix follows the standard ITU coefficients: front left/right pass through at unity, center is split evenly between the stereo pair at a reduced coefficient, and the surrounds are folded in at their own reduced level rather than full strength.
$ wavchan downmix --input program_5.1.wav --out program_stereo.wav --preset itu
That means a correct downmix is not bit-exact with any simple sum you’d compute by hand — the coefficients are doing real attenuation, not just channel routing.
What to actually compare
Once you have a stereo file on each side of a pipeline change, the comparison itself is ordinary wavelens analyze — but the tolerances you’d use for a straight stereo-to-stereo comparison are often too tight for a downmix comparison, because small differences in how two downmix implementations round or dither can add up to real, non-bit-exact differences that aren’t a regression.
$ wavchan downmix --input program_5.1.wav --out ref_stereo.wav --preset itu
$ wavchan downmix --input program_5.1_reencoded.wav --out dut_stereo.wav --preset itu
$ wavelens analyze --ref ref_stereo.wav --dut dut_stereo.wav --out report.html
Bit-Exactness will very often fail here even between two correct downmixes — that’s expected, not a bug, the same way it’s expected after a codec round-trip. Spectral Fidelity and Level Fidelity are the checks that actually tell you whether the downmix changed in a way that matters.
Splitting instead of downmixing
Not every multichannel workflow wants a mixed-down stereo pair — sometimes you want the individual channels split out and compared separately, channel by channel, rather than folded together. wavchan split does that instead:
$ wavchan split --input program_5.1.wav --out-dir channels/
That gives you one mono file per channel (channels/FL.wav, channels/FR.wav, channels/C.wav, and so on), each of which wavelens can compare directly against its own reference — useful when you specifically need to know whether, say, the center channel alone changed, rather than whether the downmixed result changed.
Packing back together
The inverse operation — wavchan pack — takes separate mono/stereo files and interleaves them back into one multichannel file, for when a pipeline step needs multichannel input rather than the split-apart pieces.
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.