PulseAudio

提供: ArchWiki
2022年11月6日 (日) 16:28時点におけるNeko (トーク | 投稿記録)による版 (関連項目へPipeWireの追加)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

関連記事

PulseAudio は、ALSAOSS を用いてアプリケーションとハードウェアデバイスの間でミドルウェアとして動作することを目的とした汎用サウンドサーバーです。また、Avahi を有効にするとことで、ローカルデバイス間で簡単にネットワークストリーミングを行うことができます。主な目的はオーディオの設定を簡単にすることですが、そのモジュール設計により、より高度なユーザが自分のニーズに合わせてデーモンを設定することができます。

ノート: ALSAと PulseAudio の間に若干の混乱が生じるかもしれません。ALSA には、サウンドカードドライバを含む Linux カーネルコンポーネントと、ユーザ空間コンポーネントの libasound があります。[1] PulseAudio はカーネルコンポーネントのみをベースにしていますが、pulseaudio-alsa によって libasound との互換性を提供しています。[2]

インストール

pulseaudio パッケージをインストールしてください。

PulseAudio のモジュールの中にはメインのパッケージと 分割 されているものがあり、必要に応じてインストールする必要があります:

ノート: ALSA と PulseAudio についてはややこしい部分があります。ALSA にはサウンドカードドライバーの Linux カーネルコンポーネントと、ユーザー空間のコンポーネントである libalsa の両方が含まれています [3]。PulseAudio はカーネルコンポーネントのみで作られますが、pulseaudio-alsa によって libalsa との互換性も取られています [4]

フロントエンド

PulseAudio デーモンを制御するための様々なフロントエンドが存在します:

設定

設定ファイル

デフォルトでは、PulseAudio は全てのサウンドカードを自動的に検出して管理するように設定されています。検出された ALSA デバイスを全て制御して音声ストリームを結集させることで、PulseAudio デーモンが設定の中心点になります。デーモンは基本的に特に設定をしなくても動作するので、必要な設定はほとんどありません。

PulseAudio はまずホームディレクトリの設定ファイル ~/.config/pulse を確認して、次にシステム全体の設定ファイル /etc/pulse を確認します。

PulseAudio はサーバーデーモンとして動作するので、クライアント・サーバーアーキテクチャを使ってシステム全体あるいはユーザー個別に起動することができます。デーモン自体はモジュールがないと何もしません。API を提供して動的にロードされたモジュールをホストするだけです。音声のルーティングなどの処理は全て様々なモジュールが担当します。利用可能なモジュールのリストは Pulseaudio Loadable Modules で確認できます。モジュールを有効化するには load-module <module-name-from-list> という行を ~/.config/pulse/default.pa に追加します。

ヒント:
  • システム全体の設定ファイルは編集しないことを推奨します。ユーザー個別の設定ファイルを使ってください。~/.config/pulse ディレクトリを作成して、システムの設定ファイルをコピーすることでユーザー個別の設定をすることができます。
  • パッケージに含まれている /etc/pulse/ のファイルに変更があったときはユーザーの設定もあわせるようにしてください。そうしないと、設定エラーで PulseAudio が起動しなくなる可能性があります。
  • ユーザーを audio グループに追加する必要はありません。udevlogind を使用して動的にユーザーに権限が与えられます。

daemon.conf

モジュールが使用するデフォルトのサンプルレート、リサンプリング方式、リアルタイムスケジューリング、サーバープロセスに関する設定など、基本的な設定を定義します。実行している間は変更できません。PulseAudio デーモンの再起動が必要です。ほとんどの場合、デフォルト設定で問題ありません。

