You need to enable JavaScript to run this app. 为何Python speech_recognition库的listen方法录音无法自动停止
优惠活动
大模型
产品
解决方案
定价
更多

为何Python speech_recognition库的listen方法录音无法自动停止

卡停在“Recording...”状态的核心原因
  • listen()方法的终止逻辑是:持续监测输入音频的能量值,当检测到持续的、能量低于阈值的静默段(也就是用户说完话停下),才会终止录音启动识别。很多教程示例都漏了环境噪音校准步骤,默认的能量阈值是写死的初始值,遇到耳机设备的持续白噪音时,音频能量永远高于阈值,库会判定用户一直在说话,永远等不到静默终止条件,就一直卡在录音状态。
  • 默认读取的麦克风输入索引不匹配:speech_recognition库绑定的默认输入设备,很多时候不是你实际在用的耳机麦克风,如果读到的是没有音频输入的虚拟设备、或者系统其他没有接声音的麦,库会既检测不到有效语音,也无法正确判定静默结束,流程就完全卡死。
  • 默认的静默判定时长参数和实际场景不匹配:默认的pause_threshold是0.8秒,对有持续背景白噪的场景来说,很容易把杂音误判成语音的一部分,永远不满足录音结束的条件。
可落地的解决步骤
  • 先做麦克风设备排查:运行下方代码打印系统所有可用输入设备,找到你实际使用的耳机麦对应的列表索引,替换掉默认的设备选择逻辑
    import speech_recognition as sr
    # 打印所有可用麦克风的名称,列表序号就是对应设备的索引
    print(sr.Microphone.list_microphone_names())
    
  • 录音流程里增加必须的环境噪音校准:在正式listen()之前,调用adjust_for_ambient_noise()方法采集1-2秒的环境噪音,自动动态调整音频能量判定阈值,从根源上避免把持续白噪音判定为有效语音输入。校准过程中不要对着麦说话,保持和实际使用时一致的背景噪音状态。
  • 调整listen()的核心参数适配场景:
    • 把pause_threshold调整为1.5秒,匹配正常说话的停顿间隔,避免被环境杂音误触发终止
    • 增加timeout参数设置等待最大时长,如果到时间没检测到有效声音直接抛出超时异常,方便快速定位是设备选不对还是阈值有问题
    • 增加phrase_time_limit设置单次录音最长时长,避免流程无限制挂起
  • 改完的可运行代码参考:
    import speech_recognition as sr
    
    speech_engine = sr.Recognizer()
    
    
    def from_mic():
        # 替换为你之前排查到的耳机麦对应的实际索引
        TARGET_MIC_INDEX = 0
        with sr.Microphone(device_index=TARGET_MIC_INDEX) as micro:
            print("正在校准环境噪音,请保持1秒安静...")
            speech_engine.adjust_for_ambient_noise(micro, duration=1)
            print("Recording...")
            audio = speech_engine.listen(
                micro,
                timeout=5,
                phrase_time_limit=10,
                pause_threshold=1.5
            )
            print("Recognizing...")
            text = speech_engine.recognize_google(audio, language="de-DE")
            return text
    
    print(from_mic())
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 21:15:05