🔊

PipeWireオーディオシステム上でOBSの音声キャプチャができない問題の暫定的な解決策

2023/01/26に公開

Ubuntu22.04上で、オーディオシステムにPipeWireを使用しているとOBSのオーディオキャプチャができませんでした。
解決策は、まずオーディオキャプチャ(PulseAudio)を追加します。(PipeWireでなくPulseAudioの方)
これでキャプチャされればよいのですが、されていなければ次に pavucontrol を実行し録音タブを開きます。
OBSのキャプチャデバイスがいくつか表示されており、それらがミュートになっているかと思います。それらのミュートを解除する等すればキャプチャできます!(音量ゲージをみながら確認するといいかも。)

(追記:2023/01/27)
再び試してみたらうまくキャプチャできず、オーディオキャプチャ(PipeWire)でやるとキャプチャできた。再起動するたびに録音デバイスはミュートになるみたいなのでその都度設定して、また録音元も設定し直したりする必要があるかも(OBS、pavucontrolどちらも)。

(メモ)
PulseAudioをメインのオーディオシステムにするとOBSで普通にキャプチャできますが、ルーティングにほんの少し遅延があります。
その点PipeWireはよりスマートでダイレクトにルーティングされているのか、遅延がまったくないと言ってもいいと思います。
OBSでデスクトップ音声をキャプチャするだけならPulseAudioでも問題ないのですが、普段からルーティングを多用する環境ならラグのないPipeWireを使用したいと思います。
OBSを使うときだけ切り替えるというのもスマートじゃなかったので、今回これに気がつけてよかったです。
pipewire-pulse というプロセスが動いていたので、PipeWireでもPulseAudioに橋渡しをしていてくれて従来のPulseAudioを使用するソフトでもキャプチャできるようになっているのでは?とは思っていたのですが、偶然OBSが立ち上がった状態で録音デバイスを見てみたらミュートになっているデバイスがあったのでそれらを解除したらキャプチャできたという💯

ここからは個人的によく使うオーディオ関係のコマンドたち

・モジュールのアンロード
pactl unload-module module-null-sink
pactl unload-module module-loopback

・モジュールのロード(仮想デバイスとループバック)
pactl load-module module-null-sink sink_name=null-sink
pactl load-module module-loopback

・pulseaudio再起動
systemctl --user restart pulseaudio

・pipewire再起動
systemctl --user restart pipewire
systemctl --user restart pipewire-pulse

v設定ファイル編集
sudo gedit /etc/pulse/daemon.conf
sudo gedit /usr/share/pipewire/pipewire.conf

・pulseaudioで設定可能なリサンプリング設定一覧
pulseaudio --dump-resample-methods

・設定ファイルの中身等
resample-method = soxr-vhq
default-sample-format = float32le
default-sample-rate = 192000

・システムのオーディオをPipeWireに置き換える
systemctl --user --now disable pulseaudio.{socket,service}
sudo cp -vRa /usr/share/pipewire /etc/
systemctl --user --now enable pipewire{,-pulse}.{socket,service}

・システムのオーディオをPulseAudioに置き換える
systemctl --user --now disable pipewire{,-pulse}.{socket,service}
systemctl --user --now enable pulseaudio.{socket,service}

Discussion