RaspberryPiをBluetoothオーディオレシーバにしてみた

Pocket

RaspberryPIをBluetoothオーディオレシーバにしてみた。

iPhone、パソコン(MacBook等)からの音楽再生時に、
わざわざスピーカに有線でつなぐのはわずらわしい。
RaspberryPiをBluetoothオーディオレシーバにして、
ワイヤレスで音楽再生ができるようにする。
RaspberryPi
今回やりたいのは、下図な感じ。
iPad,iPhoneから、BluetoothでRaspberryPiに接続し、音楽再生を行う。
RaspberryPiオーディオレシーバのサムネール画像
RaspberryPiは、Bluetoothデバイスを持っていないので、
USB Bluetoothアダプタが必要になる。
RaspberryPiのオーディオ出力は、今回はオンボードのサウンドデバイス(ALSA)を利用する。
RaspberryPiのアナログ出力(ステレオミニ)とスピーカを、オーディオケーブルで接続する。
USB BluetoothアダプタをRaspberryPiのUSBポートに装着し、
必要なファイルのインストールを始める。
$ sudo apt-get install bluez pulseaudio-module-bluetooth python-gobject python-gobject-2
pi というユーザが、Bluetoothデーモンにアクセスできるよう、
lp というグループに pi を追加する。
$ sudo usermod -a -G lp pi
A2DPが利用できるように、Bluetoothの設定を行う。
[General]の項目に、以下の記述を追加。
$ sudo vi /etc/bluetooth/audio.conf
[General]
Enable=Source,Sink,Media,Socket
pulse audioのサンプリング関連の設定を行う。
$ sudo vi /etc/pulse/daemon.conf
; resample-method = speex-float-3
 resample-method = trivial
Bluetoothデバイスが接続された際に、自動で設定が行われるように、
以下のスクリプトを作成。
$ sudo vi /etc/udev/rules.d/99-input.rules
SUBSYSTEM==”input”, GROUP=”input”, MODE=”0660″
KERNEL==”input[0-9]*”, RUN+=”/usr/lib/udev/bluetooth”
$ sudo vi /usr/lib/udev/bluetooth
#change if you don’t use default audio out
AUDIOSINK=”alsa_output.platform-bcm2835_AUD0.0.analog-stereo”
echo “[`date`]” >> /var/log/bluetooth_dev
echo “Executing bluetooth script…|$ACTION|” >> /var/log/bluetooth_dev
ACTION=$(expr “$ACTION” : “\([a-zA-Z]\+\).*”)
if [ “$ACTION” = “add” ]
then
   for dev in $(find /sys/devices/virtual/input/ -name input*)
   do
      if [ -f “$dev/name” ]
      then
         mac=$(cat “$dev/name” | sed ‘s/:/_/g’)
         bluez_dev=bluez_source.$mac
         sleep 1
         CONFIRM=`sudo -u pi pactl list short | grep $bluez_dev`
         if [ ! -z “$CONFIRM” ]
         then
            echo “Setting bluez_source to:  $bluez_dev” >> /var/log/bluetooth_dev
            echo pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> /var/log/bluetooth_dev
            sudo -u pi pactl load-module module-loopback source=$bluez_dev sink=$AUDIOSINK rate=44100 adjust_time=0 >> /var/log/bluetooth_dev
         fi
      fi
   done
fi
$ sudo chmod 774 /usr/lib/udev/bluetooth
ここで、再起動。
 
 
$ sudo reboot
 
 
 
起動したら、いよいよBluetoothデバイスとペアリングを行う。
RaspberryPiに以下のコマンドを投入。
 
 
$ sudo hciconfig hci0 piscan
 
$ bluetooth-agent 1234
 
この後、iPhone等のBluetoothデバイスから、Bluetooth接続を行う。
ペアリングができたら、音楽を再生してみて、音が出ればOK。
もし、音が出なければ、RaspberryPiのオーディオ出力が
HDMIを向いていることがあるので、アナログ出力となるよう設定。
$ amixer cset numid=3 1
$ amixer set Master 100%
このBluetoothレシーバ機能をサービス化するために、以下の設定を行う。
OS再起動後も、自動起動できるようになる。
$ sudo vi /etc/init.d/bluetooth-agent
#! /bin/sh
# /etc/init.d/bluetooth-agent
USER=root
HOME=/root
export USER HOME
case “$1” in
 start)
 echo “setting bluetooth discoverable”
 sudo -u kei amixer cset numid=3 1
 sudo -u kei amixer set Master 100%
 sudo hciconfig hci0 piscan
 start-stop-daemon -S -x /usr/bin/bluetooth-agent -c pi -b — 0000
 echo “bluetooth-agent startet pw: 0000”
 ;;
stop)
 echo “Stopping bluetooth-agent”
 start-stop-daemon -K -x /usr/bin/bluetooth-agent
 ;;
*)
 echo “Usage: /etc/init.d/bluetooth-agent {start|stop}”
 exit 1
 ;;
esac
exit 0
$ sudo chmod 755 /etc/init.d/bluetooth-agent
$ sudo update-rc.d bluetooth-agent defaults
$ sudo /etc/init.d/bluetooth-agent start
以上で完了だ。
少し手順は多かったが、便利になった。
これまで、BELKINミュージック レシーバー
を使ってきたが、音質は大差ない。
操作感として、ボリューム操作やストップ/スタートのタイムラグがRaspberryPiの方が少し大きいように感じる。
RaspberryPiに収容することで、配線等もとてもすっきりする。
消費電力もかなり少ないであろう。
AirPlayへの対応も可能とのことなので、これについても今後挑戦したい。


コメント

  1. もみじ より:

    こんにちは
    bluetooth-agent が使えなくなったと思うのですが、どのように変更すればいいでしょうか?