2022-05-09

PipeWire からの daemon.conf

PipeWire は PulseAudio よりも低遅延らしい、というのを発見し、ちょっと試しに Linux Mint にインストールしてみました。

apt-add-repository ppa:pipewire-debian/pipewire-upstream
apt update
apt install pipewire

systemctl --user --now disable pulseaudio.socket pulseaudio.service
systemctl --user mask pulseaudio
systemctl --user --now enable pipewire pipewire-pulse pipewire.socket pipewire.service

sudo reboot

PC の再起動が完了したら、以下のコマンドで結果を確認してみます。「サーバー名」の部分に「on PipeWire」が表示されれば成功です。

pactl info

そう言えば、Firefox の about:support 画面にも PulseAudio の情報が出力されていたのを思い出し、PipeWire のインストール前後で比較してみたところ、「往復遅延時間」という項目が 78.27ms から 172.62ms に悪化?していました。PipeWire って低遅延なのでは?どういうことだろ?

こちらは PulseAudio の状態

こちらは PipeWire に変更した状態


また、Spotify で音楽を再生してみた感じでは PulseAudio と違いが感じられませんでした。これは PipeWire の設定をチューニングする必要があるのではと思い、まずは設定ファイルをホームディレクトリ配下にコピーします。

mkdir ~/.config/pipewire
cp /usr/share/pipewire/pipewire.conf ~/.config/pipewire/

続いて、過去事例を参考に「default.clock.rate」と「default.clock.quantum」の設定値を修正してみました。pipewire.conf の修正後は restart を忘れずに。

default.clock.rate          = 44100
default.clock.quantum       = 4096

systemctl --user restart pipewire
systemctl --user restart pipewire-pulse

この状態で再度 Spotify で音楽を再生してみると変化がありました。なんかさっきより音が良くなったというか大きくなった気がします。

ここでふと思い直しました。「設定で変化するのであれば PulseAudio のままでそっちのチューニングをしても同じ効果が得られるのでは?」

というのも PipeWire だとアプレットからの音声でちょっとノイズが入ったりと動作面で不安定だったり、PPA を使うのもあまり気が乗らないからです。

ということで、まずは Timeshift で Linux Mint を直前のバックアップ時点へ復元です。おや?バックアップから復元したのに、Linux Mint のサウンドアプレットが表示されなくなりましたね。PulseAudio がうまく起動していませんね、きっと。

systemctl --user unmask pulseaudio
systemctl --user --now enable pulseaudio.service pulseaudio.socket
systemctl restart pulseaudio

PipeWire のインストール時に「systemctl –user mask 〜」を実行しましたが、これはホームディレクトリ内の「.config/systemd/user」を変更するようで、Timeshift では復元されない場所でした。unmask コマンドで明示的に解除する必要があったようです。

さて、PulseAudio のチューニングは daemon.conf を修正することになります。こちらもホームディレクトリにコピーしてから編集です。

cp /etc/pulse/daemon.conf ~/.config/pulse

PulseAudio の daemon.conf は以下のパラメーターを調整してみました。ファイルを編集後は restart にて反映させます。

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

default-fragments = 2
default-fragment-size-msec = 125

systemctl --user restart pulseaudio

restart 後、以下のコマンドで PulseAudio にパラメーターが反映されたことを確認できます。

pulseaudio --dump-conf

default-fragments の調整は以下を参考にしました。
https://forums.linuxmint.com/viewtopic.php?t=44862

default-sample の調整は以下を参考にしました。
https://www.freedesktop.org/wiki/Software/PulseAudio/Documentation/User/Audiophile/

少しずつパラメーターを調整しているとあまり違いがわからないので、面倒ですがデフォルト値と変更後を行ったり来たりしながら調整した方が効果がわかりやすいかと思います。(終わりが見えない調整ですね)

(追記)
–dump-conf は PulseAudio を restart せずにファイルを更新した段階で内容を読み取ってくれるようです。記述間違いについても具体的に指示してくれるので、ファイルを更新したらまずは –dump-conf でエラーがないか点検したほうが良さそうです。

$ pulseaudio --dump-conf
E: [pulseaudio] daemon-conf.c: [/home/xxxxxx/.config/pulse//daemon.conf:82] 無効なサンプルレート '441000'