はじめに
Raspberry piとBluetooth接続したスマホの音楽再生をAVRCPで制御する方法のメモ
環境
- Raspberry Pi3(Raspbian Jessie Lite)
- Python 2.7.9
- bluez5
- スマホ(androidでもiPhoneでも)
前準備
https://gist.github.com/oleq/24e09112b07464acbda1
http://blog.bnikka.com/raspberrypi/raspberrypibluetooth.html
上記URLを参考に、RaspberryPiをBluetoothオーディオ(A2DP)レシーバ化し、スマホから音楽再生できる状態にしておく
(※A2DPで接続しないとAVRCPが使えないみたいだが、もしかするとAVRCPのみで使う方法もあるかも?)
AVRCPで制御してみる
dbus-pythonを使ったデモ
BT_MediaPlayer.py
# !/usr/bin/python
import dbus
SERVICE_NAME = "org.bluez"
ADAPTER_INTERFACE = SERVICE_NAME + ".MediaPlayer1"
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object(SERVICE_NAME, "/"),
"org.freedesktop.DBus.ObjectManager")
objects = manager.GetManagedObjects()
if __name__ == '__main__':
for path, ifaces in objects.iteritems():
adapter = ifaces.get(ADAPTER_INTERFACE)
if adapter is None:
continue
print path
player = bus.get_object('org.bluez',path)
BT_Media_iface = dbus.Interface(player, dbus_interface=ADAPTER_INTERFACE)
break
while 1:
s = raw_input()
if s == 'quit':
break
if s == 'play':
BT_Media_iface.Play()
if s == 'pause':
BT_Media_iface.Pause()
if s == 'stop':
BT_Media_iface.Stop()
if s == 'next':
BT_Media_iface.Next()
if s == 'pre':
BT_Media_iface.Previous()
if s == 'show':
track = adapter.get('Track')
print 'Title: ' + track.get('Title')
print 'Artist: ' + track.get('Artist')
print 'Album: ' + track.get('Album')
print 'Genre: ' + track.get('Genre')
print 'NumberOfTracks: ' + str(track.get('NumberOfTracks'))
print 'TrackNumber: ' + str(track.get('TrackNumber'))
print 'Duration: ' + str(track.get('Duration'))
上記のコードを実行すると入力待ち状態となるので、コマンドを入力する
使用可能なコマンドは以下の通り
- quit : プログラム終了
- show : 曲情報の表示
- play : 再生
- pause : 一時停止
- stop : 停止
- next : 次の曲
- pre : 前の曲
うまくいけば接続したスマホのパスが表示され、各種コマンドで音楽再生を制御できる
下記はshowコマンドを実行した例
参考
http://qiita.com/eggman/items/339a9c9b338634ac27a5
https://www.raspberrypi.org/forums/viewtopic.php?t=111486&p=766936