Raspbian を LDAC と AAC に対応させる備忘録

Photo by hyt.

Raspbian を LDAC と AAC に対応させる備忘録です.

はじめに

Raspbian on Raspberry pi zero WH を LDAC, apt-X HD, apt-X, AAC などの高音質なコーデックに対応させてみた覚え書きです.

Ubuntu とか Fedora などの x86 な環境だとパッケージが

Adds Sony LDAC, aptX, aptX HD, AAC codecs (A2DP Audio) support to PulseAudio on Linux - EHfive/pulseaudio-modules-bt

に公開されているので,これをインストールするだけで済むのですが,残念ながら arm な Raspbian 向けのものはありません.しかし,

にソースコードは公開されていますので,これを利用して使えるようになるまでの覚え書きです.なお,Raspbian 以外の例えば armbian とかでもところどころ適切に読み替えすれば同じように対応できるとは思いますが,実際に試してはいません.また,以下の手順は Rasbian の導入と初期設定から記していますので,導入済みの方は読み飛ばして下さい.

Raspbian の ver. と microSD への書き込み

使ったのは本記事執筆時点の最新の Raspbian Buster Lite のイメージ(2020年2月13日公開のもの)です.Buster なら以前のものでもアップデートさえすれば大丈夫だと思いますが,Buster 以前の Jessie とかのものだと pulseaudio とか Bluez の ver. が古くてダメだと思います.

なお,以下の手順は全て elementary OS (Ubuntu) のものです.Windows とか MacOS とかの場合をお知りになりたい方は色々なところに手順が紹介されていますので,そちらを参照されてください.

まず,Raspbian のイメージを取得します.念の為チェックサムも確認しています.

次に,microSD に Raspbian のイメージを書き込みますが,書き込み先を間違わないようにして下さい(私の場合は /dev/sdb ですがこれはシステムによって色々だと思います).

Raspbian の初期設定

Raspberry pi zero WH にキーボードやモニターを接続するのは面倒なので,ヘッドレスのまま作業できるよう USB OTG 経由でアクセスできるように設定します.

elementary OS の場合は標準のファイルマネージャーから以下のように microSD の boot パーティションを簡単に /media/(userhomedir) 以下にマウントできますが,boot パーティションは FAT16 フォーマットなのでその他の OS の場合も簡単に参照できると思います.

USB-OTG でアクセスできるようにするために,/boot/config.txt に dtoverlay=dwc2 を, /boot/cmdline.txt に modules-load=dwc2,g_ether を以下のように追記します.また,空の /boot/ssh を作り,ssh 経由でアクセスできるよう設定します.

Raspbian のイメージを書き込んだ microSD カードを Raspberry pi zero WH に挿し,

Photo by hyt.

のように PC に接続し boot させます.なお,このとき Raspberry pi zero WH 側は電源供給用ではなく,HDMI ポートに近い方の microUSB ポートを使って下さい.

しばらく待ってから dmesg でカーネルからのメッセージを参照すると,

のような感じで USB-OTG で Ethernet の認識が行われていることが確認できます(私の場合は enp0s20u2 という名前で認識されている).この Ethernet 経由で Raspbian がインターネットと通信できるように以下のように設定します.

少し待ってから,

のようにすれば,Raspbian の IP アドレスが分かります(arp-scan が入ってない場合は apt install arp-scan のような感じで入れて下さい).ダメな場合は Raspberry pi zero WH の電源を入れ直し,それでもダメな場合は設定全体を見直して下さい.

最後に,ssh で接続し,Raspbian のアップデートと raspi-config で最低限の初期設定を行います.

私の場合は raspi-config で,

  1. hostname を rbpz1 に変更
  2. Timezone を Asia/Tokyo に変更
  3. Wi-Fi の有効化

を行いました.

必要な標準パッケージの導入

初期設定後,再起動してから,最低限必要な標準パッケージを以下の通り Raspbian に導入します.

fdk-aac の導入

次は fdk-aac ライブラリを導入します.元ページによると AAC-LC に対応させるためだけにしか使ってないとのことで,導入は OPTIONAL です.なお,Raspberry pi zero WH の場合,コンパイルにはかなり長時間(1時間程度)はかかります.

ldacBT/libldac の導入

LDAC に対応させるためのライブラリを導入します.これはそれほどの時間はかかりません.なお,元サイトは以下の通りです.

A dispatcher for AOSP libldac . Contribute to EHfive/ldacBT development by creating an account on GitHub.

pulseaudio-modules-bt の導入

今回の主目的である pulseaudio-modules-bt を導入します.導入手順は元サイト

にある通りですが,Raspbian Buster の場合,pulseaudio が ver12.2 であることに注意する必要があります(cmake -DFORCE_LARGEST_PA_VERSION=ON … は pulseaudio 最新版向けのコンパイルオプションです.これを設定してもコンパイルは通りますが,実行時エラーで停止します).また,出来る限り全てのコーデックに対応するようコンパイルオプションを設定しています.

ofono パッケージの導入(OPTIONAL)

必須ではないのですが pulseaudio のエラーメッセージが気になる場合は,ofono パッケージを以下の通り導入します.

なお,最後の ofono.conf ファイルの設定は pulse-access グループからの ofono へのアクセスを許可する設定です.

実行許可と自動起動の設定

一般ユーザーである pi が bluetooth と pulseaudio にアクセスできるように設定します.

また,/usr/local/lib 以下のパッケージを適切に検索できるようにライブラリのキャッシュを設定し直します.また,念の為,再起動します.

再起動後,更に,ログイン時に pulseaudio が自動実行されるよう設定します.なお,起動時にエラーが出ないよう,pulseaudio の起動設定を一部変更します.

使い方とトラブルシューティング

使い方については,過去の記事,

をご覧ください.

なお,うまく動かない場合は,以下をチェックしてみて下さい.

まず,pulseaudio-modules-bt の module が以下のように適切に読み込まれているかどうかは以下のようにすれば確かめることが出来ます.

もし読み込まれていない場合は,sudo ldconfig でライブラリのキャッシュを再作成してみて下さい.ライブラリの読み込みが適切に行われているなら,Bluetooth スピーカー等への接続は行えるはずです.

Bluetooth スピーカー等に接続はできるけれど,すぐ接続が切断される場合は,

として再度接続を試してみると良いと思います.もし,接続された瞬間にエラーで pulseaudio が停止する場合は,pulseaudio-module-bt のコンパイルオプションを誤って最新版の pulseaudio に対応したものにしている可能性があります(上記 pulseaudio-module-bt の導入の節を再度ご覧ください).

この場合は pulseaudio-module-bt を適切なコンパイルオプションで再コンパイルして導入し直してやればエラーは出なくなるはずです.

なお,Bluetooth スピーカー等によっては相性問題もあるかも知れませんが,少なくとも私の持っている機器だとどれも問題なく使えています.

おわりに

上記は Raspbian Buster Lite での手順ですが,デスクトップ環境等含まれませんのでこのままだと LDAC とか AAC なんかが使えてもあまり面白くはありません.

実は,こんなことやろうと思ったのは,Raspberry pi zero WH を LDAC, AAC, apt-X HD に対応した USB to Bluetooth トランスミッターとして使おうと思ったからです.逆に言うとだから非力だけど小さな Raspberry pi zero WH を使った訳です.

という事で,次回は今回設定した Raspberry pi zero WH を USB to Bluetooth トランスミッターとして使う方法についてご紹介したいと思います.ちなみに WALKMAN はこれと同じこと出来そうで出来ません.この辺りについては,過去記事,

WALKMAN NW-A55 って多機能だけどお目当ての機能は...

をご覧ください.

以上

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