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

 

posted @ 2024-10-14 16:24  贱书生  阅读(88)  评论(0编辑  收藏  举报