ノート: PulseAudio は daemon.conf ファイルに記述されたパスのチルダを展開しません。ファイルを指定するときは絶対パスを使ってください。
重要な設定オプション
オプション 説明
system-instance system-wide インスタンスとしてデーモンを実行。セキュリティの問題が生まれるため非推奨です。ローカルユーザーが存在しない (ヘッドレス) システムで有用です。デフォルトは no
resample-method モジュール間で音声のサンプルレートが一致しない場合に使用するリサンプラー (例: 48kHz しか対応していないハードウェアで 96kHz の音声を再生する場合など)。利用可能なリサンプラーは $ pulseaudio --dump-resample-methods で確認できます。CPU の使用量と音質のトレードオフを考えて最適なものを選択してください。
ヒント: 場合によっては PulseAudio によって CPU の負担が跳ね上がることがあります。例えば複数のストリームを (個別に) リサンプルする場合などに起こりえます。そのようなことが頻繁に起こる場合、サンプルレートに対応する sink を新しく作成してメインの sink に送ることで、リサンプリングを一度で済ませることができます。
flat-volumes flat-volumes は一番音が大きいアプリケーションのボリュームにあわせてデバイスのボリュームを調整します。例えば、VoIP の呼び出し音声を上げるとハードウェアのボリュームが上がりますが、音声プレイヤーのボリュームは元のままになるように調整され、手動で音声プレイヤーのボリュームを下げなくてもいいようにします。開発元ではデフォルトで yes になっていますが、Arch においては no がデフォルトです。
ノート: 開発元のデフォルト設定は時として混乱を生み、アプリケーションによってはフラットボリューム機能に対応していないために、アプリケーションの起動時にボリュームが 100% に設定されることがあります。スピーカーや耳が破壊される恐れがあり大変危険です。そのため、Arch では flat-volumesno に設定することで古典的な (ALSA と同じ) 設定をデフォルトとしています。
default-fragments 音声サンプルは default-fragment-size-msec によって複数の断片に分割されます。バッファを大きくすればするほど、システムが過負担のときに音声がスキップされる可能性が減ります。ただし、副作用として全体的な遅延は大きくなります。問題が発生する場合はこの値を大きくしてみてください。

default.pa

このファイルはスタートアップスクリプトであり、モジュールを設定するのに使われています。デーモンが初期化を完了した後に読み込まれて解析されます。$ pactl$ pacmd を使うことでコマンドは追加で送信できます。また、$ pulseaudio -nC を使ってターミナルで PulseAudio を起動することで使用するスタートアップファイルを指定することもできます。その場合、デーモンは CLI モジュールをロードしてコマンドラインから直接設定を受け取って、同じターミナルに情報やエラーメッセージを出力します。デーモンをデバッグするときや、ディスクで永続的に設定する前にモジュールをテストしたい場合などに有用です。マニュアルページに詳しい説明が載っています。構文については man pulse-cli-syntax を読んでください。

ヒント:
  • 完全なコピーを記述するかわりに、~/.config/pulse/default.pa の最初の行を .include /etc/pulse/default.pa とすればデフォルト設定を上書きできます。
  • 利用可能な sink を確認するには $ pacmd list-sinks|egrep -i 'index:|name:' を実行してください。デフォルトの sink はアスタリスクの印が付きます。
  • ~/.config/pulse/default.pa を編集して set-default-sink コマンドを挿入・変更するときは sink の名前を使ってください。番号ではその順番で実行される保証がありません。

client.conf

全ての PulseAudio クライアントアプリケーションが読み込む設定ファイルです。個別のクライアントについて実行時のオプションを設定したいときに使います。デフォルトの sink や source を静的に設定できるだけでなく、サーバーが動作していないときに自動的に起動するクライアントを許可 (あるいは不許可) できます。

設定コマンド

実行している間にサーバーを設定するメインコマンドは $ pacmd です。オプションのリストを表示するには $ pacmd --help を実行してください。$ pacmd とだけ実行することでシェルインタラクティブモードに入ることができ Ctrl+d で終了します。変更した設定はすべて即座に適用されます。

新しい設定をテストして満足したら、default.pa を編集することで変更を永続化できます。基本的な設定は PulseAudio/サンプル を見てください。

