You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Vosk语音识别:自动适配WAV采样率解决识别异常问题

问题原因
  • 在线转换后的WAV文件存在采样率元数据与实际音频数据不匹配的问题:wave库读取的是文件头记录的采样率,但部分文件的文件头被错误修改(仅改了元数据却未实际重采样音频),导致识别器用错误的采样率初始化,无法正确解析音频数据,输出无意义内容。
  • 你之前用librosa.load(audio_file, sr=48000)是强制将音频重采样到48000,但如果原音频实际采样率不是48000,这种强制重采样会导致音频失真,依然无法被正确识别。
解决方案

要实现自动化适配,核心是先获取音频的真实采样率,再统一转换为Vosk模型支持的采样率(你的代码中模型对应96000),步骤如下:

  1. 获取音频真实采样率
    使用librosa不强制重采样的方式加载音频,得到实际采样率:

    import librosa
    y, actual_sr = librosa.load("a.wav", sr=None)  # sr=None表示保留原始采样率
    
  2. 统一重采样到目标采样率
    将音频转换为Vosk模型要求的采样率(这里是96000):

    target_sr = 96000
    if actual_sr != target_sr:
        y = librosa.resample(y, orig_sr=actual_sr, target_sr=target_sr)
    
  3. 转换为Vosk兼容的音频格式并识别
    Vosk需要16位单声道PCM格式的音频数据,转换后传入识别器:

    import vosk
    import numpy as np
    
    # 将浮点音频转换为16位PCM字节流
    audio_pcm = (y * 32767).astype(np.int16).tobytes()
    
    # 初始化识别器(使用目标采样率)
    rec = vosk.KaldiRecognizer(model, target_sr)
    rec.AcceptWaveform(audio_pcm)
    print(rec.FinalResult())
    

补充说明:

  • 若你的Vosk模型支持多种采样率,也可以直接用真实采样率初始化识别器,但统一转换为模型训练时用的采样率(比如96000)能获得更好的识别效果。
  • 如果音频是立体声,记得先转成单声道:y = librosa.to_mono(y),Vosk默认只支持单声道输入。

内容的提问来源于stack exchange,提问作者Alerto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 19:20:53