树莓派Python音频驱动故障:语音识别程序报错求助
树莓派Python语音识别报错解决方案
一、先解决ALSA底层音频问题
- 确认音频设备识别状态:执行
arecord -l列出输入设备,aplay -l列出输出设备,确保目标设备(如USB麦克风、板载音频)出现在列表中。 - 设置默认ALSA设备:创建或修改
~/.asoundrc文件,添加以下内容(替换plughw:0,0为你的设备ID,来自上述命令输出):pcm.!default { type hw card 0 device 0 } ctl.!default { type hw card 0 device 0 } - 测试音频输入是否正常:执行
arecord -D plughw:0,0 -d 5 test.wav录制5秒音频,再用aplay test.wav播放,确认能正常录制和播放。 - 修复ALSA权限:将当前用户加入audio组,执行
sudo usermod -a -G audio pi,重启系统后生效。
二、排查Python语音识别库依赖与配置
- 升级或重装核心依赖:执行
pip install --upgrade SpeechRecognition pyaudio,如果pyaudio安装失败,改用系统包安装:sudo apt install python3-pyaudio。 - 强制指定音频设备索引:在代码中明确指定设备ID,比如使用SpeechRecognition库时:
import speech_recognition as sr r = sr.Recognizer() # 替换device_index为arecord -l中显示的设备索引(从0开始) mic = sr.Microphone(device_index=0) - 确保音频格式兼容:大部分语音识别API要求音频为16kHz采样率、16位深度、单声道,录制时强制设置格式:
with mic as source: r.adjust_for_ambient_noise(source) audio = r.listen(source, sample_rate=16000)
三、解决代码层面的异常
- AssertionError:通常是代码中断言条件不满足,比如音频输入为空或设备索引无效。可在代码中添加设备存在性检查:
mic_list = sr.Microphone.list_microphone_names() if not mic_list: raise RuntimeError("No microphone detected") # 确认使用的索引在有效范围内 assert 0 <= device_index < len(mic_list), "Invalid device index" - AttributeError:多是调用了不存在的方法/属性,比如API拼写错误或使用废弃方法。检查代码中是否有拼写错误(如把
recognize_google写成recognize_goole),同时确保仅将listen()返回的AudioData对象传给识别函数。
四、其他排查方向
- 检查树莓派供电:供电不足会导致音频芯片工作异常,使用官方5V/2.5A电源适配器。
- 关闭其他占用音频的程序:避免录音、播放类软件占用音频设备。
内容的提问来源于stack exchange,提问作者Jim Bellette
相关产品推荐
相关产品推荐

