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

Python 3.11.2中speech_recognition库引用报错求助

问题排查与代码修正

你的错误根源很明确:adjust_for_ambient_noise和listen是speech_recognition.Recognizer类的实例方法,并非speech_recognition模块的直接导出函数,直接通过sr模块调用自然会触发"找不到引用"的错误。

修正后的代码

import speech_recognition as sr

def noise_fix(mic):
    # 必须先创建Recognizer类的实例
    r = sr.Recognizer()
    with mic as source:
        # 用Recognizer实例调用adjust_for_ambient_noise
        r.adjust_for_ambient_noise(source)
        while True:
            try:
                # 同样用实例调用listen方法
                audio = r.listen(source, timeout=0.1)
                # 检查音频音量(注意:RMS值≠分贝,这里按你的逻辑保留判断)
                rms = audio.rms
                if rms < 35:
                    continue  # 忽略低音量音频
                # 这里添加"放行"逻辑,比如返回音频或执行后续处理
                print("检测到有效音频,RMS值:", rms)
            except sr.WaitTimeoutError:
                pass
            except Exception as e:
                # 捕获具体异常而非泛型,便于精准排查问题
                print(f"录音出错: {str(e)}")

# 调用示例:初始化麦克风并传入函数
if __name__ == "__main__":
    mic = sr.Microphone()
    noise_fix(mic)

关键改动说明

  1. 创建Recognizer实例:所有音频处理核心方法(调整环境噪音、监听音频)都需要通过Recognizer类的实例调用,这是该库的核心设计逻辑。
  2. 替换调用方式:将sr.adjust_for_ambient_noise改为r.adjust_for_ambient_noise,sr.listen改为r.listen,匹配库的API规范。
  3. 优化异常处理:把泛型except改为捕获具体Exception并打印错误详情,避免掩盖潜在问题。
  4. 补充麦克风初始化示例:确保调用函数时传入合法的Microphone实例,避免参数错误导致的隐性问题。

额外提示

你提到的"35分贝"和代码中的rms < 35并不等价:RMS是音频信号的均方根值(线性刻度),而分贝是对数刻度。如果需要准确过滤35分贝以下的声音,需通过公式将RMS转换为分贝(参考公式:db = 20 * log10(rms / reference_rms),参考值通常取1)后再做判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:37:54