From 7e9696f15635a83ff810cc86b79c0932cb4c8a27 Mon Sep 17 00:00:00 2001 From: Djraemon <154407769+Djraemon@users.noreply.github.com> Date: Mon, 4 Nov 2024 11:04:52 +0800 Subject: [PATCH] Fix audio format 2.0 (#2186) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 添加了对音频文件扩展名是否为.mp3的补丁,是mp3格式则转化为wav格式 * 增加检测音频文件是否为mp3格式的补丁 * 完善对音频文件后缀名的检查,若文件后缀不是.wav,则转化为wav * 增加音频文件后缀名检查;音频文件无效时抛出错误 * 在paraformer、vad两个模型中加入对音频文件后缀的检查,并将非wav格式转为wav格式 * 修改wav_path的数据类型,使demo能够顺利运行 --- .../onnxruntime/demo_paraformer_online.py | 3 ++- .../onnxruntime/funasr_onnx/paraformer_bin.py | 16 ++++++++++++++++ .../funasr_onnx/paraformer_online_bin.py | 17 +++++++++++++++++ .../python/onnxruntime/funasr_onnx/vad_bin.py | 17 +++++++++++++++++ 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/runtime/python/onnxruntime/demo_paraformer_online.py b/runtime/python/onnxruntime/demo_paraformer_online.py index bb72b41a1..cca5357ab 100644 --- a/runtime/python/onnxruntime/demo_paraformer_online.py +++ b/runtime/python/onnxruntime/demo_paraformer_online.py @@ -3,7 +3,8 @@ from funasr_onnx.paraformer_online_bin import Paraformer from pathlib import Path model_dir = "damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-online" -wav_path = ["{}/.cache/modelscope/hub/{}/example/asr_example.wav".format(Path.home(), model_dir)] +#wav_path = ["{}/.cache/modelscope/hub/{}/example/asr_example.wav".format(Path.home(), model_dir)] +wav_path = "{}/.cache/modelscope/hub/{}/example/asr_example.wav".format(Path.home(), model_dir) chunk_size = [5, 10, 5] model = Paraformer( diff --git a/runtime/python/onnxruntime/funasr_onnx/paraformer_bin.py b/runtime/python/onnxruntime/funasr_onnx/paraformer_bin.py index 4f35fcc86..bde7f442e 100644 --- a/runtime/python/onnxruntime/funasr_onnx/paraformer_bin.py +++ b/runtime/python/onnxruntime/funasr_onnx/paraformer_bin.py @@ -175,7 +175,23 @@ class Paraformer: plt.savefig(plotname, bbox_inches="tight") def load_data(self, wav_content: Union[str, np.ndarray, List[str]], fs: int = None) -> List: + def convert_to_wav(input_path, output_path): + from pydub import AudioSegment + try: + audio = AudioSegment.from_mp3(input_path) + audio.export(output_path, format="wav") + print("音频文件为mp3格式,已转换为wav格式") + + except Exception as e: + print(f"转换失败:{e}") + def load_wav(path: str) -> np.ndarray: + if not path.lower().endswith('.wav'): + import os + input_path = path + path = os.path.splitext(path)[0]+'.wav' + convert_to_wav(input_path,path) #将mp3格式转换成wav格式 + waveform, _ = librosa.load(path, sr=fs) return waveform diff --git a/runtime/python/onnxruntime/funasr_onnx/paraformer_online_bin.py b/runtime/python/onnxruntime/funasr_onnx/paraformer_online_bin.py index ddd857d37..3f63ea020 100644 --- a/runtime/python/onnxruntime/funasr_onnx/paraformer_online_bin.py +++ b/runtime/python/onnxruntime/funasr_onnx/paraformer_online_bin.py @@ -208,7 +208,24 @@ class Paraformer: return asr_res def load_data(self, wav_content: Union[str, np.ndarray, List[str]], fs: int = None) -> List: + + def convert_to_wav(input_path, output_path): + from pydub import AudioSegment + try: + audio = AudioSegment.from_mp3(input_path) + audio.export(output_path, format="wav") + print("音频文件为mp3格式,已转换为wav格式") + + except Exception as e: + print(f"转换失败:{e}") + def load_wav(path: str) -> np.ndarray: + if not path.lower().endswith('.wav'): + import os + input_path = path + path = os.path.splitext(path)[0]+'.wav' + convert_to_wav(input_path,path) #将mp3格式转换成wav格式 + waveform, _ = librosa.load(path, sr=fs) return waveform diff --git a/runtime/python/onnxruntime/funasr_onnx/vad_bin.py b/runtime/python/onnxruntime/funasr_onnx/vad_bin.py index 92928a840..3f21004bf 100644 --- a/runtime/python/onnxruntime/funasr_onnx/vad_bin.py +++ b/runtime/python/onnxruntime/funasr_onnx/vad_bin.py @@ -143,7 +143,24 @@ class Fsmn_vad: return segments def load_data(self, wav_content: Union[str, np.ndarray, List[str]], fs: int = None) -> List: + + def convert_to_wav(input_path, output_path): + from pydub import AudioSegment + try: + audio = AudioSegment.from_mp3(input_path) + audio.export(output_path, format="wav") + print("音频文件为mp3格式,已转换为wav格式") + + except Exception as e: + print(f"转换失败:{e}") + def load_wav(path: str) -> np.ndarray: + if not path.lower().endswith('.wav'): + import os + input_path = path + path = os.path.splitext(path)[0]+'.wav' + convert_to_wav(input_path,path) #将mp3格式转换成wav格式 + waveform, _ = librosa.load(path, sr=fs) return waveform