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>
修复步骤
检查麦克风权限与设备状态
- 关闭所有占用麦克风的程序(如视频会议、语音聊天软件)
- 进入Windows设置>隐私和安全性>麦克风,确认允许当前Python环境访问麦克风
- 使用系统自带录音工具测试麦克风硬件是否正常工作
指定音频设备参数
- 运行以下代码获取可用音频设备列表,找到麦克风对应的
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']}") - 修改原代码中
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(若上述步骤无效)
- 卸载现有PyAudio:
pip uninstall -y pyaudio - 下载对应Python3.8的PyAudio预编译wheel文件(适配系统架构)
- 本地安装wheel文件:
pip install PyAudio-0.2.13-cp38-cp38-win_amd64.whl(替换为实际下载的文件名)
- 卸载现有PyAudio:
内容的提问来源于stack exchange,提问作者Muskaan Sharma
相关产品推荐
相关产品推荐

