PulseAudioに注目すべき理由(とPulseAudioの始め方)

 サウンドサーバのPulseAudioはLinuxのサウンド分野では比較的新参者だが、少なくとも2つのメジャーなディストリビューション(FedoraUbuntu)の次期リリースでデフォルトのセットアップとして採用されたので、ここで一度調べて理解しておく価値はあるだろう。

 Linux用のサウンドシステムを理解するのは少々ややこしいことだ。どのプロジェクト(少し挙げるだけでもALSA、OSS、ESD、aRts、JACK、GStreamerがある)も大ざっぱで似たような言葉でプロジェクトを説明しているし、多種多彩なパッケージの名前――alsaplayer-esd、libesd-alsa、alsa-oss、alsaplayer-jack、gstreamer-alsa、gstreamer-esd等々――は、まるできりのない組み合わせゲームのようだ。また、これらのコンポーネントがどのように組み合わさるのかを説明するのもなかなか難しい。例えばUbuntuのlibasound2-pluginsパッケージの説明には「ALSAライブラリ用プラグインのjackは、ALSAライブラリがJACK経由で再生やキャプチャを行なうことができるようにするためのものです。(jackdパッケージに含まれているjackd出力ドライバのalsaと混乱しないようにして下さい。alsaは、JACKデーモンがALSAライブラリ経由で再生できるようにするためのものです。)」とある。もちろん――混乱する人などいるわけがない――だろうか?

整理

 混乱を招きやすくなってしまっている原因は複数あって、(開発者フレンドリーではなく)ユーザフレンドリな文書の不足や、複数のプロジェクト間で目標が重複していることなどを挙げることができる。

 例えばALSA(Advanced Linux Sound Architecture)プロジェクトには、いくつかの独立したコンポーネントがある。その中には、サウンドカード用のカーネルのハードウェアドライバもあれば、ALSAのAPI(アプリケーション・プログラミング・インターフェース)をアプリケーションから利用可能にするライブラリなどもある。ハードウェアドライバはサウンドカードにサウンドを出力させるために必要だが、ライブラリはアプリケーションによって使われたり使われなかったりする。

 またKDEのサウンドライブラリであるaRtsには、サウンドサーバ(サウンドをアプリケーションから受け取ってハードウェアドライバに渡す低レベルのデーモン)も含まれていれば、様々なファイルやストリーム形式のエンコード/デコードといった高レベルな機能も含まれている。一方、GNOMEでの状況はもう少しすっきりとしていて、サウンドサーバはESD(Enlightened Sound Daemon)であり、コーデックは別個のライブラリ(GStreamer)が扱うようになっている。

 とは言え混乱の最大の原因は、ユーザ空間ALSAライブラリ、aRts、ESD、GStreamerなど、独自のAPIを提供しているオーディオプロジェクトがあまりに多く存在しているということだろう。先にも述べたように、どれを組み合わせても様々な点で重複してしまう。さらにそれらに加えて、ゲーム向けのSDLOpenAL、古い汎用アプリケーション向けのOSS(Open Sound System)、プロ級の低遅延操作向けのJACKなども存在する。

 挙げ句の果てには、サウンド機能を外部のライブラリに頼らずに、すべて内部的に行なうアプリケーションもある。中でも最も有名なものとしては、高機能メディア再生アプリケーションのXineMPlayerなどがある。これらは、ファイルのデコードから多重分離処理まで、何から何までアプリケーション自体の中で取り扱っている。

 PulseAudioがどの部分に当てはまるのかは、個々の処理が切り分けて取り扱われる、GNOMEのシステムを用いて説明するのが最も簡単だ。GNOMEのRhythmboxなどのアプリケーションは、サウンドファイルの圧縮形式から生のサウンドデータへのデコードをGStreamerに依存している。次にGStreamerがそのサウンドデータをESDに渡して、ESDがそれをALSAハードウェアドライバに渡す。

 上記の状況に当てはめると、PulseAudioはパイプラインの他の部分に影響を与えることなくESDに置き換わることができる。ただし他のプレイヤーを使う場合には、上記の例には含まれていない、ALSAユーザ空間ライブラリも使用されるかもしれない。その場合にもやはりPulseAudioは、パイプラインの中でカーネルレベルのハードウェアドライバのすぐ上に位置することになる。PulseAudioを利用することにより階層が一つ増えることになるが、そうすることによりすべてのサウンドが同じサウンドサーバを経由することの利点を享受することができるようになる。

 そして、そこがポイントだ――ユーザ空間ALSA APIやaRtsやJACKを使うように書かれているアプリケーションもあれば、サウンドを内部的に扱うように書かれているアプリケーションもある――しかしすべてのサウンドが単一のハンドラを経由するようにすれば、制御しやすく、衝突が起こりにくく、予想外のことも起こりにくくなる。

