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

Python 3聊天机器人无耳机时Microphone无法停止监听求助

解决无耳机时麦克风监听无法自动停止的问题

我明白你的困扰——连接耳机时语音录制正常,没耳机就停不下来,非得连上耳机说话才会停止。这大概率是因为无耳机时麦克风一直在检测到环境噪音(哪怕是很低的底噪),导致listen()方法认为音频输入还在持续,没触发pause_threshold的停止逻辑。

咱们可以通过以下几个调整来解决:

1. 先校准环境噪音,自动设置能量阈值

SpeechRecognition的Recognizer有个adjust_for_ambient_noise()方法,它会先监听一段时间的环境音,自动调整能量阈值,低于这个阈值的声音会被判定为无效噪音。把它加到代码里:

r = sr.Recognizer()
with sr.Microphone() as source:
    print("Listening....")
    # 先校准环境噪音,0.5秒足够快速完成校准
    r.adjust_for_ambient_noise(source, duration=0.5)
    r.pause_threshold = 1
    audio = r.listen(source)

2. 强制设置监听时间上限(可选)

如果校准后还是有问题,可以给listen()加上phrase_time_limit参数,强制限制最长监听时间,比如最多监听5秒,到时间自动停止:

audio = r.listen(source, phrase_time_limit=5)

3. 手动调整能量阈值(按需)

如果自动校准效果不好,你也可以手动设置energy_threshold的值,数值越小对声音越敏感,越大越能过滤噪音,根据你的环境调整:

r.energy_threshold = 300

修改后的完整代码示例:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    print("Listening....")
    # 校准环境噪音
    r.adjust_for_ambient_noise(source, duration=0.5)
    # 设置语音停顿1秒后停止监听
    r.pause_threshold = 1
    # 可选:强制最长监听时间5秒
    audio = r.listen(source, phrase_time_limit=5)

# 后续处理逻辑...

这样调整后,即使没连耳机,只要你停止说话超过1秒,或者到了设置的最长监听时间,listen()就会自动停止,继续执行后续代码啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:50:49