pyaudio无法使用sudo执行:OSError: [Errno -9996] Invalid input device (no default output device)
项目背景
在树莓派上通过语音控制ws2812b灯带,使用 pyaudio 作为语音输入,使用 rpi_ws281x
控制灯带的颜色。
问题描述
目前出现的问题是由于rpi_ws281x使用PWM引脚,需要使用sudo来执行,但是pyaudio使用sudo执行时会报错:OSError: [Errno -9996] Invalid input device (no default output device)
解决方案
将 pulseaudio 作为系统服务运行,而不是用户服务。
解决步骤
首先,禁用用户模式(如果启用的话):
sudo systemctl --global disable pulseaudio.service pulseaudio.socket
然后创建一个systemd文件(/etc/systemd/system/pulseaudio.service):
[Unit] Description=PulseAudio Daemon [Install] WantedBy=multi-user.target [Service] Type=simple PrivateTmp=true ExecStart=/usr/bin/pulseaudio --system --realtime --disallow-exit --no-cpu-limit
将 pulse 和 pi 用户添加到所需的组:
sudo usermod -a -G audio pulse #add pulse to audio group sudo usermod -a -G pulse-access pi #add pi to pulse-access group sudo usermod -a -G pulse-access root #add root to pulse-access group
最后,启动服务:
sudo systemctl enable pulseaudio.service
sudo systemctl start pulseaudio.service
参考文档:raspberry pi - Running part of python program with/without sudo - Stack Overflow