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

Python 3.10.4用SpeechRecognition 3.9.0调用Microphone遇AudioSource及AttributeError

解决语音识别代码的AssertionError与AttributeError问题

问题分析

你的代码报错本质是麦克风设备初始化失败,导致sr.Microphone()没有生成有效的音频源对象:

  • AssertionError提示音频源未正确进入上下文,实际是source对象无效;
  • 后续的AttributeError是with语句结束时,尝试对NoneType的source调用close()方法导致。

解决方案

1. 确认并指定正确的麦克风设备索引

先运行以下代码列出所有可用音频设备,找到对应麦克风的索引:

import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print(f"设备索引 {index}: {name}")

根据输出结果,将sr.Microphone(device_index=你的设备索引)替换到代码中。

2. 确保PyAudio版本与环境兼容

  • 卸载现有PyAudio:
    pip uninstall pyaudio -y
    
  • 安装与你的Python版本、系统位数完全匹配的PyAudio版本,重新安装后测试。

3. 优化代码的异常处理与初始化逻辑

使用更健壮的代码结构,提前捕获麦克风初始化异常:

import speech_recognition as sr

r = sr.Recognizer()

# 获取并选择正确的麦克风设备
mic_names = sr.Microphone.list_microphone_names()
target_device_idx = 0
# 自动筛选带"麦克风"标识的设备(可根据实际设备名调整)
for idx, name in enumerate(mic_names):
    print(f"{idx}: {name}")
    if "麦克风" in name:
        target_device_idx = idx
        break

try:
    with sr.Microphone(device_index=target_device_idx) as source:
        print("请说话...")
        # 先校准环境噪音,提升识别准确率
        r.adjust_for_ambient_noise(source, duration=0.5)
        audio = r.listen(source)
        
        try:
            # 指定中文识别,可选其他语言
            voice_data = r.recognize_google(audio, language="zh-CN")
            print(f"识别结果:{voice_data}")
        except sr.UnknownValueError:
            print("无法识别语音内容")
        except sr.RequestError:
            print("无法连接到语音识别服务")
except OSError as e:
    print(f"麦克风初始化失败:{str(e)}")
except Exception as e:
    print(f"发生未知错误:{str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:30:48