ヒント: default.pa ファイルの load-module module-default-device-restore という行は変えないでください。デフォルトの状態でサーバーを再起動して、間違った設定を退けます。

選択されたハードウェアの "Profile" にあわせて PulseAudio で利用・選択することができる "source" (プロセス, キャプチャデバイス) と "sink" (サウンドカード, サーバー, 他のプロセス) を理解するのが重要です。"Profile" は aplay -L コマンドで確認できる ALSA の "pcm" であり、pacmd list-cards コマンドでもっと具体的に確認できます。"index:" 行や "profiles:" から始まるリスト、出力の "active profile: <...>" という行などです。

"active profile" は pacmd set-card-profile INDEX PROFILE コマンドで設定できます。INDEX と PROFILE の間にカンマは必要ありません。INDEX は pacmd list-cards コマンドで表示される "index:" 行の番号に、PROFILE の名前は "profile:" の下の行の最初から、コロンと空白までの文字列に置き換えてください。例: pacmd set-card-profile 0 output:analog-stereo+input:analog-stereo

pavucontrol などのグラフィカルツールを使えばもっと簡単に "Profile" を選択できます ("Configuration" タブ)。KDE システム設定なら "Multimedia/Audio and Video Settings" の "Audio Hardware Setup" タブから設定できます。(aplay -lpacmd list-cards コマンドで確認できるデバイスと同じ) 音声の "Card" には、それぞれ "Profile" が選択されます。"Profile" を選択したら、pacmd list-sourcespacmd list-sinks コマンドで利用可能な "source" と "sink" が確認できます。利用可能な source と sink の "index" はカードのプロファイルが変更されるたびに変わるので注意してください。

アプリケーションによっては選択した "Profile" が問題になることがあります。特に Adobe Flash プレイヤーの /usr/lib/mozilla/plugins/libflashplayer.so/usr/lib/PepperFlash/libpepflashplayer.so はそうです。しばしば、Flash プレイヤーは Stereo プロファイルのどちらか片方を選択しないと機能せず、音声がない動画が再生されたり、あるいはクラッシュしたりします。あるプロファイルで駄目なら、別のプロファイルを選択してみてください。

もちろん、PulseAudio でサラウンド音声を設定する場合、適切な Surround プロファイルを選択する必要があります。

実行

バージョン 7.0 から、Arch においては PulseAudio はソケットアクティベーションを使います。デフォルト では、systemd/ユーザーインスタンスで pulseaudio.socket が有効になります。

ノート:
  • pulseaudio.socket を無効にするときは、$XDG_CONFIG_HOME/systemd/user/ が存在することを確認して systemctl --user mask pulseaudio.socket を実行してください。
  • ほとんどのデスクトップ環境では /etc/xdg/autostart/ ディレクトリにあるデスクトップファイルによってプログラムを自動で起動します。デスクトップ環境を使っている場合、ソケットアクティベーションとは無関係に PulseAudio は自動で起動します。

詳しくは PulseAudio: Running を参照してください。

手動で起動

X を起動した時に pulseaudio が自動で立ち上がらない場合は、次のコマンドで実行できます:

$ pulseaudio --start

次のコマンドで PulseAudio を停止できます:

$ pulseaudio --kill

イコライザー

pulseaudio の比較的新しいバージョンでは、統合された10帯域のイコライザーシステムが搭載されています。このイコライザーを有効にするためには、以下の作業が必要です。

pulseaudio-equalizer をインストールしてください。

equalizer sink と dbus-protocol モジュールをロードする

$ pactl load-module module-equalizer-sink
$ pactl load-module module-dbus-protocol

GUI フロントエンド

次を実行:

$ qpaeq
ノート: もし qpaeq が動作しなければ、 pavucontrol をインストールして、メディアプレイヤーの動作中に "ALSA Playback on" を "FFT based equalizer on ..." へ変更するとよいでしょう。

