如何运行 PulseAudio?

我想把我的 Raspberry Pi 用作 PulseAudio sink,通过网络播放音频。

首先,我想让 Pulseaudio 在本地运行,但遇到了各种错误。我使用的是推荐的 Debian 映像。

让 PulseAudio 启动并运行的最佳程序是什么?


这是我目前尝试过的方法:

程序

到目前为止,我的程序大致如下:

安装 Pulseaudio 和 VLC:

sudo apt-get install pulseaudio

配置 GStreamer 以使用 pulseaudio sink:

gconftool-2 -t string --set /system/gstreamer/0.10/default/audiosink pulsesink

加载音频设备的内核模块

sudo modprobe snd_bcm2835

使用 mp3 运行 VLC

vlc 

问题

VLC 反复崩溃,并打印此错误信息:

[0x7503d0] alsa audio output error: cannot write: Broken pipe

我已经使用 ALSA sink 在我的 Raspberry Pi 上实现了这一功能,具体步骤如下:

安装必要的文件

sudo apt-get install pulseaudio pulseaudio-module-zeroconf alsa-utils avahi-daemon

启用 ALSA:

sudo modprobe snd-bcm2835                      # load module for single boot
echo "snd-bcm2835" | sudo tee -a /etc/modules  # load module for persistance

设置联网:

sudo nano /etc/pulse/default.pa

并取消注释:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16
load-module module-zeroconf-publish

要启动 pulseaudio 服务器,请使用

pulseaudio -D

您可以使用 paplay("sudo apt-get install pulseaudio-utils")播放 wav 文件,也可以通过网络在系统的声音控制面板中选择 sink 来测试其是否正常工作。

您也可以在全系统模式下进行设置:

sudo pulseaudio --system 
评论(1)

如果希望 pulseaudio 在启动时启动,但作为用户级服务,可以制作一个 systemd 单元文件。这可能会有所帮助,因为 pulseaudio 并不喜欢在系统模式下运行。https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/SystemWide/

以下是我在 /etc/systemd/system/pulseaudio.service 中编写的服务

[Unit]
Description=PulseAudio Sound System
Before=sound.target

[Service]
User=pi
BusName=org.pulseaudio.Server
ExecStart=/usr/bin/pulseaudio
Restart=always  

[Install]
WantedBy=session.target

Before= 让它等到 sound.target 初始化之后。 BusName= 连接到 D-Bus WantedBy=session.target(会话目标)是一个有用的默认设置,但我并不清楚它的作用。

评论(1)

我很难让 pulseaudio 在 Wheezy raspbian (2012-10-28) 上使用模拟输出运行。以下是我为了让它在每个会话模式(而非系统模式)下运行所做的工作。 系统模式可能也能运行,但我还没有尝试过。设置服务器需要更多的工作。我在不同的地方找到了这些信息,希望收集到这里能对大家有所帮助。

安装 pulseaudio 并确保用户(如 eric)属于音频组:

sudo apt-get install pulseaudio pulseaudio-utils
sudo adduser eric audio

将 /etc/asound.conf 改成下面的样子。 这将设置 pulseaudio 默认用作 alsa 设备,因此应用程序无需额外配置即可使用。 前两个声明(包括注释中的声明)在原始文件中。

pcm.mmap0 {
    type mmap_emul;
    slave {
      pcm "hw:0,0";
    }
}

#pcm.!default {
#  type plug;
#  slave {
#    pcm mmap0;
#  }
#}

pcm.pulse { type pulse }
ctl.pulse { type pulse }
pcm.!default { type pulse }
ctl.!default { type pulse }

在 /etc/pulse/daemon.conf 中添加以下几行:

default-sample-rate = 48000
resample-method = trivial

trivial "是质量最低的方法,但使用约 6% 的 CPU。src-sinc-fastest "对我来说也有效,但会消耗约 25% 的 CPU。 其他方法可能也行得通。 后面这一点我不太明白有什么必要,但它似乎是神奇的成分。您可以 在此阅读更多信息

最后,要消除歌曲播放间隙的弹出音频,请注释掉 /etc/pulse/default.pa 中的这一行,如下所示:

#load-module module-suspend-on-idle

当同时播放两个音源时,仍会出现一些掉音的情况,如果我发现了解决方法,我会添加到本答案中。

评论(1)