試験運用中なLinux備忘録

2008/09/05

PulseAudioの設定(主にデーモン)に関する覚え書き

ここで扱うのは、PulseAudio自体の設定ファイルについて。

(2009/11/12)Mandriva Linux 2009.1や2010.0のPulseAudioでは本記事のように(PulseAudioがhwでなくdmix/dsnoopを用いるように)設定すると頻繁にノイズが出てしまうようになってしまい、システム設定のまま(デバイスを自動検出して)ALSAのhwプラグインを用いるか、手動で

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

のようにhwプラグインを用いるように指定するとノイズは起こらないがPulseAudioデーモンが音を出しているときは(pasuspenderを用いて一時停止させない限り)ALSAサウンドシステムからdmix経由で音を出したりはできない。なお、しばらく音声の出ていない状態が続くと自動的にデバイスは解放されるが、PulseAudioからの音はその間は出なくなる。

設定ファイル

PulseAudioの挙動を制御する幾つかの設定ファイルがある。

一般ユーザ権限で実行する場合には${HOME}/.pulse/以下(一般ユーザが書き込み可能)にファイルを配置する。

PulseAudioの設定ファイル
場所(システム)場所(一般ユーザ)内容マニュアルページ名
/etc/pulse/default.pa${HOME}/.pulse/default.paオーディオドライバ選択、追加モジュール読み込みdefault.pa
/etc/pulse/daemon.conf${HOME}/.pulse/daemon.confリアルタイム優先度とnice値、オーディオの形式・周波数・チャンネル数などpulse-daemon.conf
/etc/pulse/client.conf${HOME}/.pulse/client.confPulseAudioを使用するクライアントが使用する各種設定pulse-client.conf

default.paに関しては、起動時の-Fオプションにより別ファイルを読み込ませることも可能。実際には、default.paを読み込ませないための-nオプションと同時に設定する。

設定の内容

自動のオーディオドライバ決定をさせない

既定の動作では自動でオーディオドライバを決めさせるようになっているが、ALSAライブラリのhwプラグインを使用してしまった*1ため、オーディオ出力先の自動検出/設定を行うモジュールは外すことに。

ファイル名: ~/.pulse/default.pa

### Automatically load driver modules depending on the hardware available
##.ifexists module-hal-detect.so
##load-module module-hal-detect
##.else
### Alternatively use the static hardware detection module (for systems that
### lack HAL support)
##load-module module-detect
##.endif

上の「##」で始まる行がコメントアウト済み(これらの行の先頭に「#」を付けておく)。

オーディオ出力先の固定設定

ALSAライブラリ(dmix/dsnoopプラグイン使用)経由かJACK経由かを決定する。どちらをメインで使用するかによってファイルを分けておいて、PulseAudioの起動時に-F-nオプションで.paファイルを変更して使い分けることにする。

ファイル名: ~/.pulse/default.pa

### Load audio drivers statically (it's probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
# ALSAライブラリ経由で出力する場合(device引数なしでdmix/dsnoop使用)
load-module module-alsa-sink
load-module module-alsa-source
# JACK Audio Connection Kitのクライアントとして使用する場合
##load-module module-jack-sink
##load-module module-jack-source

[任意]ファイル名: ~/.pulse/default-jack.pa

### Load audio drivers statically (it's probably better to not load
### these drivers manually, but instead use module-hal-detect --
### see below -- for doing this automatically)
# ALSAライブラリ経由で出力する場合(device引数なしでdmix/dsnoop使用)
##load-module module-alsa-sink
##load-module module-alsa-source
# JACK Audio Connection Kitのクライアントとして使用する場合
load-module module-jack-sink
load-module module-jack-source

これで、ALSA経由では

$ pulseaudio &

のように起動し、JACK経由の出力を行う場合には

$ pulseaudio -nF ~/.pulse/default-jack.pa &

のように起動するようにして使い分けることができる。

上にデバイスの衝突についてを触れたが、オーディオの作成を考えた場合には「JACKをhwプラグイン使用で動かしつつ、PulseAudioはJACKクライアントとして動作」という使い方が良さそう(多少面倒ではある)。

「sink」と「source」という言葉が出てきているが、これらはGStreamerと同様で、「source」から入ったものを処理して「sink」に出すという形。例えば、module-alsa-sourceはALSAの外部入力、module-alsa-sinkはALSAのライブラリを経由したオーディオ出力。それぞれ、device引数を省略したときにはdsnoopとdmixというプラグインが使用される。

dmixを活用してあらゆる系統のオーディオ出力を衝突なしにまとめる

http://www.pulseaudio.org/wiki/PerfectSetup

では、PulseAudioだけにハードウェア(hwプラグイン)に直接アクセスさせて、PulseAudio非対応アプリケーションに対してalsa-pluginsのPulseAudioサポート*2を利用するように(${HOME}/.asoundrcを編集)してALSAライブラリ経由でPulseAudioを使用するといった方法をとっているが、音を「出す」だけ*3であれば、このようにはせずにPulseAudioのデーモンとその他のALSAライブラリ使用アプリケーションをdmixプラグインで合成するようにしたほうが、衝突を防ぐのには手っ取り早いような気がした。*4

dmixのおかげで、PulseAudio(dmix使用)の出力+ALSA PCMの出力+JACK(dmix使用)の出力の全てを同時に鳴らすということもできている。ただ、これは音を「出す」用途向きで、作成用途向きではない。

デーモンの設定

初期設定から変更した部分は以下。ここのリアルタイム優先度やnice値は、/etc/secutity/limits.confの設定とユーザ・グループの設定(前回の記事で触れている)が適切に行われている上で、適切な範囲の値を指定しないとPulseAudioがエラーを出すので注意。

realtime-scheduling = yes
realtime-priority = 90

rlimit-nice = 25

default-sample-format = s32le
default-sample-rate = 48000
default-sample-channels = 2

設定値realtime-priorityに関して、「pulse-daemon.conf」のマニュアルページによると、JACK Audio Connection Kitを使用している場合、jackdのリアルタイム優先度*5よりは幾らか低い値にするのがよいらしい。既定値は5(90は高すぎる?)。

default-sample-channelsの値はオーディオ出力のハードウェア環境によって変更する。既定値は2。

(2009/11/12)以下はMandriva Linux 2010.0上で設定したもの。

ファイル名: ~/.pulse/daemon.conf

nice-level = -20
realtime-priority = 99
resample-method = speex-float-0
default-sample-channels = 2

関連記事:

使用したバージョン:

  • PulseAudio 0.9.10(0.9.10-r51)

*1:この状態だと、dmixプラグインを使用しないため、ALSAライブラリ経由のアプリケーションや別のサウンドデーモン(dmixを使用するもの)と衝突して、それらを通じて音が出せなくなる

*2:「type pulse」なPCMプラグイン

*3:逆に、Flash上で鳴っている音を録音したいというようなことになれば、PulseAudioを経由させるように対処することになる

*4JACKのときと同様、ハードウェアまでの間にALSAのプラグインを通す分だけリアルタイム性は多少犠牲になると思われる。また、dmixを通すと、スピーカー出力の音質もある程度制限される

*5:既定値は10(-Pオプションの指定値は0)・最大99(-Pオプションの指定値は89)まで

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

(C) 2007-2015 kakurasan
本ウェブログの表示につきましては、横幅1,000ピクセル以上を推奨します。