RaspberryPIをBluetoothオーディオレシーバにしてみた。
iPhone、パソコン(MacBook等)からの音楽再生時に、
わざわざスピーカに有線でつなぐのはわずらわしい。
RaspberryPiをBluetoothオーディオレシーバにして、
ワイヤレスで音楽再生ができるようにする。
今回やりたいのは、下図な感じ。
iPad,iPhoneから、Bluetoothで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への対応も可能とのことなので、これについても今後挑戦したい。
コメント
こんにちは
bluetooth-agent が使えなくなったと思うのですが、どのように変更すればいいでしょうか?