Ubuntu Server 18.04 で pulseaudio-bluetooth server 備忘録

Photo by hyt.

Ubuntu Server 18.04 で pulseaudio-bluetooth server 備忘録です.内容としては,以前の記事

Volumio を pulseaudio に対応させる備忘録で...

の続きとなります.Volumio を pulseaudio に対応させることができましたので,ネットワークで音を転送し,Bluetooth スピーカーで聞いてみたいというのが目標です.

メリットはあるの?

まず,注意として,今回ご紹介する方法は,Volumio との組み合わせだけだと

知的好奇心を満たす以上のメリットはない!

です.実際,Volumio を Bluetooth スピーカー等に対応させたいだけであれば,Volumio plugin を用いた

や,GENKI Bluetooth を用いた

GENKI Bluetooth を Volumio2 で使って...

の方法の方が色々な面で便利だからです.

いちおう,今回の方法だといままで対応できなかった高音質と呼ばれている LDAC コーデックが使えるようになりはします.しかし,LDAC に対応させたいなら,素直に Sony の NW-A50 系か NW-A40 系 WALKMAN を買って,GENKI Bluetooth と同じように Volumio に USB 音源として接続する方が安定性も音質も良いと思います.

なぜ Ubuntu Server なのか?

現在の Volumio はもともと Raspbian を元に開発されているものでしすし,Raspbian は Debian の Raspberry pi 向けディストリビューションです.だから,わざわざ他の OS を使わず,

Volumio を直接 pulseaudio-bluetooth に対応させるべきでは?

って考えるのは当然だと思います.もちろん私も最初はその方向で考えたんですが,次の理由で諦めました.

  1. 現在の Volumio が Raspbian Jessie を元にしていて,Jessie だと,pulseaudio ver.5 が標準なこと(pulseaudio-bluetooth は ver.11 系列から対応)
  2. Volumio のアップデートに追従しにくくなる

要するに,大工事になりすぎる訳です.だから,Volumio になるべく手を入れずにすむ別サーバーで試すことにし,できればなるべく容量が小さい方が良いので,最小構成でのインストールが良いよなぁ……と考え,Ubuntu だと(経験的に)色々なハードウェアに対応しやすいはずだよなぁ……という流れで Ubuntu Server を選びました.

レシピ (Recipi)

最終的にまとめてみると簡単です.まず,最小構成で Ubuntu Server 18.04.3 LTS をインストールします.

私は VMWare ESXi で作られた仮想環境に導入しました.ESXi で Bluetooth のパススルーがうまくいかない場合は,

ESXi6.7 で Bluetooth をパススルーしてみた備...

にある内容を試してみて下さい.

次に,素の Ubuntu Server に puseaudio-bluetooth を導入するのですが,ディストリビューション付属のものだと,LDAC とか AAC とかのコーデックに対応していません.

にこれらのコーデックに対応するためのコードが公開されていますが,対応する Ubuntu のパッケージを以下のように簡単に導入することができます.

ただし,このままだと一般ユーザーの権限で Bluetooth が使えません.Ubuntu Server に登録した一般ユーザー hyt から Bluetooth を利用するには以下の作業を行う必要があります.

また,ネットワーク経由で音を転送するには,以下のような設定を /etc/pulse/default.pa に追加する必要があります.

再起動すれば終了です.

使い方(テスト)

使い方は以下の通りです.まず,コンソールにログインしておきます(今回は一般ユーザー hyt でログインしているとします).

まず,pulseaudio server を起動します.

次に,Bluetooth スピーカーを接続します.初めて接続する場合は以下のような感じになります.なお,ubts は Ubuntu Server のサーバー名です.

Bluetooth デバイスの探索モードに scan on で切り替わりますので,あらかじめ Bluetooth スピーカーをペアリングモードにしておけば,しばらく待てば該当のスピーカーが発見されるはずです.今回の場合は Sony の hear go 2 (SRS-HG10) が発見されたことが分かります.

