使用SpeechRecognition库实现语音转文本时遇报错求助
macOS Monterey 12.0下PyAudio+SpeechRecognition语音转文本报错解决
问题概述
在macOS Monterey 12.0系统上使用PyAudio和SpeechRecognition库开发语音转文本程序时,持续出现三类报错:
- PaMacCore (AUHAL) 错误:
err='-66748', msg=Unknown Error - AssertionError:提示音频源未正确进入with语句
- AttributeError:
'NoneType' object has no attribute 'close'
已尝试重启设备、指定device_index参数、开启VSCode麦克风权限,问题仍未解决。
报错详情
source activate base /Users/praveersinghmehroke/anaconda3/bin/python "/Users/praveersinghmehroke/Desktop/Virtual Assistant/main2.py" (base) praveersinghmehroke@192 Virtual Assistant % source activate base (base) praveersinghmehroke@192 Virtual Assistant % /Users/praveersinghmehroke/anaconda3/bin/python "/Users/praveersinghmehroke/Desktop/Virtual Assistant/main2.py" ||PaMacCore (AUHAL)|| Error on line 1277: err='-66748', msg=Unknown Error Traceback (most recent call last): File "/Users/praveersinghmehroke/Desktop/Virtual Assistant/main2.py", line 8, in get_audio recorder.adjust_for_ambient_noise(source) File "/Users/praveersinghmehroke/anaconda3/lib/python3.10/site-packages/speech_recognition/__init__.py", line 383, in adjust_for_ambient_noise assert source.stream is not None, "Audio source must be entered before adjusting, see documentation for ``AudioSource``; are you using ``source`` outside of a ``with`` statement?" AssertionError: Audio source must be entered before adjusting, see documentation for ``AudioSource``; are you using ``source`` outside of a ``with`` statement? During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/Users/praveersinghmehroke/Desktop/Virtual Assistant/main2.py", line 16, in <module> get_audio() File "/Users/praveersinghmehroke/Desktop/Virtual Assistant/main2.py", line 7, in get_audio with sr.Microphone() as source: File "/Users/praveersinghmehroke/anaconda3/lib/python3.10/site-packages/speech_recognition/__init__.py", line 189, in __exit__ self.stream.close() AttributeError: 'NoneType' object has no attribute 'close' (base) praveersinghmehroke@192 Virtual Assistant %
运行代码
import speech_recognition as sr import pyaudio def get_audio(): recorder = sr.Recognizer() with sr.Microphone() as source: recorder.adjust_for_ambient_noise(source) print("Say something...") audio = recorder.listen(source) text = recorder.recognize_google(audio) print("You said: "+ str(text)) return text get_audio()
解决方案
1. 重新安装适配macOS的PyAudio
macOS 12+自带的portaudio版本存在兼容性问题,需手动安装适配版本:
- 卸载现有PyAudio:
pip uninstall pyaudio -y - 用Homebrew安装最新portaudio:
brew install portaudio - 指定portaudio路径重新安装PyAudio:
pip install --global-option='build_ext' --global-option='-I/usr/local/include' --global-option='-L/usr/local/lib' pyaudio
2. 补全系统麦克风权限
除VSCode外,需确保运行Python的终端(如Terminal、Anaconda Prompt)也拥有麦克风访问权限:
- 打开「系统偏好设置」→「安全性与隐私」→「隐私」→「麦克风」
- 勾选对应终端程序(如Terminal、iTerm、Anaconda-Navigator),允许其访问麦克风
- 重启终端和VSCode生效
3. 修正代码并指定正确设备索引
第一步:获取麦克风设备索引
先运行以下代码查看可用音频设备,找到你的麦克风对应的索引:
import pyaudio p = pyaudio.PyAudio() for i in range(p.get_device_count()): device_info = p.get_device_info_by_index(i) print(f"索引 {i}: {device_info['name']}") p.terminate()
第二步:修改原代码
添加异常捕获,并指定正确的device_index,同时调整环境噪音采集时长:
import speech_recognition as sr import pyaudio def get_audio(): recorder = sr.Recognizer() # 替换为你获取到的麦克风设备索引 device_index = 0 try: with sr.Microphone(device_index=device_index) as source: print("正在适配环境噪音...") # 延长噪音采集时长,提升稳定性 recorder.adjust_for_ambient_noise(source, duration=1) print("请说话...") audio = recorder.listen(source) text = recorder.recognize_google(audio) print(f"你说的是: {text}") return text except sr.UnknownValueError: print("无法识别语音,请重新尝试") except sr.RequestError: print("无法连接到Google语音识别服务") except Exception as e: print(f"发生错误: {str(e)}") get_audio()
内容的提问来源于stack exchange,提问作者Prav_1311
相关产品推荐
相关产品推荐

