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

PyAudio引发语音命令程序报错(Errno -9999/-9988)求解决方法

修复PyAudio相关语音识别程序错误的步骤

问题背景

已安装与Python 3.8.5兼容的PyAudio 0.2.13版本,运行语音识别代码时触发OSError: [Errno -9999] Unanticipated host error,后续伴随OSError: [Errno -9988] Stream closed错误。

原代码

import pyttsx3 
import speech_recognition as sr
import webbrowser
import datetime
import pyjokes
import smtplib


def sptext():
    recognizer = sr.Recognizer() 
    with sr.Microphone() as source:
        print("Listening...")
        # Noise cancellation
        recognizer.adjust_for_ambient_noise(source)
        audio= recognizer.listen(source)
        try:
            print("Jack is recognizing...")
            data = recognizer.recognize_google(audio)
            print(data)
        except sr.UnknownValueError:
            print("Jack is uncertain")
            
        
sptext()

错误回溯

Listening...
Traceback (most recent call last):
  File "c:\Users\91999\.vscode\Python\tempCodeRunnerFile.py", line 16, in sptext
    audio= recognizer.listen(source)
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\speech_recognition\__init__.py", line 523, in listen
    buffer = source.stream.read(source.CHUNK)
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\speech_recognition\__init__.py", line 199, in read
    return self.pyaudio_stream.read(size, exception_on_overflow=False)
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\pyaudio\__init__.py", line 570, in read
    return pa.read_stream(self._stream, num_frames,
OSError: [Errno -9999] Unanticipated host error

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "c:\Users\91999\.vscode\Python\tempCodeRunnerFile.py", line 27, in <module> 
    sptext()
  File "c:\Users\91999\.vscode\Python\tempCodeRunnerFile.py", line 23, in sptext   
    print(" is uncertain")
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\speech_recognition\__init__.py", line 189, in __exit__
    self.stream.close()
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\speech_recognition\__init__.py", line 204, in close
    if not self.pyaudio_stream.is_stopped():
  File "C:\Users\91999\AppData\Local\Programs\Python\Python38\lib\site-packages\pyaudio\__init__.py", line 515, in is_stopped
    return pa.is_stream_stopped(self._stream)
OSError: [Errno -9988] Stream closed
PS C:\Users\91999\.vscode\Python> 

修复步骤

  • 检查麦克风权限与设备状态

    1. 关闭所有占用麦克风的程序(如视频会议、语音聊天软件)
    2. 进入Windows设置>隐私和安全性>麦克风,确认允许当前Python环境访问麦克风
    3. 使用系统自带录音工具测试麦克风硬件是否正常工作
  • 指定音频设备参数

    1. 运行以下代码获取可用音频设备列表,找到麦克风对应的deviceIndex:
      import pyaudio
      p = pyaudio.PyAudio()
      for i in range(p.get_device_count()):
          print(f"设备索引{i}: {p.get_device_info_by_index(i)['name']}")
      
    2. 修改原代码中sr.Microphone()的初始化,指定设备索引和采样率:
      with sr.Microphone(device_index=你的设备索引, sample_rate=16000) as source:
      
  • 优化异常处理逻辑
    扩展异常捕获范围,覆盖PyAudio设备错误、API请求错误等场景,避免流关闭时触发二次错误,修改后的完整代码:

    import pyttsx3 
    import speech_recognition as sr
    import webbrowser
    import datetime
    import pyjokes
    import smtplib
    
    def sptext():
        recognizer = sr.Recognizer() 
        # 替换为你的麦克风设备索引
        with sr.Microphone(device_index=0, sample_rate=16000) as source:
            print("Listening...")
            # 缩短降噪时长,避免设备超时
            recognizer.adjust_for_ambient_noise(source, duration=0.5)
            try:
                # 设置监听超时和短语时长,防止无限等待
                audio = recognizer.listen(source, timeout=5, phrase_time_limit=10)
                print("Jack is recognizing...")
                data = recognizer.recognize_google(audio)
                print(data)
            except sr.UnknownValueError:
                print("Jack is uncertain")
            except sr.RequestError:
                print("Google语音识别API请求失败")
            except OSError as e:
                print(f"音频设备错误: {str(e)}")
            except Exception as e:
                print(f"未知错误: {str(e)}")
              
    sptext()
    
  • 重新安装PyAudio(若上述步骤无效)

    1. 卸载现有PyAudio:pip uninstall -y pyaudio
    2. 下载对应Python3.8的PyAudio预编译wheel文件(适配系统架构)
    3. 本地安装wheel文件:pip install PyAudio-0.2.13-cp38-cp38-win_amd64.whl(替换为实际下载的文件名)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:45:02