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

如何在Python中调用Windows 10自带的Windows Speech Recognition并以.wav文件作为输入?

这个问题问得好!其实在Python里完全可以实现把WAV文件输入到Windows自带的语音识别功能中,下面给你两种实用的方案:

方案一:通过pywin32调用Windows SAPI(底层接口)

Windows Speech Recognition的底层是基于**SAPI(Speech API)**实现的,我们可以用pywin32库直接调用这套COM接口,实现WAV文件的语音识别。

步骤:

  1. 首先安装依赖库:
pip install pywin32
  1. 编写识别代码:
import win32com.client

def recognize_wav_via_sapi(wav_file_path):
    # 初始化共享识别上下文
    reco_context = win32com.client.Dispatch("SAPI.SpSharedRecoContext")
    # 启用听写模式(无需自定义语法)
    grammar = reco_context.CreateGrammar()
    grammar.DictationSetState(1)

    # 创建音频流并加载WAV文件
    audio_stream = win32com.client.Dispatch("SAPI.SpFileStream")
    # 以只读模式打开音频文件
    audio_stream.Open(wav_file_path, win32com.client.constants.SSFMOpenRead, False)

    # 设置识别器的输入音频流
    reco_context.Recognizer.AudioInputStream = audio_stream

    # 定义识别结果回调函数
    def on_recognition(event):
        if event.RecognitionStatus == 0:  # 识别成功状态码
            print(f"识别结果:{event.PhraseInfo.GetText()}")

    # 绑定识别事件
    reco_context.Recognition += on_recognition

    # 启动识别(SER_DEFAULT表示同步等待识别完成)
    reco_context.Recognizer.Recognize(win32com.client.constants.SER_DEFAULT)

    # 清理资源
    audio_stream.Close()

# 调用示例
recognize_wav_via_sapi("your_audio.wav")

注意事项:

  • 你的WAV文件必须是16kHz采样率、16位深度、单声道的PCM格式,如果不符合,建议用工具转换(比如FFmpeg命令):
ffmpeg -i input.wav -ar 16000 -ac 1 -sample_fmt s16 output.wav
方案二:使用SpeechRecognition库(简化封装)

如果你不想直接操作底层COM接口,可以用SpeechRecognition库——它已经封装了调用Windows原生识别引擎的接口,代码更简洁。

步骤:

  1. 安装依赖库:
pip install SpeechRecognition
  1. 编写识别代码:
import speech_recognition as sr

def recognize_wav_via_sr(wav_file_path):
    recognizer = sr.Recognizer()
    # 读取WAV文件
    with sr.AudioFile(wav_file_path) as source:
        audio_data = recognizer.record(source)
    
    try:
        # 调用Windows自带的语音识别引擎
        result = recognizer.recognize_windows(audio_data)
        print(f"识别结果:{result}")
    except sr.UnknownValueError:
        print("Windows语音识别无法解析音频内容")
    except sr.RequestError as e:
        print(f"调用Windows语音识别服务失败:{e}")

# 调用示例
recognize_wav_via_sr("your_audio.wav")

优势:

  • 库会自动处理部分格式兼容问题,无需手动配置音频流参数
  • 代码更简洁,适合快速开发需求

两种方案都是直接调用Windows系统原生的语音识别服务,和Unity中UnityEngine.Windows.Speech的底层逻辑一致,都是依托Windows的SAPI实现的。你可以根据自己对控制粒度的需求选择合适的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:42:26