PulseAudioは、Ubuntu 8.04から標準採用されている「音を扱うための仕組み」で、それまで使われていたものに比べて非常に高度なことができるようになっています[1] 。
今回のレシピでは、PulseAudioの基本的な機能から、ネットワーク経由で音を配信する機能までを紹介します。
[1] しかしPulseAudioへの移行期に、音が出ないなどのトラブルに見舞われる場合があったため、「 音関係でトラブルに遭遇したらとりあえずPulseAudioを削除しろ」という扱いを受けたこともありました。
アプリケーションごとの再生音量の変更
Ubuntu 9.10では、画面右上の通知領域に表示されているスピーカのアイコンを右クリックして[サウンドの設定]を選択するか、[システム]-[設定]-[サウンド]でPulseAudioに関する設定ができます。
PulseAudioの機能として挙げられる代表的なものが、[サウンドの設定]の[アプリケーション]タブで、アプリケーションごとの音量をPulseAudio側で一元的に管理できることです(図1 ) 。
筆者は、Flash Playerを使用した音楽ストリーミングサービスをPrismで常時利用していますが、そのサービスの音量調節のインターフェースが使いにくいため、PulseAudio側で音量調整しています。
図1 アプリケーションごとに、音量、ミュートを一元的に管理
ここで設定した音量は保存され、アプリケーションの次回起動時には、同じ音量で再生が開始されます。この保存されている設定を一括でリセットするには、ホームディレクトリの[.pulse]という隠しディレクトリに保存されているファイル["ランダムな英数字"-stream-volumes.tdb]を削除して、ログアウトするかPulseAudioをリスタートさせます。
LAN内の別のマシンに音を飛ばす
筆者は、最近ノートPCを購入し、こたつで作業をすることが多くなりました。しかし、ノートPCの小さなスピーカで音楽を再生するのは寂しく、同一LAN内のデスクトップ機に接続しているスピーカを使えないかと考えました[2] 。
[2] 喫茶店にノートPCを持ち込んで作業しているときに、天井に設置されているスピーカからBGMが流れてくるイメージです。このイメージを自宅に持ち込み、筆者は「今居るのはこたつ喫茶だ」と思うことにしました。
そこで、PulseAudioのネットワーク機能を使って、デスクトップ機に接続されているスピーカを、あたかもノートPCに直接接続されているかのように使うことにしました[3] 。この方法では、ノートPC側で音楽ファイルがデコードされ、生の音のデータがルータを経由してデスクトップ機まで転送され、デスクトップ機に接続されたスピーカから音が出ます(図2 ) 。
図2 筆者の環境での再生の流れ
※図中のアイコンはTango Desktop Project のものを使用しています。
[3] Apple製品のAirMac Express(国外での名称はAirPort Express)が備えているAirTunes 機能のような使い方です。余談ですが、Ubuntu側からAirMac Expressに接続するための「pulseaudio-module-raop」というパッケージがあります。ですが筆者はAirMac Expressを所有していないため検証できていません。
ではさっそく設定していきます。
まずは、接続する方、される方ともに、「 PulseAudio Preferences」( パッケージ名: paprefs)をインストールします。
[システム]-[設定]-[PulseAudio Preferences]を開き、接続される方(筆者の環境ではデスクトップ)は、[Network Server]タブで図3 のように、3つの項目にチェックを入れます[4] 。
図3 接続される側の設定。
「Enable netwok acess to local sound devices」
「 Allow other machines on the LAN to discover local sound devices」
「 Don't require authentication」にチェックを入れる
[4] 「Don't require authentication」にチェックを入れると、同一LAN内から認証なしで接続できてしまいます。認証を必要とする場合は、接続される側のCookie(~/.pulse-cookie)を接続する側にコピーして、チェックを外します。Cookieが一致しないユーザは接続できなくなります。
接続する側(筆者の環境ではノートPC)は、[Network Access]タブで図4 のようにチェックを入れます。
図4 接続する側の設定。
「Make discoverable PulseAudio network sound devices available locally」にチェックを入れる
たったこれだけの設定で、接続する側の[サウンドの設定]の[出力]タブに、接続される側のサウンドデバイスが表示されます(図5 ) 。
ノートPCからデスクトップ側のデバイスを選択すると、ノートPCで再生するすべての音がデスクトップに接続されたスピーカから出力されるようになります。手元のノートPCでDVDを再生しながら、音声部分をデスクトップに接続した5.1chオーディオで、といった使い方もできます。2chのオーディオで約1.6Mbps、5.1chで約6Mbpsの帯域を使っていますが、無線LAN経由でも気づくほどの遅延なく再生できています。
図5 デスクトップに接続されているUSBスピーカをノートPCから使えるように
転送するストリームを選ぶ
先ほどの方法では、音の出力先に、ノートPCかデスクトップのどちらかしか選べませんでした。特定のアプリケーションの音だけ転送したい、という場合には、「 PulseAudio Volume Control」( パッケージ名: pavucontrol)をインストールします。
[アプリケーション]-[サウンドとビデオ]-[PulseAudio Volume Control]から起動します。
[Playback]タブで、アプリケーション名の右に表示されているボタンを押して、転送先を選びます(図6 ) 。どのストリームをどのデバイスに転送したかは保存され、次回起動時も同じデバイスが接続されていれば、そのデバイスで再生されます。保存場所は、先ほどと同様に、["ランダムな英数字"-stream-volumes.tdb]なので、同様の手順でリセットできます。
図6 アプリケーションごとに再生デバイスを選べる
[Output]タブでは、ネットワーク接続のデバイスも含めて、デバイスごとに音量を調節できます。
図7 デバイスごとに音量を調節できる
専用サーバを作ってみる
スピーカをネットワーク対応にするためだけに、高性能なデスクトップ機を常時稼働させておくのは電力の無駄なので、筆者所有のAtom 330搭載ネットトップを専用のスピーカサーバにしてみます[5] 。
サーバといっても、Ubuntu ServerでPulseAudioを設定していくのは大変なので、素直に通常のデスクトップ版Ubuntuをインストールしておきます[6] 。
電源を入れるだけでスピーカサーバとして機能するようにしたいので、自動ログインを設定します。ですが、管理者としての権限を持たせる必要がないので、[システム]-[システム管理]-[ユーザとグループ]で新しいユーザを「Unprivileged」プロファイルにして作成しておきます。
[システム]-[システム管理]-[ログイン画面]を開き、新たに作成したユーザで自動ログインを設定します(図8 ) 。
図8 自動ログインの設定
新たに作成したユーザでログインして、先ほどのPulseAudio Preferencesで公開のための設定をしておきます。
[システム]-[設定]-[電源の管理]の[全般]タブで、電源ボタンを押したときの動作を「サスペンド」または「シャットダウン」にしておくのがおすすめです。
これで、電源ボタンを押せばスピーカサーバとして働き、もう一度電源ボタンを押すと動作を停止するスピーカサーバができました。
PulseAudioのより発展的な使い方を知りたい場合は、PulseAudioプロジェクトWikiのFAQ が役立つでしょう。