Linuxを日常的に使う実験ブログ

Void LinuxのオーディオサーバーをPulseAudioからPireWireに切り替えてみた

 2024-06-10

 Void Linux

こんにちは。今回のテーマは「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 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ツールとしてはQpgraphHelvumがあります。筆者の個人的な感想ですが、Qpgraphの方が使い勝手が良いです。

sudo xbps-install qpgraph

Bluetoothを使用する

これまでBluetoothでオーディオを利用するにはPluseAudioを活用していましたが、PipeWireに切り替えた後はlibspa-bluetoothパッケージを導入する必要があります。これを以下コマンドで導入します。

sudo xbps-install libspa-bluetooth

システム再起動後にこれまで接続可能だったBluetoothヘッドセットが接続可能か確認します。

音を鳴らしてみる

ではAudaciousを用いて音を鳴らしてみます。Audaciousは出力にAlsa, PulseAudio, PipeWire, など複数選択が可能です。今回は出力をPipeWireに設定して音が出るか確認してみます。

pipewire status

Audaciousで音楽を再生しながらQpgraphを開き、BluetoothヘッドセットであるTrekz Air by Aftershokzに接続してみます。接続はGUI上でマウスで線をつないであげるだけです。非常に直感的に接続できます。なお、PulseAudioのGUIコントローラーであるPavucontrolでも切り替えが可能です。

Qpgraphの接続の様子を下図に示します。

pipewire status

JackなしでJackを必要とするアプリケーションは使えるのか?

冒頭で少し紹介したPipeWireがあればJackがなくてもJackを利用するアプリケーションが利用できるのか試してみましょう。まず、以下コマンドでlibjack-pipwireをインストールします。

sudo xbps-install libjack-pipwire

これでpw-jackコマンドが使えるようになったと思います。もし使用できない場合はシステムを再起動させてみてください。今回はテスト用にAmsynthというシンセサイザーを利用します。まず普通にランチャーからAmsynthを起動してみます。

エラーが出てしまいました。

pipewire status

次に以下のコマンドでAmsynthを起動します。

pw-jack amsynth &

今度は問題なく起動に成功します。オーディをとしてJackを認識しています。

pipewire status

Qpgraphで見てみましょう。

pipewire status

この状態でAmsynthの再生ボタンを押すと音が出ることが確認できました。pw-jackコマンドに続けてアプリケーションを起動することでJackの代替としてPipeWireのJackインターフェースを利用するようにできます。これによりJackなしでもアプリケーション側にJackがあると思わせて動作させることができるのです。

まとめ

今回はPulseAudioをPipeWireに切り替えました。ここまで書いてきた設定を行うことでPulseAudio, Alsa, Jackを必要とするアプリケーションをPipeWireで一つにまとめて扱えるようになりました。ただ、PipeWireが完全にJackの代替となりうるのかは、まだ未知数の部分もあります。今後、DTM関連アプリケーションを触ってPipeWireがLinuxのDTMにとって有益かを確かめていきたいと思います。