起動時に イコライザーと dbus モジュールをロードする

お好みのエディタで /etc/pulse/default.pa を開き、以下の行を追記します。

### Load the integrated pulseaudio equalizer and dbus module
load-module module-equalizer-sink
load-module module-dbus-protocol

バックエンドの設定

ALSA

ノート: この追加選択パッケージは、x86_64 環境で動作させる場合で、(Wineのような) 32 ビットプログラムでも音を鳴らすときには必要なものです。

PulseAudio をサポートせず ALSA をサポートするアプリケーションのためには、ALSA のための PulseAudio プラグインをインストールすることが推奨されます。このパッケージは、ALSA に PulseAudio を利用させるために必要なファイル /etc/asound.conf も含んでいます。

アプリケーションに ALSA の OSS エミュレーションをやめさせ PulseAudio を迂回させない(そうして、他のアプリケーションの音声出力を防ぐ)ためには、起動時に snd_pcm_oss モジュールがロードされないようにします。このモジュールが現在ロードされていたら (lsmod | grep oss で確認可能)、以下を実行してモジュールを無効にしましょう:

# rmmod snd_pcm_oss

ALSA/dmix でハードウェアデバイスを占有しない

ノート: この項では、通常は推奨されない代替構成について説明します。

ALSA を直接アプリケーションで使って他のアプリケーションも使えるようにしたいと思っているならば、同時に PulseAudio も必要になります。以下の手順で PulseAudio が ALSA のハードウェアデバイスの代わりに dmix を使うようにできます。

  • pulseaudio-alsa パッケージを削除してください、ALSA アプリケーションと PulseAudio の互換レイヤーが含まれています。削除した後、ALSA アプリは Pulse につかまることなく ALSA を直接使うようになります。
  • /etc/pulse/default.pa を編集してください。
バックエンドドライバーをロードする行を探してアンコメントしてください。以下のように device パラメータを追加してください。それから autodetect モジュールをロードする行をコメントアウトしてください。
load-module module-alsa-sink device=dmix
load-module module-alsa-source device=dsnoop
# load-module module-udev-detect
# load-module module-detect
  • 任意: kdemultimedia-kmix[リンク切れ: パッケージが存在しません] を使っていてPulseAudio ボリュームのかわりに ALSA ボリュームを操作したい場合:
$ echo export KMIX_PULSEAUDIO_DISABLE=1 > ~/.kde4/env/kmix_disable_pulse.sh
$ chmod +x ~/.kde4/env/kmix_disable_pulse.sh
  • コンピュータを再起動して、alsa と pulseaudio のアプリケーションを同時に実行して見て下さい。同時に音声を鳴らすことができるはずです。
PulseAudio ボリュームの操作が必要なときは pavucontrol を使って下さい。

OSS

OSS にしか対応していないプログラムを PulseAudio に出力させる方法は複数存在します:

ossp

ossp パッケージをインストールして osspd.service を起動してください。

padsp ラッパー

OSS を使うプログラムは (PulseAudio に含まれている) padsp を使って起動することで PulseAudio で動作するようにできます:

$ padsp OSSprogram

例:

$ padsp aumix
$ padsp sox foo.wav -t ossdsp /dev/dsp

以下のようなカスタムラッパースクリプトも使えます:

/usr/local/bin/OSSProgram
#!/bin/sh
exec padsp /usr/bin/OSSprogram "$@"

PATH/usr/bin よりも先に /usr/local/bin が来るようにしてください。

GStreamer

GStreamer で PulseAudio を使うには、gst-plugins-goodgstreamer0.10-good-pluginsAUR をインストールする必要があります。

OpenAL

OpenAL Soft はデフォルトで PulseAudio を使いますが、明示的に設定することもできます:

/etc/openal/alsoft.conf
drivers=pulse,alsa

libao

libao の設定ファイルを編集してください:

# /etc/libao.conf
default_driver=pulse

