From 37d6930561f4e798e76f81c37d912906c97b6bea Mon Sep 17 00:00:00 2001 From: pointerhacker <145901472+pointerhacker@users.noreply.github.com> Date: Wed, 20 Nov 2024 18:39:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=B7=BB=E5=8A=A0=E9=9F=B3=E9=A2=91?= =?UTF-8?q?=E7=A0=81=E7=8E=87=E9=AA=8C=E8=AF=81=E4=BB=A5=E9=98=B2=E6=AD=A2?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E5=BC=82=E5=B8=B8=20(#2219)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: zhaochaojin --- funasr/utils/load_utils.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/funasr/utils/load_utils.py b/funasr/utils/load_utils.py index 37b3dbfbf..aabf5d9f3 100644 --- a/funasr/utils/load_utils.py +++ b/funasr/utils/load_utils.py @@ -1,6 +1,7 @@ import os import torch import json +from io import BytesIO import torch.distributed as dist import numpy as np import kaldiio @@ -9,6 +10,7 @@ import torchaudio import time import logging from torch.nn.utils.rnn import pad_sequence +from pydub import AudioSegment try: from funasr.download.file import download_from_url @@ -136,6 +138,7 @@ def load_audio_text_image_video( def load_bytes(input): + input = validate_frame_rate(input) middle_data = np.frombuffer(input, dtype=np.int16) middle_data = np.asarray(middle_data) if middle_data.dtype.kind not in "iu": @@ -150,6 +153,31 @@ def load_bytes(input): array = np.frombuffer((middle_data.astype(dtype) - offset) / abs_max, dtype=np.float32) return array +def validate_frame_rate( + input, + fs: int = 16000, +): + + # 将文件读取为字节流 + byte_data = BytesIO(input) + + # 使用 pydub 加载音频 + audio = AudioSegment.from_file(byte_data) + + # 确保采样率为 16000 Hz + if audio.frame_rate != fs: + audio = audio.set_frame_rate(fs) + + # 将重新采样后的音频导出为字节流 + output = BytesIO() + audio.export(output, format="wav") + output.seek(0) + + # 获取重新采样后的字节流数据 + input = output.read() + + return input + def extract_fbank(data, data_len=None, data_type: str = "sound", frontend=None, **kwargs): if isinstance(data, np.ndarray):