PulseAudioを起動させるには?

Raspberry Piをネットワーク経由で音声を再生できるPulseAudioシンクとして使いたいのですが、どうすればいいですか?

手始めに、ローカルでPulseaudioを動かしたいのですが、様々なエラーに遭遇しています。推奨されているDebianのイメージを使っています。

PulseAudioを起動して実行するための最良の手順は何でしょうか?


今まで試した内容です。

手順

これまでの私の手順は以下のようなものでした。

PulseaudioとVLCをインストールします。

sudo apt-get install pulseaudio

GStreamerがpulseaudioのシンクを使うように設定する。

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
質問へのコメント (1)

Raspberry PiでALSAシンクを使って、以下のような手順で動作させました。

必要なファイルをインストールする。

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 ファイルを再生したり、システムのサウンドコントロールパネルでシンクを選択してネットワーク経由で再生すれば、動作確認ができるはずです。

また、システムワイドモードで設定できるかもしれません。

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)

Wheezy raspbian (2012-10-28) でアナログ出力を使って pulseaudio を動作させるのに苦労しました。以下は、システムモードではなく、セッションモードで動作させるために行ったことです。 システムモードでも動作するかもしれませんが、私は試していません。サーバーのセットアップはもう少し手間がかかります。この情報はいろいろなところで見つけましたが、ここに集めることで誰かの助けになることを願っています。

pulseaudioをインストールし、ユーザ(例えばeric)がaudioグループの一員であることを確認します。

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

etc/asound.conf を以下のように変更します。 これにより、pulseaudio が alsa デバイスとしてデフォルトで使用されるように設定され、アプリケーションは追加の設定なしに使用できるようになります。 最初の2つの宣言は(コメントされているものも含めて)元のファイルにあったものです。

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を使用します。 他の方法も同様に機能するかもしれません。 この後のビットは必要性がよくわからないのですが、魔法のような成分だと思います。詳しくはこちら](http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=25684&p=234267&hilit=pulseaudio#p234267)を参照してください

最後に、曲の再生と再生の間のオーディオポップを黙らせるには、/etc/pulse/default.paのこの行を以下のようにコメントアウトしてください。

#load-module module-suspend-on-idle

2つのソースを同時に再生すると、まだいくつかのドロップアウトがありますが、もしその改善策を見つけたら、この回答に追加します。

解説 (1)