From 1c02ee4dc50cec7354a61a5e74284435397192b9 Mon Sep 17 00:00:00 2001 From: drryanhuang Date: Fri, 3 Jan 2025 11:59:10 +0000 Subject: [PATCH] fix soundfile.info error --- audio/audiotools/core/util.py | 32 +++++++++++++++++++++++++++++-- audio/audiotools/requirements.txt | 1 + 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/audio/audiotools/core/util.py b/audio/audiotools/core/util.py index 1e97e97aa..570e6619b 100644 --- a/audio/audiotools/core/util.py +++ b/audio/audiotools/core/util.py @@ -20,6 +20,7 @@ from typing import Tuple from typing import Type from typing import Union +import ffmpeg import librosa import numpy as np import paddle @@ -149,6 +150,30 @@ class Info: return self.num_frames / self.sample_rate +def info_ffmpeg(audio_path: str): + """ + Parameters + ---------- + audio_path : str + Path to audio file. + """ + probe = ffmpeg.probe(audio_path) + audio_streams = [ + stream for stream in probe['streams'] if stream['codec_type'] == 'audio' + ] + if not audio_streams: + raise ValueError("No audio stream found in the file.") + audio_stream = audio_streams[0] + + sample_rate = int(audio_stream['sample_rate']) + duration = float(audio_stream['duration']) + + num_frames = int(duration * sample_rate) + + info = Info(sample_rate=sample_rate, num_frames=num_frames) + return info + + def info(audio_path: str): """ @@ -157,8 +182,11 @@ def info(audio_path: str): audio_path : str Path to audio file. """ - info = soundfile.info(str(audio_path)) - info = Info(sample_rate=info.samplerate, num_frames=info.frames) + try: + info = soundfile.info(str(audio_path)) + info = Info(sample_rate=info.samplerate, num_frames=info.frames) + except: + info = info_ffmpeg(str(audio_path)) return info diff --git a/audio/audiotools/requirements.txt b/audio/audiotools/requirements.txt index 66186e574..835dbae61 100644 --- a/audio/audiotools/requirements.txt +++ b/audio/audiotools/requirements.txt @@ -1,3 +1,4 @@ +ffmpeg-python flatten_dict gradio IPython