いったん見つかれば,scan off にした方が良いと思います.そうでないとその後もずっと探索が行われ,下手をするとつなぎたいデバイスがどれかわからなくなってしまいます.

次に,Bluetooth スピーカを接続します.一般には pair でペアリングして,connect で接続するという手順だと思いますが,いきなり connect でも大丈夫のようです.

接続に失敗する場合は pulseaudio がきちんと起動できていないことが多いです.この場合は,

のようにして pulseaudio を起動し直したあと,再びスピーカーの接続作業を行って下さい.

なお,Bluetooth スピーカーの信頼(trust) は勧めません.信頼すると,Bluetooth が有効な場合,Bluetooth スピーカーの発見と同時に接続が試行されますが,pulseaudio が起動していないと接続に失敗し続けることになってしまうからです(pulseaudio をサービスとして起動すれば良いのかも知れませんが,これは推奨されていません).一応,サービスとして起動するには,/etc/systemd/system/pulseaudio.service を

のように記述し,

のようにすれば,ユーザー pulse で pulseaudio が起動(/etc/dbus-1/system.d/pulseaudio-system.conf 参照)します.また,system.pa を適当に書き換えれば pulseaudio-bt プラグインも有効にできますが,あまりメリットはないと思います.Bluetooth 機器の接続操作のためにサーバーにログインしないといけないので,それならばそのログインユーザーの権限で pulseaudio を起動すれば良いだろってなるからです.

最後に,実際に音が鳴るかどうかは以下のようにして試すことができます.

接続コーデックのチェック

今回使っている pulseaudio-bt プラグインは現状,HWA を除く全てのコーデックに対応しているものなのですが,実際にどのコーデックが使われているのかは接続後,以下のようにpactl コマンドを使えば簡単に確かめることができます.

bluetooth.a2dp_codec = “LDAC” とありますので,期待通り LDAC で接続されていることが分かります.

どのような順番でコーデックが選択されているのかが知りたい場合は,以下のように hcidump コマンドが使うことで分かります.

手持ちのBluetoothヘッドホンがA2DPプロファイルで使えるコーデックのうち、どのコーデックに対応しているのかをWiresharkで調べたお話。

なお,hcidump コマンドは,Ubuntu の場合,bluz-hcidump に含まれています.したがって,実際に使う場合は以下のようにします.

音量の調整

音量の調整も pactl コマンドで行えます.以下の通りです.

ここで,set-sink-volume 3 としているのは,上で示した pactl list sinks で hear go 2 の sink が3番だからです.

Volumio との接続

これは以前の記事

Volumio を pulseaudio に対応させる備忘録で...

を参考にしてください.

まとめ(雑感)

ここまでの内容を見ると分かると思いますが,要するにこれ,ネットワーク経由で使えるpulseaudio-bluetooth サーバーです.つまり,ネットワーク経由で汎用的に使える Bluetooth スピーカーに出力できるミキサーを作ったってことです.Volumio はこのサーバーに音を出力している(出力できる)ってだけ.

で,実際,作ってみると,

意外と遅延しない

ですし,

Bluetooth スピーカーとサーバーの位置が意外と離れてても大丈夫

です.

もちろん遅延については組み合わせる Bluetooth スピーカーによると思いますし,ゲームができるほどではもちろんないんですが,Volumio と組み合わせて使う場合だと,再生ボタンを押したのとほぼ同時に曲の再生が始まります.

また,スピーカーとサーバーの位置についても使われている Bluetooth 機器の ver. とか家の構造によると思いますが(実際,使っているのは NUC7PJYH なので,Bluetooth の ver. は 5 と最新),自宅1階の居間からほぼ家中どこにでも届きます.

こういう製品,意外とあるようでない.もちろんいまのままだとコマンドラインでしか制御できないので,一般的に使えるようなものじゃないですけど,これは Web インターフェースを被せれば良いだけの話で……あっても良いんじゃ無いのかなぁ……こういう製品,って思うんですが,なんで無いんでしょうねぇ?

以上

スポンサーリンク
large rectangle advertisement
スポンサーリンク
large rectangle advertisement