From 2dcdb2abf534eafd23bc4aeee2f95a94a084f6c5 Mon Sep 17 00:00:00 2001 From: Mr-Neutr0n <64578610+Mr-Neutr0n@users.noreply.github.com> Date: Tue, 10 Feb 2026 00:08:08 +0530 Subject: [PATCH] Include file path in audio loading error messages When torchaudio.load() fails, the error message now indicates which file was being loaded. This helps users diagnose issues when loading multiple files in batch processing pipelines. Fixes #3810 --- src/torchaudio/__init__.py | 25 +++++++++++++++---------- src/torchaudio/_torchcodec.py | 4 ++-- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/torchaudio/__init__.py b/src/torchaudio/__init__.py index 6e2a965297..e9c5124383 100644 --- a/src/torchaudio/__init__.py +++ b/src/torchaudio/__init__.py @@ -83,16 +83,21 @@ def load( - Not all audio formats supported by torchaudio backends may be supported by TorchCodec. """ - return load_with_torchcodec( - uri, - frame_offset=frame_offset, - num_frames=num_frames, - normalize=normalize, - channels_first=channels_first, - format=format, - buffer_size=buffer_size, - backend=backend, - ) + try: + return load_with_torchcodec( + uri, + frame_offset=frame_offset, + num_frames=num_frames, + normalize=normalize, + channels_first=channels_first, + format=format, + buffer_size=buffer_size, + backend=backend, + ) + except Exception as e: + if str(uri) not in str(e): + raise type(e)(f"Failed to load audio from {uri}: {e}") from e + raise def save( diff --git a/src/torchaudio/_torchcodec.py b/src/torchaudio/_torchcodec.py index a785fe50ad..980610ae6c 100644 --- a/src/torchaudio/_torchcodec.py +++ b/src/torchaudio/_torchcodec.py @@ -120,14 +120,14 @@ def load_with_torchcodec( # Get sample rate from metadata sample_rate = decoder.metadata.sample_rate if sample_rate is None: - raise RuntimeError("Unable to determine sample rate from audio metadata") + raise RuntimeError(f"Unable to determine sample rate from audio metadata for {uri}") # Decode the entire file first, then subsample manually # This is the simplest approach since torchcodec uses time-based indexing try: audio_samples = decoder.get_all_samples() except Exception as e: - raise RuntimeError(f"Failed to decode audio samples: {e}") from e + raise RuntimeError(f"Failed to decode audio samples from {uri}: {e}") from e data = audio_samples.data