N=1

主にコンピュータ技術関連のことを投稿。 / 投稿は個人の意見であり所属団体の立場を代表するものではありません。

PulseAudio導入

Linuxのサウンドデバイスは同時に複数のアプリケーションを扱うことが出来ず、xmmsで音楽を聞きながらpidgin等のアラートを鳴らしたりすることが出来ない。
そこでesoundやartsなどの、デバイスの仲介役を立ててそれらに各アプリケーションが音を渡すようにしていた。
その仲介役のなかで最近流行なのがPulseAudio
かなり多くのアプリケーションやディストリビューションが対応、移行していっている。flashplayer10betaも対応したようだ。
PulseAudioに注目すべき理由(とPulseAudioの始め方)
しかしまだBLFSに記述が無いので自分でやってみる。

準備

依存

liboil
liboilは最適化オプションつけたらpulseaudio起動時にこけるので注意
libsndfile
1.0.17だとFLAC関連のエラーがでる。1.0.19をパッチ無しでコンパイルすると通る。
libsamplerate
libatomic_ops-1.2
speex
gdbm

make

pulseaudio-0.9.14.tar.gzを展開しcd

$ ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc && make -j4
(略)
pulseaudio-dumpmodules.o: In function `pa_dump_modules':
dumpmodules.c:(.text+0x2eb): undefined reference to `lt__PROGRAM__LTX_preloaded_symbols'
dumpmodules.c:(.text+0x2f0): undefined reference to `lt__PROGRAM__LTX_preloaded_symbols'
pulseaudio-dumpmodules.o: In function `callback':
dumpmodules.c:(.text+0x464): undefined reference to `lt__PROGRAM__LTX_preloaded_symbols'
dumpmodules.c:(.text+0x46e): undefined reference to `lt__PROGRAM__LTX_preloaded_symbols'
pulseaudio-main.o: In function `main':
main.c:(.text+0x611): undefined reference to `lt__PROGRAM__LTX_preloaded_symbols'
collect2: ld returned 1 exit status
make[3]: *** [pulseaudio] エラー 1

libtoolが新しすぎるらしい(2.2.6)。clfs svnで組んだせい。これを入れてやり直した。
Libtool-1.5.26
http://ftp.gnu.org/gnu/libtool/libtool-1.5.26.tar.gz

設定

まず、alsa-pluginsを再コンパイルする必要がある。
ALSA Plugins

追加group/user

追加でユーザとグループが必要なようなんだがオフィシャルで全然解説されていない。仕方ないので http://packages.debian.org/lenny/pulseaudio からdebianのインストーラの動きをパクる。
[pulseaudio_0.9.10-3.diff.gz]を落として展開。 pulseaudio.postinstを読むと、

    if ! getent passwd pulse >/dev/null; then
      adduser --disabled-password  --quiet --system \
        --home /var/run/pulse --no-create-home\
        --gecos "PulseAudio daemon" --group pulse
      adduser --quiet pulse audio
    fi
    if ! getent group pulse-access >/dev/null; then
      addgroup --quiet --system pulse-access
    fi
    if ! getent group pulse-rt >/dev/null; then
      addgroup --quiet --system pulse-rt
    fi

というのがある。debianのadduser,addgroupのオプションの意味は http://www.annodex.net/cgi-bin/man/man2html?8+adduser を見ながら解読。
lfs流にuseradd,groupaddで同じことをやってみる。

# groupadd -g 71 pulse
# groupadd -g 72 pulse-access
# groupadd -g 73 pulse-rt
# useradd -d /var/run/pulse -c "PulseAudio Daemon" -g pulse -G audio -s /bin/false -u 71 pulse

そしたらpulse-rtに自分のユーザ名を追加しておく。
もしかしたらこの辺の設定は全然しなくても動くのかもしれないけど公式に解説が無いので知らない。

PerfectSetup

以下のページの通りにやってみる。
PerfectSetup
#インストール方法も書かないでなにがperfectなんだか…
#ちなみに、tar内にINSTALLが存在しない上にREADMEはウェブサイトへのリンクしかない不親切さだった
とりあえず今回はシステム全体に適用せず、ユーザ権限で動かしてみるので .asoundrcに以下を記述

pcm.pulse {
    type pulse
}

ctl.pulse {
    type pulse
}

$ pulseaudio -D

.xsession等に書いておけば良いかもしれない。
$ aplay -Dpulse ~/hogehoge.wav

鳴った。
.asoundrcに以下を追加

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

/etc/pulse/default.paに以下を追加

load-module module-alsa-sink device=hw:0
load-module module-alsa-source device=hw:0

esound対策はとりあえずしない。今後はesoundの代替になるんじゃない?

xmms

出力先をpulseaudioにするにはxmms-pulseが必要。
インストールしたらGUIの設定画面からPulseAudioを選択すればok

その他

flashplayer10は特に設定不要らしい。他のは順次PerfectSetupのページを見ながらやっていく。GUIの音量調整ツールはpavucontrolが良い。WindowsVistaのようにアプリケーションごとの音量設定を表示,調整できる。なんとfirefox中のflashコンテンツの調整も出来た。もっとも、ページを閉じると音量表示も消えてしまうが。