wavelens only ever compares a mono or stereo pair — so multichannel content has to be taken apart before you compare it. wavchan, one of the free tools, does that: it splits a multichannel file into pairs or single channels, and packs them back together. What it doesn’t do is downmix.
wavchan rearranges channels; it doesn’t downmix
A real 5.1-to-stereo downmix applies coefficients: the center channel folded into left and right at a reduced level, the surrounds folded in at their own reduced level. wavchan has no downmix command and applies no coefficients. Its five commands move audio around: split, pack, info, join and mix. (mix adds files together sample by sample at unity gain, and warns if the sum could exceed 0 dBFS. It is not a downmix.)
If your pipeline produces a stereo downmix, compare the stereo outputs directly: the reference downmix against the DUT downmix, both stereo already, with no wavchan step at all. Expect Bit-Exactness to fail often when two different downmix implementations round or dither differently. That is the same expected, non-gating result as after a codec round trip, and Spectral Fidelity and Level Fidelity are the checks that tell you whether the result changed in a way that matters.
Splitting into stereo pairs
To compare the channels of a 5.1 file, split it into stereo pairs. info shows what’s inside:
$ wavchan info --input program_5.1.wav
file: program_5.1.wav
format: WAVEX (WAVE_FORMAT_EXTENSIBLE)
sample rate: 48000 Hz
bit depth: 24-bit
channels: 6
duration: 2.000s (96000 frames)
channel mask: 0x3f
channel map: L, R, C, LFE1, Ls, Rs
$ wavchan split --input program_5.1.wav --as stereo -o pairs
[Save as] pairs/program_5.1_L_R.wav
[Save as] pairs/program_5.1_C_LFE1.wav
[Save as] pairs/program_5.1_Ls_Rs.wav
Split the reference and the DUT the same way, each into its own folder, and the file names match pair for pair. Then run wavelens once per pair:
$ for pair in L_R C_LFE1 Ls_Rs; do
wavelens analyze --ref ref_pairs/program_5.1_$pair.wav --dut dut_pairs/program_5.1_$pair.wav --out reports/$pair.html
done
Or one channel at a time
When you need to know whether, say, the center channel alone changed, split to mono instead (that is the default):
$ wavchan split --input program_5.1.wav -o channels
[Save as] channels/program_5.1_L.wav
[Save as] channels/program_5.1_R.wav
[Save as] channels/program_5.1_C.wav
[Save as] channels/program_5.1_LFE1.wav
[Save as] channels/program_5.1_Ls.wav
[Save as] channels/program_5.1_Rs.wav
Each file can go straight into wavelens against its own reference. A multichannel file must be in the extensible WAV format (WAVEX), which carries the channel names; with --as stereo, a channel with no partner is paired with silence and its file name ends in _0.
Packing back together
The inverse operation, wavchan pack, takes mono and stereo files and writes them into one multichannel file. Each --segment names the channels that file supplies:
$ wavchan pack --segment L,R:pairs/program_5.1_L_R.wav --segment C,LFE1:pairs/program_5.1_C_LFE1.wav --segment Ls,Rs:pairs/program_5.1_Ls_Rs.wav -o rebuilt_5.1.wav
Packing the three pairs from above back together gives back the original file, byte for byte. Both commands keep the samples and the format of their inputs unchanged, so you can split before a pipeline step and pack afterwards without altering the audio.
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.