alsa ドライバーの dev=default オプションを削除するか特定の Pulse の sink の名前・番号を指定してください。

ノート: pulseaudio-alsa をインストールした場合、ALSA のデフォルトデバイスは PulseAudio なので、libao の標準の alsa ドライバとそのデフォルトデバイスへの出力を維持することもできます。

ESD

PulseAudio は enlightened sound daemon (ESD) を完全に置き換えます。PulseAudio が動作している時、ESD クライアントは PulseAudio に何もしなくても出力できるはずです。

デスクトップ環境

X11

ノート: 前に述べた通り、もし DE をインストールしているのならば、/etc/X11/xinit/xinitrc.d/pulseaudio/etc/xdg/autostart/ のファイルによって PulseAudio は自動的に起動するはずです。

PulseAudio が動作しているかどうか確認してください:

$ ps aux | grep pulse
 facade   1794  0.0  0.0 360464  6532 ?        S<l  15:33   0:00 /usr/bin/pulseaudio --start
 facade   1827  0.0  0.0  68888  2608 ?        S    15:33   0:00 /usr/lib/pulse/gconf-helper

PulseAudio が動いておらず X を使っている場合は、以下で PulseAudio と必要な X11 のプラグインを手動で起動できます:

$ start-pulseaudio-x11

Gnome, KDE, Xfce を使ってないために ~/.xinitrc/etc/X11/xinit/xinitrc.d のスクリプトを (サンプルファイル /etc/skel/.xinitrc のように) 読み込まないときは、次のコマンドでブート時に PulseAudio を起動できます:

~/.xinitrc
/usr/bin/start-pulseaudio-x11

GNOME

GNOME 3 から、GNOME は PulseAudio と完全に統合したため特に設定は必要ありません。

KDE 3

PulseAudio は aRts との完全な互換性はありません。KDE 3 のユーザーは PulseAudio を使えません。ただし最近のバージョンの PulseAudio では障害が取り除けるかもしれません:

参照: http://www.pulseaudio.org/wiki/PerfectSetup KDE 3 はデフォルトで artsd サウンドサーバを使っています。しかしながら、artsd は Esound バックエンドを使うように設定することが可能です。kcmartsrc (グローバルな設定は /etc/kde または /usr/share/config、ユーザー別の設定は .kde/share/config にあります) を以下のように編集してください:

[Arts]
Arguments=\s-F 10 -S 4096 -a esd -n -s 1 -m artsmessage -c drkonqi -l 3 -f
NetworkTransparent=true
SuspendTime=1

KDE Plasma ワークスペースと Qt4

PulseAudio は KDE/Qt4 アプリケーションによって使われます。詳しくは PulseAudio wiki の KDE のページ を見て下さい。

PulseAudio サポートはデフォルトの KDE サウンドミキサーである KMix にマージされています。

phonon-gstreamer バックエンドを Phonon に使っている場合、gstreamer0.10-good-pluginsAUR をインストールして GStreamer も PulseAudio を使うように設定してください。

load-module module-device-manager/etc/pulse/default.pa に追加するのが有用です。

さらに、KMix や pavucontrol の KDE 代替として AUR から kdeplasma-applets-veromixAUR[リンク切れ: アーカイブ: aur-mirror] が利用できます。

Xfce

Xfce で動いているアプリケーションは PulseAudio を使うことができます。PulseAudio の設定を管理するには pavucontrol を使います。

アプリケーション

Audacious

Audacious は PulseAudio にもとから対応しています。利用するためには、Audacious で 設定→オーディオ→出力プラグイン で「PulseAudio 出力」に設定しましょう。

Java/OpenJDK 6

Pulseaudio と Java のサウンドに書かれているように padsp を使って java のラッパーを作成してください。

Music Player Daemon (MPD)

PulseAudio を使うように MPD設定 してください。Music Player Daemon/ヒントとテクニック#PulseAudio を参照。

MPlayer

