かつてのLinuxオーディオの混乱
半年前、私のLinux環境は常に綱引きをしているような状態でした。Zoom会議と週末の音楽制作を行き来するエンジニアとして、私はPulseAudioとJACK foldingの対立の真っ只中に取り残されていました。
PulseAudioは日常の通知やBluetoothヘッドフォンの処理には適していましたが、低レイテンシのレコーディングには不向きでした。逆に、JACKはBitwigのようなDAWに必要な精度を提供してくれましたが、ハードウェアを独占してしまいます。JACKがオーディオインターフェースの共有を拒むため、トラック制作中にYouTubeのチュートリアル動画を見ることさえできませんでした。
毎朝、音をまともに鳴らすだけで20分ほど費やしていました。Xrun(バッファのアンダーラン/オーバーラン)のトラブルシューティングや、ランダムなサーバークラッシュへの対応がストレスの溜まる日課になっていました。統一されたオーディオシステムという夢は、PipeWireへの移行を決心するまで、はるか遠くに感じられました。
断片化の罠:なぜオーディオは壊れ続けるのか
レガシーなシステムが失敗するのは、優先順位が衝突しているからです。PulseAudioは一般ユーザー向けに構築され、使いやすさに重点を置いています。しかし、200msという巨大な遅延が発生するため、リアルタイムのモニタリングは不可能です。プロオーディオ向けの選択肢であるJACKは、10ms以下の低レイテンシを提供しますが、静的なセットアップを要求します。FirefoxやSpotifyのような一般アプリとは相性が良くないのです。
両方を動かそうとすると、壊れやすいソフトウェアのブリッジを構築することになります。これらのセットアップは、サーバー間でデータを移動させるだけでCPUの10%を消費することもありました。さらに悪いことに、マイナーなシステムアップデートの後に完全に壊れてしまうこともよくありました。Bluetoothもまた悪夢でした。LDACのような高品質コーデックは、手動のハックや不安定なモジュールを使わないと利用できませんでした。
ソリューションの比較:PulseAudio対JACK対PipeWire
違いはデータの移動方法にあります。PulseAudioはバッテリーを節約するためにオーディオを大きな塊で「プッシュ(送信)」しますが、これがタイミングを台無しにします。JACKは厳密な間隔でデータを「プル(要求)」します。これは同期には優れていますが、CPU使用率が1ミリ秒でもスパイクすると、オーディオに「ポップ音」が発生します。
PipeWireはグラフベースのプロセッシングエンジンを使用して、異なる approach をとります。アプリケーションが期待するサーバーのふりをするのです。Spotifyに対してはPulseAudioのように振る舞い、DAWに対してはJACKのように振る舞います。内部では、すべてを単一の高速ストリームとして管理します。
最善のアプローチ:PipeWireへの移行
過去3年間で数十台のLinuxサーバーを管理して学んだルールが1つあります。それは「まずすべてをテストすること」です。ワークステーションをPipeWireに移行する際も、同じ論理に従いました。まずはカーネルバージョン(5.15以上)がモダンなドライバーを扱えるかを確認することから始めました。
ステップ1:インストールと競合の管理
Ubuntu 22.04やFedoraを使っているなら、PipeWireはすでに入っている可能性が高いでしょう。しかし、まだ主要な役割を担っていないかもしれません。正式に切り替えるには、セッションマネージャーのWirePlumberと互換レイヤーが必要です。
# Debian/Ubuntuベースのシステムの場合
sudo apt update
sudo apt install pipewire-audio-client-libraries pipewire-pulse pipewire-jack wireplumber
ステップ2:サービスの有効化
ここが素晴らしい点ですが、PipeWireはユーザーサービスとして動作します。日常的な管理にroot権限は必要ありません。まず、古いPulseAudioサービスを無効にして道を空ける必要があります。
# PulseAudioを無効化
systemctl --user --now disable pulseaudio.service pulseaudio.socket
systemctl --user mask pulseaudio.service
# PipeWireとWirePlumberを有効化
systemctl --user --now enable pipewire pipewire-pulse wireplumber
ステップ3:セットアップの確認
再起動後、PipeWireがメインで動作しているか確認できます。
pactl info | grep "Server Name"
# 出力例: Server Name: PulseAudio (on PipeWire 1.x.x)
プロオーディオとBluetoothの低レイテンシへの対応
6ヶ月のテストで最大の収穫はBluetoothのパフォーマンスでした。PipeWireには、LDACを標準でサポートするネイティブプラグインが含まれています。Sony WH-1000XM5や同等のハイエンドヘッドフォンを使用している場合、設定ファイルをいじることなく990kbpsのオーディオを利用できます。
Focusrite Scarlett 2i2のようなインターフェースを使用している場合、グローバルでサンプリングレート48kHz、バッファサイズ128サンプルに設定できます。これにより、5.3msという非常に安定した往復レイテンシが得られます。私はこれを視覚的に管理するために **qpwgraph** を使用しています。マイクの音声をノイズキャンセリングVSTに通し、そのままブラウザ経由の会議へ遅延なくルーティングできます。以前は、これを行うだけでPulseAudioの設定に相当な習熟が必要でした。
6ヶ月後の結論
完璧でしょうか? 100%とは言えません。たまに、古いJACKアプリを pw-jack コマンドを使って手動で起動させる必要があります。しかし、安定性は驚異的です。「Audio Device Busy(オーディオデバイスが使用中)」というエラーは、ここ数ヶ月見ていません。DAWからYouTube動画への切り替えも、ようやくシームレスになりました。
もし未だにPulseAudioやJACKと格闘しているなら、ぜひ移行してください。Linuxデスクトップにおける最も効果的なアップグレードと言えるでしょう。プロユーザーが必要とするパワーを損なうことなく、「ただ動く」オーディオ環境をようやく実現してくれます。

