2015年6月21日日曜日

[Linux]PulseAudioのDLNA Sinkを使ってみた

先日引っ越したわけですが、それに伴いPCの音響周りが様変わりいたしまして。
これまではPCからHDMIにてAVアンプに映像と音声を出力して、AVアンプから7.1chスピーカ構成となっていたわけですが、現在はAVアンプはリビングにTV周りとつながっており、PCは自室にてPCディスプレイと直結。
このため、PC内の音楽を再生するには自身がDMSを立て、AVアンプからアクセスして再生するとか、まぁいくつかの方法が考えられるわけです。
が、私が知る限り、DLNAクライアントでアルバムシャッフルに対応したものは見たことがありません・・・。
いわんや、うちのAVアンプ(ONKYO TX-NA579)も当然対応しておりません。

うーん、どうしようもないんかなーと思ってダメ元で「PulseAudio DLNA」でぐぐってみたところ、なんとPulseAudioのSinkとしてDMRを使うことができる、まさに私が欲していたばっちりなプロジェクトがGithubにあるじゃないですか!!!
masmu/pulseaudio-dlna · GitHub
これにはなかなか興味を惹かれまして。
導入を試みていたのですが、本日ようやく音を出すことができたのでそのやり方をば。

事前準備

まず事前準備として、Firewallにて適当なポートを開けてやります。DMRからpulesaudio-dlnaで公開するDMSにアクセスできるようにしてやらないといけないんですね。
引数無しでpulseaudio-dlnaを起動した場合、8888番で待ち受けます。これをそのまま使ってもいいでしょうし、何かとバッティングしているなら適当な番号で公開しましょう。ポートの開け方についてはここでは説明を省かせていただきます・・・(Fedora20以上ならFirewalldのはず。iptablesを使っている場合はそちらで設定ください)。

DMRへ接続

ポートが空いたらDMRへ接続です。なお、私の場合は自動探索でなぜかうまくDMRを見つけてくれなかったのでURL直接指定です・・・。
DMRのサービスURLについてはgupnp-universal-cpというアプリで調べることができます。DLNA周りでいろいろと調べるなら入れておいて損はないアプリです。
うちのアンプの場合はサービスURLは下記のようになります(ポート番号とかは適当です)。
http://xxx.xxx.xxx.xxx:1234/upnp_descriptor_0
これを指定してpulseaudio-dlnaを起動するには以下のように実行します。
$ pulseaudio-dlna --renderer-urls http://xxx.xxx.xxx.xxx:1234/upnp_descriptor_0
このあたりは機種によってまちまちでしょうから環境に合わせて設定ください。。。
うまくいけば「INFO:root:"TX-NA579" registered.」みたいなメッセージが出ます。

音を再生

DMRへ接続が完了したらpavucontrolなどから再生Sinkデバイスをpulseaudio-dlnaによって接続されたDMRに変更して通常通り再生すればOK!
DMRから音が流れだしたら成功です!

その他

デフォルトでは再生音はmp3にエンコードされてDMRに転送されるようですが、うちの環境ではmp3への変換がうまくできなかったのかエラーを起こしていたのでエンコード形式はwavにしております。これもpulseaudio-dlnaの引数に「--encoder wav」と指定すればOKです。ただ、どうもPulseAudioの設定は無視されている模様?
当方の設定では48000Hz/32bit le形式にしており、PulseAudio的にはDMRのSinkもその形式になっているのですが、AVアンプが再生しているストリームの形式を確認すると44100Hz/16bit なんですよねぇ。これだとハイレゾ音源がダウンサンプリングされてしまうのでせっかくのDLNAを活かせていないような気も・・・Orz
ただ、このPulseAudioのSinkプラグインの方式では、元のファイル情報は残っていないだろうから難しいのかな・・・?
ココらへんはソースを見ながら追いかけて行ったらどうにか出来たりするのかしら。フォーマット指定はあるけどサンプリングレートとかビットレートについては指定できないんだよなぁ。でも多分やってできないことはないだろうからそこは要調査かな。

ということで、非常にニッチなアプリでしょうがPC(Linux)の音をDLNA経由でアンプから再生したい人は一度お試しあれ。
ストリーム扱いなのでPCからの音すべてがDLNA経由でAVアンプから再生されます。結構面白いです。

まだまだ不安定ですが、こういう自由度がLinuxはたまりませんなぁ・・・w