MPlayer はネイティブで PulseAudio 出力をサポートしており "-ao pulse" オプションを使います。PulseAudio への出力をデフォルトに設定することも可能で、ユーザー別の設定には ~/.mplayer/config で、システム全体では /etc/mplayer/mplayer.conf で設定します:

/etc/mplayer/mplayer.conf
ao=pulse

Skype (x86_64)

lib32-libpulse をインストールしてください。そうしないと通話をしようとした時に次のエラーが発生します: "Problem with Audio Playback"。

guvcview

PulseAudio で guvcview を使用するとウェブカメラからの入力で音声入力が中止され音声が記録されないことがあります。次を実行して確認できます:

$ pactl list sources

音声ソースが "suspended" になっている場合 /etc/pulse/default.pa の以下の行を:

load-module module-suspend-on-idle

次のように修正してください:

#load-module module-suspend-on-idle

PulseAudio を再起動すれば音声ソースが中止される代わりにアイドル状態になるようになります。これで guvcview でデバイスから音声を正しく記録できるようになるはずです。

ヒントとテクニック

キーボードのボリュームコントロール

以下のコマンドをボリュームキーにマッピングしてください: XF86AudioRaiseVolume, XF86AudioLowerVolume, XF86AudioMute

まず制御したい音声出力に対応する sink を確認します。sink を確認するには:

pactl list sinks short

ボリュームを上げるには:

sh -c "pactl set-sink-mute 0 false ; pactl set-sink-volume 0 +5%"

ボリュームを下げるには:

sh -c "pactl set-sink-mute 0 false ; pactl -- set-sink-volume 0 -5%"

ボリュームをミュート(解除)するには:

pactl set-sink-mute 0 toggle

マイクをミュート(解除)するには:

pactl set-source-mute 1 toggle
ヒント:
  • キーボードショートカットを常にデフォルトのシンクで動作させるには、シンク番号に @DEFAULT_SINK@ を指定します。例えば、pactl set-sink-mute @DEFAULT_SINK@ toggle.
  • 最大音量の制限など、より高度な制御を行う場合は、コンソールフロントエンドの利用を検討してください。

X11 ベルイベント

pulseaudio で X11 のベルイベントを処理するには、X11 セッションが起動した後に以下のコマンドを実行:

pactl upload-sample /usr/share/sounds/freedesktop/stereo/bell.oga x11-bell
pactl load-module module-x11-bell sample=x11-bell display=$DISPLAY

X11 ベルのボリュームを調整するには、以下のコマンドを実行:

xset b 100

100 はパーセンテージです。上記のコマンドを使うには xorg-xset パッケージが必要です。X11 セッションが起動したときに自動的にコマンドを実行する方法は自動起動を参照。

Switch on connect

新しく接続されたデバイスに音声出力を切り替えるモジュールです。例えば、USB ヘッドセットを接続した場合、出力がそれに切り替わります。切断したときは、出力は元のデバイスに戻ります。大量にバグが存在していましたが PulseAudio 8.0 になって注目を集め、今では問題なく動くようになっています。

モジュールをテストしていみたい場合、次を実行することでロードできます:

# pactl load-module module-switch-on-connect

変更を永続化させたい場合、ローカルの pulseaudio 設定あるいは /etc/pulse/default.pa (システム設定) に以下の行を追加してください:

load-module module-switch-on-connect

KDE/Plasma5 では更に module-device-manager を無効化してください。Plasma5 は起動するとすぐに (start-pulseaudio-x11 によって) pulseaudio でデバイスを管理するために module-device-manager モジュールをロードします。しかしながら、このモジュールは module-switch-on-connect と競合します。/bin/start-pulseaudio-x11 を編集して KDE の行をコメントアウトすることでモジュールを無効化できます。pulseaudio セッションを新しくするために一度ログアウトしてからログインしなおしてください。

トラブルシューティング

PulseAudio/トラブルシューティングを見て下さい。

参照