Raspberry Pi 3とポタアンで音楽を再生するネットワークオーディオプレーヤーを作った(Bluetooth編)
えっ?BTってBUCK-TICKじゃないの?
前回、iOSデバイスからRaspberry Pi 3(RPi3)にAirPlay経由で音楽配信アプリの音声を再生するようにしたのだが…
前回の実験に用いたiOSデバイスは息子氏の所有物でオッサンiOSデバイス持ってません。
ということで、前回途中で挫折したBluetooth経由での再生にチャレンジだ。
構成
こんな感じ。
デスクトップ環境構築
色々と試してみたところ、Bluetooth経由でRPi3に音声を再生させるにはどうもデスクトップ環境が必要っぽい*1。今回ベースにしている「Raspbian Jessie LITE」はGUI環境がインストールされていないので、必要最小限を手動でインストールしていく。ということで、最初から「Raspbian Jessie」をSDカードに書き込んでいる人は不要。
以降の手順は次の記事を参考に今回やりたいための必要最低限の手順を記載したもの。
[GUIDE] Raspbian Lite with RPD/LXDE/XFCE/MATE/i3/Openbox/X11 GUI - Raspberry Pi Forums
SDカード領域拡張
$ sudo raspi-config
"1 Expand Filesystem"->"Ok"->"Finish"->"Yes"でリブート
各種パッケージ導入
$ sudo apt-get install --no-install-recommends xserver-xorg $ sudo apt-get install --no-install-recommends xinit $ sudo apt-get install mate-desktop-environment-core $ sudo apt-get install lightdm
今回はデスクトップ環境として「MATE Desktop Environment (MATE)」を選択した。
自動ログイン設定
$ sudo raspi-config
"3 Boot Options" -> "B4 Desktop Autologin Desktop GUI"->"Finish"->"Yes"でリブート
これをしないとどうも上手くいかなかった。
A2DP設定
続いては、Bluetooth経由で音楽を再生するA2DP(Advanced Audio Distribution Profile)の設定。
Bluetooth有効化
当初Bluetoothなんて使う予定がなかったので無効化したのだが、今回有効化してやらないといけない。無効化してない人は以下の手順は不要。
$ sudo systemctl enable hciuart $ sudo systemctl enable bluetooth $ sudo vi /boot/config.txt
- /boot/config.txt
# Dsiable bluetooth #dtoverlay=pi3-disable-bt
$ sudo reboot
以降の手順は次の記事を参考に試行錯誤した結果。
A2DP audio streaming using Raspberry PI (Raspbian Jessie) · GitHub
各種パッケージ導入
$ sudo apt-get install bluez-tools pulseaudio-module-bluetooth python-gobject python-gobject-2 $ sudo usermod -a -G lp pi
PulseAudio設定
Bluetooth経由で受信した音声データをUSB-DACに出力する設定。
$ sudo vi /etc/pulse/daemon.conf
- /etc/pulse/daemon.conf
resample-method = trivial default-sample-rate = 48000 enable-remixing = no enable-lfe-remixing = no default-sample-format = s32le default-sample-channels = 2 exit-idle-time = -1
上記記事のままの設定だとノイズがのるのでパラメータを適当に変えている。ここの設定を変更すると音質が変わるらしいが、DA-10に任せるので今回はこだわらない。
Bluetooth設定
Androidデバイス(Bluetoothで接続してくる機器)から、A2DPデバイスとして検出される為の設定。
$ sudo vi /etc/bluetooth/audio.conf
- /etc/bluetooth/audio.conf
[General] Class = 0x20041C Enable = Source,Sink,Media,Socket
ファイルを新規作成して上記を記載。
$ sudo vi /etc/bluetooth/main.conf
- /etc/bluetooth/main.conf
Name = raspberrypi Class = 0x20041C
上記内容を末尾に追記。
$ sudo reboot
ここまででリブート。
この時点でBluetoothでRPi3をA2DPデバイスとして検出できるようになった。あと、起動すると自動的にログインもしている。
ペアリング登録
いよいよAndroidデバイスとのBluetooth接続設定。
$ bluetoothctl
以降はbluetoothctlのコマンド操作となる。"[bluetooth]# "がbluetoothctlの入力プロンプトだ。
[bluetooth]# agent on [bluetooth]# default-agent [bluetooth]# discoverable on [bluetooth]# scan on
これでBluetoothデバイスからスキャンすると発見できるようになる。
[NEW] Device XX:XX:XX:XX:XX:XX Xperia Z3 [CHG] Device XX:XX:XX:XX:XX:XX Connected: yes (←入力) Request confirmation [agent] Confirm passkey 043906 (yes/no): yes Authorize service 0000110d-0000-1000-8000-00805f9b34fb (yes/no): yes (←入力)
初めて接続する機器はペアリング認証が必要になるので「yes」を入力する。同様に、接続する機器側でも認証を行う。
この後、接続シーケンスが始まるが、許可を求められるのでRPi3側で「yes」を入力する。
これで繋がるようになるのだが、ペアリング後もBluetooth接続時に毎回許可を求められるのは非常に面倒なので、信頼するデバイスとして登録する。
[bluetooth]# trust XX:XX:XX:XX:XX:XX (←今までに出力された接続対象機器のMACアドレス) [CHG] Device XX:XX:XX:XX:XX:XX Trusted: yes Changing XX:XX:XX:XX:XX:XX trust succeeded [bluetooth]# exit
これで登録済の機器側で登録解除しない解除しないかぎりは自動接続となる。
音声出力設定
RPi3と認証済機器がBluetooth接続後に、音声デバイスと紐付けることによってはじめてBluetooth経由で音が出力されるようになる。以下はその為の設定。
$ sudo vi /etc/udev/rules.d/99-input.rules
KERNEL=="input[0-9]*", RUN+="/home/pi/a2dp-autoconnect"
これでBluetooth接続時に"/home/pi/a2dp-autoconnect"が実行されるようになる。
$ vi /home/pi/a2dp-autoconnect
以下のリンク先のファイルを基に実行スクリプトを作成する。
A2DP audio streaming using Raspberry PI (Raspbian Jessie) · GitHub
# Find the right sink with `pactl list sources short`. -PA_SINK="alsa_output.0.analog-stereo" +PA_SINK="alsa_output.usb-D___M_Holdings_Inc._DA-10-00-DA10.analog-stereo.monitor"
接続先の音声デバイス名に「pactl list sources short」で表示される名称を指定する。
$ chmod +x /home/pi/a2dp-autoconnect
最後に実行権限を付与すれば完了だ。
$ sudo reboot
接続してみる
Bluetooth接続をして、AmazonMusicを起動。
ガガ様が歌声がRPi3経由で聴こえてまいりました。
このように、通常のBluetooth接続のヘッドホンやスピーカーと同じく、Androidデバイス上のサウンドを全てRPi3で再生できるので
Bluetooth最強。
なお、肝心の音質であるが、DLNA経由でRPi3側で再生させるのよりも音質はよろしくない。が、手持ちの音源と同じ環境で手持ちでない音源(Youtubeも含む)をラジオ感覚でシームレスに楽しめることができるので充分満足だ。
Raspberry Pi Raspberry Pi3 ModelB
- 出版社/メーカー: RASPBERRY-PI
- メディア:
- この商品を含むブログを見る
- 出版社/メーカー: KSY
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る
東芝 microSDHC 16GB EXCERIA 48MB/s UHS-I Class10 TOSHIBA THN-M301R0160 海外向パッケージ品 [並行輸入品]
- 出版社/メーカー: 東芝
- メディア: エレクトロニクス
- この商品を含むブログを見る
waves Raspberry Pi 3 Model B 用 ケース ヒートシンク 3点付 Pi2 共用 国内発送 黒
- 出版社/メーカー: waves(ウェイブス)
- メディア: エレクトロニクス
- この商品を含むブログを見る
*1:PulseAudio関連だと思われる