树莓派Zero 2上PyAudio启动失败:ALSA无法打开slave问题求助
解决树莓派Zero 2上PyAudio的"unable to open slave"报错
兄弟,我太懂你这种xkcd979时刻的憋屈了——找到一模一样的问题帖却连个回复都没有,换谁都挠头!先帮你把问题理清楚:
在全新树莓派Zero 2上运行PyAudio时程序卡住,核心报错如下:
Python 3.9.2 (default, Mar 12 2021, 04:06:34) [GCC 10.2.1 20210110] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pyaudio >>> stream = pyaudio.PyAudio() ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2660:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib pcm_dmix.c:1075:(snd_pcm_dmix_open) unable to open slave已尝试设置默认声卡、更换USB适配器,但问题依旧,同款配置在树莓派3上可正常运行。
下面是几个针对性的解决方案,你可以按顺序试试:
1. 强制指定PyAudio使用的设备
自动检测默认设备经常掉链子,先手动列出所有可用音频设备:
import pyaudio p = pyaudio.PyAudio() for i in range(p.get_device_count()): print(p.get_device_info_by_index(i))
找到你的USB音频dongle对应的index值(比如输出里的"index": 1),然后初始化流的时候直接指定这个设备:
p = pyaudio.PyAudio() stream = p.open( format=pyaudio.paInt16, channels=1, rate=44100, input=True, input_device_index=1 # 替换成你找到的设备索引 )
2. 修改ALSA配置文件
树莓派Zero 2的ALSA默认配置和3有差异,编辑/etc/asound.conf(没有的话直接新建),添加以下内容:
pcm.!default { type hw card 1 # 这里替换成你的USB声卡编号,用`aplay -l`命令可以查看 } ctl.!default { type hw card 1 }
保存后重启ALSA服务或者直接重启树莓派:
sudo alsa force-reload
3. 重新编译安装PyAudio
预编译的PyAudio包可能和Zero 2的硬件兼容不佳,手动编译安装试试:
先卸载现有版本:
pip uninstall pyaudio -y
安装编译依赖:
sudo apt-get update && sudo apt-get install portaudio19-dev python3-dev -y
然后从源码编译安装:
pip install --no-binary :all: pyaudio
4. 检查电源供电
树莓派Zero 2的USB口供电能力比3弱,如果你的USB音频dongle功耗稍高,容易导致识别不稳定。试试换个5V 2A及以上的电源适配器,或者用带外接供电的USB hub连接音频设备。
内容的提问来源于stack exchange,提问作者Dan Humphreys
相关产品推荐
相关产品推荐

