Linuxオーディオの悩みを解消:PipeWireへの移行6ヶ月レポート

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

かつての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デスクトップにおける最も効果的なアップグレードと言えるでしょう。プロユーザーが必要とするパワーを損なうことなく、「ただ動く」オーディオ環境をようやく実現してくれます。

Share: