Musik streamen per Bluetooth (A2DP) auf den Raspberry Pi
Anmerkung vorneweg:
Audiostreaming per A2DP ist eine fummelige Angelegenheit. Viele Nutzer des Pi's berichten, die gleichen im Netz kursierenden Anleitungen befolgt zu haben ohne, einheitlichen Erfolg. Mein Pi wollte zuerst auch keine Streams abspielen. Irgendwann ging es merkwürdigerweise. Die gleiche Konfiguration habe ich bei einem anderen Pi angewendet und dort funktioniert sie merkwürdigerweise nicht. Daher muss an dieser Stelle einfach ausprobiert werden, ob es funktioniert.
Um von vorne herein Fehler auszuschließen, muss festgestellt werden ob der verwendete Bluetooth-Dongle auch korrekt vom System erkannt wird. Dazu tippt man folgendes ins Terminal:
lsusb
Dieses Kommando listet alle angeschlossenen USB-Geräte auf. Hier sollte euer Bluetooth Stick auftauchen. Ist der von mir verwendete Bluetooth Stick von Hama verwendet worden wird er bspw. als
Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) erkannt.
An erster stelle installieren wir die nötigen Pakete:
sudo apt-get install bluez blueman bluetooth bluez-utils pulseaudio-module-bluetooth python-gobject python-gobject-2
Damit unser Benutzer
Pi Zugriff auf die Bluetoothdienste hat, muss er einer Gruppe namens
lp zugeordnet werden.
sudo usermod -a -G lp pi
Bluetooth hat viele Einsatzmöglichkeiten. A2DP ist eine von ihnen und muss vor der Nutzung erst konfiguriert werden:
sudo nano /etc/bluetooth/audio.conf
Es öffnet sich der Texteditor. Oben befindet sich ein Abschnitt in dem
[General] steht. Direkt in die freie Zeile darunter muss folgenes geschrieben werden:
Enable=Source,Sink,Media,Socket
Als nächstes muss der sogenannt
Resample Algorythm configuriert werden. Folgende Datei im Texteditor öffnen...
sudo nano /etc/pulse/daemon.conf
und die Zeile suchen
resample-method = speex-float-3
und direkt dahinter einen Absatz erstellen und folgenden Inhalt hinzufügen:
resample-method = trivial
Nun muss noch die folgende Datei geändert werden:
sudo nano /etc/pulse/system.pa
Dort muss hinter die vorhandene Zeile
load-module module-udev-detect
der Zusatz
tsched=0 geschrieben werden, so dass die Zeile wie folgt aussieht:
load-module module-udev-detect tsched=0
Damit ist auch schon das Gröbste geschafft. Was wir jetzt noch brauchen ist ein Skript, dass automatisch das Audiosignal des verbundenen Smartphones an den Pi leitet. Dazu müssen wir diese Datei öffnen...
sudo nano /etc/udev/rules.d/99-input.rules
... und folgendes reinschreiben:
SUBSYSTEM=="input", GROUP="input", MODE="0660"
KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/bluetooth"
Im letzten Schritt müssen wir noch das Skript an sich erstellen. Dafür erstellen wir einen neuen Ordner:
sudo mkdir /usr/lib/udev
und wechseln direkt in das eben erstellte Verzeichnis:
cd /usr/lib/udev
Nun erstellen wir eine Datei mit dem Namen
Bluetooth:
sudo nano bluetooth
Folgendes einfügen
#!/bin/sh
#!/bin/bash
#change if you don't use default analog audio out.
#THIS DIDN'T WORK FOR MY PI SO I ADDED A amixer COMMAND BELOW
AUDIOSINK="alsa_output.platform-bcm2835_AUD0.0.analog-stereo"
echo "Executing bluetooth script...|$ACTION|" >> /var/log/bluetooth_dev
ACTION=$(expr "$ACTION" : "\([a-zA-Z]\+\).*")
if [ "$ACTION" = "add" ]
then
# Turn off BT discover mode before connecting existing BT device to audio
hciconfig hci0 noscan
# set the audio output to the analog
# COMMENT THIS LINE OUT IF YOU WANT TO OUTPUT AUDIO THROUGH HDMI
amixer cset numid=3 1
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
if [ "$ACTION" = "remove" ]
then
# Turn on bluetooth discovery if device disconnects
sudo hciconfig hci0 piscan
fi
Nachdem die Datei gespeichert wurde machen wir die Datei
bluetooth ausführbar:
sudo chmod 755 bluetooth
Dieses Skript verbindet lediglich Smartphones, die vom Pi als vertrauenswürdig eingestuft wurden. Dazu muss aber das Smartphone erst einmal den Pi finden. Standartmäßig ist die Sichtbarkeit des Bluetooth-Adapters aber deaktiviert. Mit folgendem Kommando wird der Pi für Bluetoothgeräte sichtbar:
sudo hciconfig hci0 piscan
Über die GUI kann nun am einfachsten das ersonnene Bluetoothdevice als vertrauenswürdiges Gerät gespeichert werden.
startx
Nun unter
Einstellungen --> Bluetooth-Manager mit einem Rechtsklick in die Liste der vertrauensvollen Geräte aufnehmen.
Weiter zu
Teil 1
des Tutorials in dem aufgezeigt wird, wie man Apple's Airplay auf dem
Raspberry Pi installiert um Musik direkt aus iTunes oder iOs auf den Pi
zu streamen oder zu
Teil 3 in dem erklärt wird, wie man über Bluetooth Musik auf den Pi streamen kann.
Auch besteht die Möglichkeit den Vorgang über ein NFC-Tag zu automatisieren.