RaspberryPiをBluetoothオーディオレシーバにする方法|簡単にワイヤレスオーディオ

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デバイスが接続された際に、自動で設定が行われるように、
以下のスクリプトを作成。
参考:Raspberry Pi A2DP audio sink

$ 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 が使えなくなったと思うのですが、どのように変更すればいいでしょうか?