シンプルなサウンド

 PulseAudioを自分のシステムで使い始めるのに最も手早い方法は、手元のディストリビューションでパッケージが用意されていないかどうかを確かめてみることだ。実際、多くのディストリビューションにはPulseAudioのパッケージが用意されている。FedoraとUbuntuの次期リリースではデフォルトでPulseAudioが使用される予定とのことだが、現時点のリリースでも、すでにFedora/Ubuntuをはじめとしてその他のディストリビューションでもパッケージが利用可能になっている。なおPulseAudioのwikiに、パッケージを提供しているディストリビューションのリストがあり、MandrivaやopenSUSEの開発版なども挙げられている。

 パッケージになっているバイナリが手元のディストリビューションには用意されていない場合には、PulseAudioを自分でダウンロードしてコンパイルすることもできる。とは言えほとんどのユーザは、パッケージをインストールしてオーディオアプリケーション内で設定オプションを設定するだけで使い始めることができるだろう。

 PulseAudioのwikiのThe Perfect Setup(完璧なセットアップ)という題名のページに手順を追った基本的な説明があるが、ディストリビューションにパッケージが用意されているのであれば、ディストリビューション専用のガイドを探してみると良いかもしれない。私の場合Ubuntu専用のガイドがまだなかったので、forum.debian.netに投稿されていたDebian HOWTOの手順を手元のUbuntu Feistyマシン上で行なったところ、ほとんど問題はなかった。

 具体的な手順は以下の通りだ。まず始めに、Synaptic経由で入手可能になっているPulseAudio関連のパッケージをすべてインストールする。GStreamer、ALSA、JACKなどのサウンド用フレームワークごとにPulseAudioを接続するためのパッケージがそれぞれ用意されているのだが、中でも最も重要なのはpulseaudio-esound-compatだ。このパッケージはESDパッケージのesoundを完全に置き換えるもので、実際にはPulseAudioを指すダミーの/usr/bin/esdというシンボリックリンクを作成する。こうしておけば、ESDを利用するつもりのアプリケーションはどれも騙されて自動的にPulseAudioを使うようになる。

 重要な注意点として、PulseAudioのパッケージでは独自のグループが作成され、PulseAudioを使用したいユーザはそのグループのメンバーにならなければならないということがある。大抵のデスクトップユーザはグループやグループパーミッションをあまり気にかけないので、この点は見逃しやすいかもしれない。Ubuntuでは、System(システム)→Administration(管理)→Users and Groups(ユーザとグループ)からグループのメンバーを変更することができる。これを行なうとUsers(ユーザ)設定マネージャが立ち上げるので、Manage Groups(グループの管理)ボタンをクリックしてpulseグループ、pulse-accessグループ、pulse-rtグループのプロパティウィンドウをそれぞれ開いて自分のアカウントを追加する必要がある。

 それが終わったら、Debianのチュートリアルからサンプルの/etc/asound.confファイルをコピーする。これはALSAの設定用ファイルだが、大抵の場合ALSAアプリケーションはこのファイルがなくても問題なく動くので、デフォルトでは作成されていない。しかしALSAアプリケーションがデフォルトの出力先としてPulseAudioを使用するべきであることを指定するためには、作成する必要がある。

サウンドを楽しむ

 ESDに差し換えてPulseAudioを使用するように設定して、ALSAがPulseAudioを使うように/etc/asound.confで設定し終われば、通常のデスクトップLinuxユーザのサウンド関連の需要の90%を満たしたことになるだろう。

 それ以外のアプリケーション――サウンド関連のすべてを内部的に扱う変則的なアプリケーション――については、PulseAudioのwikiにある具体的な手順が貴重な情報源になるだろう。例えばKDEアプリケーションのほとんどはaRtsを使うが、aRtsがESDを使うようにして、その後PulseAudioを経由するように設定を変更することができる。またAmaroKやXMMSやその他のメディアプレイヤーでは、各アプリケーションの設定でバックエンドのエンジンを選択することができる。

 現時点でPulseAudioとは非協調的であるメジャーなアプリケーションは、オーディオエディタのAudacityとビデオプレイヤーのMPlayerだけだ。どちらもそれぞれのプロジェクトのページから開発版のコードを取得する必要がある。より重要なこととしては、Audacityのサウンドデバイスの制御方法が原因で、使用する前にPulseAudioをシャットダウンする必要がある。こうしなくても済むようにするためのコードも開発中だが、まだ安定版コードベースには含まれていない。

 PulseAudioの基本的な使い方は以上の通りだが、PulseAudioがLinuxディストリビューションのデフォルトのサウンドスタックの中に含まれることになったのは、PulseAudioに上記以外のかなり多くのことができるためだ。例えばPulseAudioは、ローカル/ネットワーク経由を問わず、複数の音源からのサウンドを複数の出力先に届けることができる。またPulseAudioを使えば、複数のサウンドカードを単一の仮想的なデバイスへと一体化したり、PCから別のPCへ音楽を転送したり、単一のマイク入力を複数のPC間で共有させたりすることもできる。

 PulseAudioについて知るにはまず、PulseAudioのwikiを見るのが最も良いだろう。FAQのページの後半にはPulseAudioの先進的な機能の利用方法を示す具体例が多く載っている。設定オプションのほとんどはテキストファイルの設定ファイルの中で指定するが、再起動しなくても――場合によっては実行ファイルのpulseaudio自体を起動し直すことはあるかもしれないが――新しい設定を試すことができる。

 またPulseAudioプロジェクトでは、Lennart Poettering氏によるGUIツールを見てみることを勧めている。このツールには、PulseAudio専用の音量調節、音量メーター、デバイス選択用ツールなどが含まれていて、すべてGNOMEやKDEのデフォルトのツールと同じように、パネルアプレット経由でアクセスすることができる。また、より多くの機能を搭載したPulseAudio Managerアプリケーションもあって、これを利用するとデバイスやモジュールの接続や切断を実行中に行なうこともできる。

 PulseAudioが機能満載で複雑だからと言って、怖じ気付く必要はまったくない。PulseAudioプロジェクトは、よく使う機能については専門知識の必要がないように単純にしておくということをうまく行なっている。しかし一方でオープンソース流の伝統に基づいて、よりパワフルなことを行なうこともできるようになっており、しかもそれらが簡単にできるようにもなっている。

Linux.com 原文