SIGN IN SIGN UP

Fix ASR pipeline mono conversion for channels-last audio (fixes #47886) (#47888)

* Fix ASR pipeline mono conversion for channels-last audio

The pipeline averaged multi-channel input over a hardcoded axis 0, which
assumes channels-first. soundfile.read, librosa.load(mono=False) and
scipy.io.wavfile.read all return channels-last, so a stereo waveform was
averaged across time and collapsed to one value per channel: 48000 samples
became 2, were padded back to silence, and transcribed as " you" with only
a warning saying the conversion had succeeded.

Infer the channel axis from the shorter dimension instead, and report the
actual shape rather than ndim, which always printed 2 for any 2-D input.

* Reject ambiguous channel layouts instead of inferring the channel axis

Per review: inferring the channel axis with argmin is unsafe. It picks an
arbitrary axis for ndim >= 3, and it silently downmixes 5.1 audio where the
weighting should be the caller's choice.

Keep the documented (channels, samples) layout, which is what torchcodec
returns, and raise when the input does not conform. A channels-last array gets
an error naming the transpose, rather than a transcription of two samples.

Also move the conversion ahead of F.resample. The resampler operates on the last
axis, so a multi-channel array had to be reduced first, and the stride
arithmetic reads shape[0] as samples.

* Correct the comment on why the downmix runs before resampling

* Apply suggestion from @Rocketknight1

---------

Co-authored-by: Matt <Rocketknight1@users.noreply.github.com>
K
Kayvan Zahiri committed
bb8f235353fb7a29ef293c9925182c497cad4ba4
Parent: e872ca2
Committed by GitHub <noreply@github.com> on 8/19/2026, 12:00:52 PM