Wäre es nicht schön wenn man seine Musik in jeden Raum mitnehmen könnte? Bluetooth Lautsprecher machen das möglich. Ungleich schwerer wird es aber wenn die Musik von einem Raspberry Pi aus an den Lautsprecher geschickt werden soll…
Zunächst ein mal gibt es unter Linux ein fülle an Sound- und Bluetooth- Bibliotheken. Alle mit unterschiedliche Funktionen, Kompatibilitäten und Abhängigkeiten.
Das den meisten Distributionen zu Grunde liegende Audiosystem ist Advanced Linux Sound Architecture (ALSA). Dies stellt die Kernelmodule für die Audiohardware bereit. Darauf aufbauend gibt es verschiedene Soundserver wie z.B. PulseAudio(PA) oder ähnliche.
Sowohl ALSA als auch PA stellen Erweiterungen für Bluetooth bereit. Da man den Overhead auf eingebetteten Systemen gerne klein hält versuche wir hier den Weg direkt über ALSA.
Blue-ALSA stellt eine Kopplung zwischen dem Bluetooth Stack BlueZ und ALSA wieder her, welche mit BlueZ 5 eingestellt wurde.
Setup
- Raspberry Pi
- Bluetooth Lautsprecher
Installation
Zunächst müssen die Abhängigkeiten von Blue-Alsa erfüllt werden:
sudo apt-get update sudo apt-get install -y libasound2-dev dh-autoreconf libortp-dev bluez pi-bluetooth bluez-tools libbluetooth-dev libusb-dev libglib2.0-dev libudev-dev libical-dev libreadline-dev libsbc1 libsbc-dev
danach kann Blue-Alsa gebaut werden:
git clone https://github.com/Arkq/bluez-alsa.git cd bluez-alsa autoreconf --install mkdir build && cd build ../configure --disable-hcitop --with-alsaplugindir=/usr/lib/arm-linux-gnueabihf/alsa-lib make && sudo make install
Damit BlueAlsa nicht jedes mal gestartet werden muss legen wir einen Service dafür unter /lib/systemd/system/bluezalsa.service an:
[Unit] Description=BluezAlsa proxy Requires=bluetooth.service After=bluetooth.service [Service] Type=simple User=<user> Group=audio ExecStart=/usr/bin/bluealsa --disable-hfp [Install] WantedBy=multi-user.target
Die Option –disable-hfp verhindert, dass sich Lautsprecher mit den Hands Free Protocol verbinden und die Audioqualität verschlechtern.
Der Service wird mit folgenden Befehlen aktiviert:
sudo systemctl daemon-reload sudo systemctl enable bluealsa.service
Die Verbindung zum Lautsprecher kann z.B. mittels bluetootctl hergestellt werden:
bluetoothctl [bluetooth]# power on [bluetooth]# agent on [bluetooth]# default-agent [bluetooth]# scan on [NEW] Device xx:xx [bluetooth]# pair xx:xx [bluetooth]# trust xx:xx #oder [bluetooth]# connect xx:xx [bluetooth]# exit
Die Verwendung von trust erlaubt ein automatisches Verbinden während connect nur eine einmalige Verbindung herstellt.
Nun kann über den Bluetooth LautsprecherSound abgespielt werden.
aplay -D bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp funky.wav
Um den Bluetooth Lautsprecher als Standard Ausgabe über A2DP festzulegen muss im home-Verzeichnis noch eine .asoundrc angelegt werden:
# Specify the parameters of the Bluetooth connection defaults.bluealsa { interface "hci0" # host Bluetooth adapter device "xx:xx:x:x:xx:x" # Bluetooth headset MAC address profile "a2dp" }
Hi, ich habe hierfür das Volumio-plugin probiert.
Rpi 3, Volumio 2.348 neu installiert.
Plugin laut Anleitung installiert, also erst den Ordner ui kopiert und dann installiert. (https://volumio.org/forum/bluetooth-speaker-plugin-t7432.html)
Es wird dann auch alles grün, nur leider kommt das Fenster „Bluetooth Devices“ erst gar nicht.
Hab ich hier was vergessen?
Hallo Michael,
hast wohl alles richtig gemacht, sowie ich das verstanden habe liegt es an dem Plugin weil die Node.js Version vom volumio neuer als die vom Plugin version ist. Das ist echt doof weil ich mich auch für diese Lösung sehr interresiere.
MfG
Hallo Michael,
im Grunde brauchst Du auch die GUI nicht dafür damit es läuft wichtig ist nur dass Du die Geräte koppelst von einer SSH Console aus. Wie hier oben beschrieben und dann nur noch zwei Sachen machst genau so wie es da oben steht die .asoundrc anlegen mit der Mac Addresse deines Lautsprechers. Nun um das Ganze dauerhaft, aber nicht volumio upgrade sicher zu haben musst nur noch die template dateien für mpd.conf editieren und erweitern um:
audio_output {
type „alsa“
name „Speaker Name goes Here“
device „bluealsa:HCI=hci0,DEV=XX:XX:XX:XX:XX:XX,PROFILE=a2dp“
mixer_type „software“
}
sobald Du das gemacht hast und mpd neugestartet ist, bzw kannst dann den Wizard starten und durchlaufen ist dein raspi soweit in der regel auf Bluetooth Box etwas wiederzugeben. Mit neusten Version von Volumio geht das leider nicht so einfach zumindest nicht mit dem Plugin, die manuelle Geschichte funktioniert allerdings halbwegs gut. Nicht vergessen wenn dein Raspi Wlan und bluetooth eingebaut hat, dann am besten auf ein Wlan Dongle umsteigen und internes WLAN deaktivieren, sonst kommt kein sauberer Sound raus.
VG
Hallo,
ich konnte dank der Anleitung bluealsa auf einem RPi3 mit Rasbian zum Laufen bewegen.
Da einiges nicht sofot klappte will ich aber meine Änderungen hier für andere oder ein Update des Blogposts festhalten
> /lib/systemd/system/bluezalsa.service
Nur ein kleiner Typo. Hier hat sich ein z in den Namen eingeschlichen.
> [Im Systemd-Skript]
> ExecStart=/usr/bin/bluealsa –disable-hfp
Das Argument –disable-hfp gibt es nicht mehr (zumindest wenn man der Installations weiter oben folgt).
Man muss es daher entferen, damit der Dienst startet.
Außerdem muss man vor dem Start /run/bluealsa (mit den passenden Zugriffsrechten :audo )
anlegen.
Das geht beispielsweise durch folgendens Hilfsskript, welches man den Vorraussetzung von
bluealsa.service hinzufügen kann:
[Unit]
Description=Prepare system for bluealsa daemon
After=bluetooth.service
[Service]
Type=simple
# Pfad zu mkdir, chown kann variieren!
ExecStartPre=-/bin/mkdir /run/bluealsa
ExecStart=/bin/chown :audio /run/bluealsa
Restart=on-abort
[Install]
WantedBy=multi-user.target
> Pulseaudio
Hier ist vielleicht der Hinweis nützlich, dass man entweder die bluetooth-relavanten module
nicht läd/entfernt oder pulseaudio für den Nutzer deaktiviert.
Letzteres kann man für den aktuellen Nuzter mit der Zeile
„autospawn = no“ in ~/.config/pulse/client.conf erreichen.
Gruß Yggdrasil
Debian Stretch kommt mit bluealsa installiert und es gilt die folgende linie, die ersetzt ExecStart=/usr/bin/bluealsa –disable-hfp :
ExecStart=/usr/bin/bluealsa -i hci0 -p a2dp-sink -p a2dp-source