PulseAudioは、Ubuntu 8.04から標準採用されている「音を扱うための仕組み」で、それまで使われていたものに比べて非常に高度なことができるようになっています[1]。
今回のレシピでは、PulseAudioの基本的な機能から、ネットワーク経由で音を配信する機能までを紹介します。
アプリケーションごとの再生音量の変更
Ubuntu 9.10では、画面右上の通知領域に表示されているスピーカのアイコンを右クリックして[サウンドの設定]を選択するか、[システム]-[設定]-[サウンド]でPulseAudioに関する設定ができます。
PulseAudioの機能として挙げられる代表的なものが、[サウンドの設定]の[アプリケーション]タブで、アプリケーションごとの音量をPulseAudio側で一元的に管理できることです(図1)。
筆者は、Flash Playerを使用した音楽ストリーミングサービスをPrismで常時利用していますが、そのサービスの音量調節のインターフェースが使いにくいため、PulseAudio側で音量調整しています。
ここで設定した音量は保存され、アプリケーションの次回起動時には、同じ音量で再生が開始されます。この保存されている設定を一括でリセットするには、ホームディレクトリの[.pulse]という隠しディレクトリに保存されているファイル["ランダムな英数字"-stream-volumes.tdb]を削除して、ログアウトするかPulseAudioをリスタートさせます。
LAN内の別のマシンに音を飛ばす
筆者は、最近ノートPCを購入し、こたつで作業をすることが多くなりました。しかし、ノートPCの小さなスピーカで音楽を再生するのは寂しく、同一LAN内のデスクトップ機に接続しているスピーカを使えないかと考えました[2]。
そこで、PulseAudioのネットワーク機能を使って、デスクトップ機に接続されているスピーカを、あたかもノートPCに直接接続されているかのように使うことにしました[3]。この方法では、ノートPC側で音楽ファイルがデコードされ、生の音のデータがルータを経由してデスクトップ機まで転送され、デスクトップ機に接続されたスピーカから音が出ます(図2)。
ではさっそく設定していきます。
まずは、接続する方、される方ともに、「PulseAudio Preferences」(パッケージ名: paprefs)をインストールします。
[システム]-[設定]-[PulseAudio Preferences]を開き、接続される方(筆者の環境ではデスクトップ)は、[Network Server]タブで図3のように、3つの項目にチェックを入れます[4]。
接続する側(筆者の環境ではノートPC)は、[Network Access]タブで図4のようにチェックを入れます。
たったこれだけの設定で、接続する側の[サウンドの設定]の[出力]タブに、接続される側のサウンドデバイスが表示されます(図5)。
ノートPCからデスクトップ側のデバイスを選択すると、ノートPCで再生するすべての音がデスクトップに接続されたスピーカから出力されるようになります。手元のノートPCでDVDを再生しながら、音声部分をデスクトップに接続した5.1chオーディオで、といった使い方もできます。2chのオーディオで約1.6Mbps、5.1chで約6Mbpsの帯域を使っていますが、無線LAN経由でも気づくほどの遅延なく再生できています。
転送するストリームを選ぶ
先ほどの方法では、音の出力先に、ノートPCかデスクトップのどちらかしか選べませんでした。特定のアプリケーションの音だけ転送したい、という場合には、「PulseAudio Volume Control」(パッケージ名: pavucontrol)をインストールします。
[アプリケーション]-[サウンドとビデオ]-[PulseAudio Volume Control]から起動します。
[Playback]タブで、アプリケーション名の右に表示されているボタンを押して、転送先を選びます(図6)。どのストリームをどのデバイスに転送したかは保存され、次回起動時も同じデバイスが接続されていれば、そのデバイスで再生されます。保存場所は、先ほどと同様に、["ランダムな英数字"-stream-volumes.tdb]なので、同様の手順でリセットできます。
[Output]タブでは、ネットワーク接続のデバイスも含めて、デバイスごとに音量を調節できます。
専用サーバを作ってみる
スピーカをネットワーク対応にするためだけに、高性能なデスクトップ機を常時稼働させておくのは電力の無駄なので、筆者所有のAtom 330搭載ネットトップを専用のスピーカサーバにしてみます[5]。
サーバといっても、Ubuntu ServerでPulseAudioを設定していくのは大変なので、素直に通常のデスクトップ版Ubuntuをインストールしておきます[6]。
電源を入れるだけでスピーカサーバとして機能するようにしたいので、自動ログインを設定します。ですが、管理者としての権限を持たせる必要がないので、[システム]-[システム管理]-[ユーザとグループ]で新しいユーザを「Unprivileged」プロファイルにして作成しておきます。
[システム]-[システム管理]-[ログイン画面]を開き、新たに作成したユーザで自動ログインを設定します(図8)。
新たに作成したユーザでログインして、先ほどのPulseAudio Preferencesで公開のための設定をしておきます。
[システム]-[設定]-[電源の管理]の[全般]タブで、電源ボタンを押したときの動作を「サスペンド」または「シャットダウン」にしておくのがおすすめです。
これで、電源ボタンを押せばスピーカサーバとして働き、もう一度電源ボタンを押すと動作を停止するスピーカサーバができました。
PulseAudioのより発展的な使い方を知りたい場合は、PulseAudioプロジェクトWikiのFAQが役立つでしょう。