Snap.Shot.cx

[次の記事] Ubuntu casperでシャットダウン時にプロンプトを表示させない
[前の記事] ServersMan@VPSに吃驚

[Linux] PCをBluetoothオーディオのトランスミッタとして使う
01/15/2011 19:46 (投稿者:たかの)

前から欲しいと思っていたBluetoothヘッドセットのアウトレットを破格で手に入れたものの、手持ちのワンセグ携帯はBluetooth対応でないと後になって気づいた…
ステレオミニプラグへの変換器は既に持っているので、Bluetoothオーディオに飛ばせるトランスミッタを探してみると、結構な値段するのでちょっと手を伸ばす気になれない。
どうせならPCからも飛ばしたいので、とりあえずUSBドングルを買って、ノートPC経由で飛ばせないか試してみた。使ったのはUbuntu Maverickだけど、PulseAudioさえ対応できていればすぐにできるはず。

もちろんPCのオーディオ入力からの録音と、PCとBluetoothヘッドセットの接続は解決している必要はある。
けれどもこれらは一般的な環境ですぐ対応できるはず。
たとえばgnomeのサウンドレコーダでうまく音を拾えないのであれば、ミキサのパネルを開いてデバイスがmuteになっていないか、またそもそも入力デバイスとして認識できているかを確認すればよい。
また、Bluetoothアプレットやbluez-utilsを使えばヘッドセットのペアリングはすぐに出来ると思う。
この記事ではそこまで詳しく追求しないので、もしそこで引っかかったら別途ウェブ検索して解決方法を見つけて欲しい。

問題はここからで「特定のオーディオデバイスの入力を、別のオーディオデバイスの出力としてただ垂れ流す」という手法は、意外と一般的ではないらしい?
それはWindows環境でもそのようで、同一のオーディオデバイスの入力をパススルーさせて、マイクの音をそのままスピーカーから鳴らすようなことは出来るんだけど、そりゃ内部的に結線されているんだから当たり前。
そうではなくて、たとえばPCビルトインのマイク入力から拾った音をUSBスピーカにパススルーさせることも容易ではないらしい。
もちろんそういえアプリを書けば実現できるだろうし、極端なところでは「Windowsオーディオデバイスのテスト」にも、オーディオ入力をオーディオ出力にエコーバックさせる機能はある。

しかし、そのためだけに毎回オーディオデバイスをテストするというのでは、あまりにも情けない。既存のフリーアプリにもそうした機能を備えたシンプルなものは見あたらないし、そもそも、できればUbuntu Maverickで使いたかったのだ。


意地になって探しているうち、ようやくPulseAudioのドキュメントに行き当たった。
modulesのページの一番最後に、そのものズバリ「module-loopback」なんてものがあるじゃないか。

"Since 0.9.16. This allows one to route audio from a source directly back to a sink."

だって。いやっほう!!

sourceというのはもちろん音源、sinkというのは出力先だ。
PulseAudioで取り扱うのは、なにも実際に鳴るデバイスとは限らず、ネットワーク越しに別のホストのオーディオデバイスを鳴らすことができたり、あるいは特定のエンコードを持ったファイル(.wavファイルとか)に落としたりできるので、それらを総称してsinkというみたい。
英辞郎によると、sinkには名詞として「受信装置」という意味もあるらしい。ほかにどこかで見たかなぁ、記憶に無いな。

PluseAudioオーディオサーバに指示を出す一番簡単な方法はCLI(コマンドライン・インタフェース)を使う方法だ。
シェルからはpacmdというコマンドで呼び出せるので、モジュールを読み込ませるには次のように叩けばいい。

$ pacmd load-module module-loopback source=[音源] sink=[ヘッドセット]
($はプロンプト。一般権限でよいはず)

単にデフォルトの入力デバイスからデフォルトの出力デバイスに流したいだけなら、sourceやsinkは省略できる。
デバイスを明示したいのであれば、PulseAudioの流儀に従ったデバイス名を知るために

$ pacmd list-sinks
$ pacmd list-sources

を使うとよいと思う。

PulseAudioには他にもいろいろな機能が備わっていて、さきにも述べたネットワーク越しにオーディオを飛ばすモジュール(module-tunnel-{sink,source})や、ふたつ以上のオーディオデバイスをまとめて、同じ音を複数デバイスで鳴らすためのモジュール(module-combine)などは興味深く、いずれ試してみたい。


最後になるけど、この設定に相当するGUIを持ったアプリなど御存知の方は教えてください^^;
このことを他人に説明するのは、やっぱりちょっと面倒なので…

メールでコメント

(Powered by Zope)
リンクはご自由にどうぞ。各記事には記事番号がついていますので、URLは変わりません。
© 2000-2013 Yukimasa TAKANO, all RIGHTs reserved.