Void LinuxのオーディオサーバーをPulseAudioからPireWireに切り替えてみた
2024-06-10
こんにちは。今回のテーマは「Void LinuxのオーディオサーバーをPulseAudioからPireWireに切り替えてみた」です。本記事はVoid Linuxで検証しましたがおそらくArch Linuxでも同様の環境を構築可能だと思います。
PireWire導入のきっかけ
筆者はこれまでLinuxデスクトップ環境のオーディオサーバーにはPulseAudioを使用してきました。PulseAudioに対応しているアプリケーションは非常に多くて、特にオーディオサーバーを意識しなくても普通に音が鳴らせるスグレモノとして重宝してきました。実際、Webのストリーミングや音楽プレーヤーを使用する程度であればPulseAudioで全く問題ないと考えています。
しかしDTM関連のアプリケーションを動かそうと思うとPulseAudioのみでは対応できない事態に直面しました。多くのDTM系のアプリケーションはJackといういわゆる”Pro Audio”と呼ばれるオーディオサーバーをサポートしており、多くのサイトで調べましたがJackの導入は必須であり、その間PulseAudioが干渉しないように止めておくなど工夫が必要なようでした。(JackとPulseAudioの共存環境は試してません)
しかし更に調べると、どうもPipeWireなるものがPulseAudio、Jack、Alsaと互換を持ちオーディオサーバーとして機能らしいと分かりました。これが本当ならばJackを入れなくてもPulseAudioもJackも入れることなくPipeWire一つで両方の機能を補えるのでは?と考え試してみることにしました。
PipeWireとは?
PipeWireは映像と音声を最小の遅延でキャプチャすることを目的に開発されたマルチメディアフレームワークなのですが、PulseAudioのようなオーディオサーバーとして使用することができます(ビデオキャプチャサーバーとしても使用できます)。
特徴としてはPulseAudioやJack, Alsa用に対応したアプリケーションと互換性をもって動作することです。通常のオーディオアプリケーションはPulseAudioやAlsaに対応しています。一方、DTMで使用するようなアプリケーションはJackを必要とすることが多いです。PipeWireに直接出力を設計されているアプリケーションはまだ少ないですが、オーディオサーバーの切り替えをせずPulseAudio, Alsa, Jackに対応したアプリケーションを使える利点があります。(もし間違えてたらそっと教えてください。)
PulseAudioのアンインストール
まずPulseAudioを削除します。もしGUIのコントローラであるPavucontrolはPipeWire導入後も使うので残しておきます。
sudo xbpx-remove pluseaudio
PipeWireの導入
PipeWireの導入を行います。
sudo xbps-install pipewire wireplumber
pipewireパッケージのインストールでセッションマネージャであるwireplumberも自動で入るはずですが、念の為コマンドに入れてあります。
PipeWireの設定
PipeWireを立ち上げる前に設定を行います。システム全体で設定を行う場合は/etc/pipewire/
、ユーザー毎に設定を行う場合は~/.config/pipewire/
以下に設定ファイルを置きます。
システム全体で設定を行う場合
以下のように設定します。
sudo mkdir -p /etc/pipewire/pipewire.conf.d
sudo ln -s /usr/share/examples/wireplumber/10-wireplumber.conf /etc/pipewire/pipewire.conf.d/
ユーザー毎の設定する場合
以下のように設定します。
mkdir ~/.config/pipewire/pipewire.conf.d
ln -s /usr/share/examples/wireplumber/10-wireplumber.conf ~/.config/pipewire/pipewire.conf.d/
PipeWireの起動テスト
では正しくPipeWireが導入できたかテストしてみましょう。以下コマンドで起動します。
pipewire
起動を確認するためにwireplumberのコントロールコマンドwpctl
コマンドを使用します。
wpctl status
以下のようにデバイスやクライアントが認識されていれば成功です。
自動起動の設定
デスクトップ環境を起動する際にpipewireが起動するように設定しておきましょう。各デスクトップ環境の自動起動機能を利用します。筆者の現在の環境はWaylandコンポジタのlabwcなので、~/.config/labwc/autostart
に以下のように記述しました。
pipewire &
PulseAudioインターフェースの導入
多くのアプリケーションはPipeWire向けに出力していません。そこで幅広くアプリケーションに対応しているPulseAudio用のインターフェースを導入することでPulseAudio用のアプリケーションに対応できるようにします。
sudo xbps-install pipewire-pulse
PulseAudioインターフェースを使用するように設定します。
システム全体で設定を行う場合
sudo ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf /etc/pipewire/pipewire.conf.d/
ユーザー毎の設定する場合
ln -s /usr/share/examples/pipewire/20-pipewire-pulse.conf /etc/pipewire/pipewire.conf.d/
尚、PulseAudio除去後もPavucontrolを利用することでGUIでボリューム調整などができます。
Alsaとの統合
PulseAudioに対応したことで多くのアプリケーションをカバーしましたが、Alsaのみに対応しているアプリケーションもありますのでAlsaとPipewireを統合しておきます。alsa-pipewire
をインストールします。
sudo xbps-install alsa-pipewire
以下のように設定します。
sudo mkdir -p /etc/alsa/conf.d
sudo ln -s /usr/share/alsa/alsa.conf.d/50-pipewire.conf /etc/alsa/conf.d
sudo ln -s /usr/share/alsa/alsa.conf.d/99-pipewire-default.conf /etc/alsa/conf.d
この設定の後、システムを再起動してください。
GUIツールの導入
PipeWireのGUIツールとしてはQpgraph
とHelvum
があります。筆者の個人的な感想ですが、Qpgraph
の方が使い勝手が良いです。
sudo xbps-install qpgraph
Bluetoothを使用する
これまでBluetoothでオーディオを利用するにはPluseAudioを活用していましたが、PipeWireに切り替えた後はlibspa-bluetooth
パッケージを導入する必要があります。これを以下コマンドで導入します。
sudo xbps-install libspa-bluetooth
システム再起動後にこれまで接続可能だったBluetoothヘッドセットが接続可能か確認します。
音を鳴らしてみる
ではAudaciousを用いて音を鳴らしてみます。Audaciousは出力にAlsa, PulseAudio, PipeWire, など複数選択が可能です。今回は出力をPipeWireに設定して音が出るか確認してみます。
Audaciousで音楽を再生しながらQpgraphを開き、BluetoothヘッドセットであるTrekz Air by Aftershokzに接続してみます。接続はGUI上でマウスで線をつないであげるだけです。非常に直感的に接続できます。なお、PulseAudioのGUIコントローラーであるPavucontrolでも切り替えが可能です。
Qpgraphの接続の様子を下図に示します。
JackなしでJackを必要とするアプリケーションは使えるのか?
冒頭で少し紹介したPipeWireがあればJackがなくてもJackを利用するアプリケーションが利用できるのか試してみましょう。まず、以下コマンドでlibjack-pipwire
をインストールします。
sudo xbps-install libjack-pipwire
これでpw-jack
コマンドが使えるようになったと思います。もし使用できない場合はシステムを再起動させてみてください。今回はテスト用にAmsynthというシンセサイザーを利用します。まず普通にランチャーからAmsynthを起動してみます。
エラーが出てしまいました。
次に以下のコマンドでAmsynthを起動します。
pw-jack amsynth &
今度は問題なく起動に成功します。オーディをとしてJackを認識しています。
Qpgraphで見てみましょう。
この状態でAmsynthの再生ボタンを押すと音が出ることが確認できました。pw-jack
コマンドに続けてアプリケーションを起動することでJackの代替としてPipeWireのJackインターフェースを利用するようにできます。これによりJackなしでもアプリケーション側にJackがあると思わせて動作させることができるのです。
まとめ
今回はPulseAudioをPipeWireに切り替えました。ここまで書いてきた設定を行うことでPulseAudio, Alsa, Jackを必要とするアプリケーションをPipeWireで一つにまとめて扱えるようになりました。ただ、PipeWireが完全にJackの代替となりうるのかは、まだ未知数の部分もあります。今後、DTM関連アプリケーションを触ってPipeWireがLinuxのDTMにとって有益かを確かめていきたいと思います。