Wie hier (Bluetooth JBL FLIP 4 Stereo Problem) schon mal beschrieben, hatte ich meine liebe Not zwei JBL-Flip mittels MPD über Bluetooth anzusteuern und zwar dann, wenn der zweite Flip per "Connect+" mit dem ersten verbunden war. Die Sound brach ab, wenn der Stream gestoppt und neugestartet wurde.
Jeder Flip alleine lief hingegen prima. Aber so hat man ja kein Stereo.
Unter Alsa hatte ich es geschafft, beide Flips mit getrennten Verbindungen über den internen Bluetooth vom Rpi3 anzusprechen. Dabei hatte ich allerdings übelsten asynchronen Sound.
Ein Adapter alleine scheint es nicht zu schaffen.
Mein Lösungsansatz läuft mit folgenden Zutaten:
- Pulseaudio
- zwei externe USB-BT-Adapter
Folgende Pakete werden zwingen benötigt:
ii libbluetooth3:armhf 5.43-2+rpt2+deb9u2 armhf Library to use the BlueZ Linux Bluetooth stack
ii pi-bluetooth 0.1.10 all Raspberry Pi 3 bluetooth
ii gstreamer1.0-pulseaudio:armhf 1.10.4-1 armhf GStreamer plugin for PulseAudio
ii libpulse0:armhf 10.0-1+deb9u1 armhf PulseAudio client libraries
ii libpulsedsp:armhf 10.0-1+deb9u1 armhf PulseAudio OSS pre-load library
ii pulseaudio 10.0-1+deb9u1 armhf PulseAudio sound server
ii pulseaudio-module-bluetooth 10.0-1+deb9u1 armhf Bluetooth module for PulseAudio sound server
ii pulseaudio-utils 10.0-1+deb9u1 armhf Command line tools for the PulseAudio sound server
Die Datei /etc/bluetooth/main.conf muss folgendes enthalten:
Anschließend wird über bluetoothctl jeder Flip mit einem Adapter gepairt, getrustet und connected.
Das kann man z.B. hier nachlesen: https://pi-buch.info/bluetooth-konf…t-bluetoothctl/
Den Adapter-Wechsel nimmt man mit dem Kommando select <MAC> vor.
Damit ist die Bluetooth-Sache schon mal abgeschlossen.
Beim Pulseaudio müssen folgende Einstellungen vorgenommen werden.
Ich verwende die systemweite Konfiguration mittels der Datei /etc/pulse/default.pa.
Hier wird das load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1 entsprechend aktiviert.
Was ich nicht geschafft habe ist, dass beim Start von Pulseaudio alles von Pulse eingerichtet wird, also auch die BT-Verbindung zu den Flips.
Daher mache ich es, wie hier zu sehen, über ein Skript:
#!/bin/sh
sudo killall pulseaudio ## erst mal alle Pulseaudios Killen
sleep 3
pulseaudio --start ## neue Pulse-Audioinstanz starten
sleep 3
sudo bluetoothctl <<EOF ## den ersten Flip connecten
select aa:aa:aa:aa:aa:aa ## hier wird der BT-Adapter gewählt
connect xx:xx:xx:xx:xx:xx ## hier wird der Flip connected
EOF
sleep 2
sudo bluetoothctl <<EOF ## den zweiten Flip connecten
select bb:bb:bb:bb:bb:bb
connect yy:yy:yy:yy:yy:yy
EOF
sleep 2
## In Pulseaudio wird das a2dp-Profil jedem Flip zugewiesen, sonst klingt's nicht nach Hifi
pacmd set-card-profile bluez_card.xx_xx_xx_xx_xx_xx a2dp_sink
sleep 3
pacmd set-card-profile bluez_card.yy_yy_yy_yy_yy_yy a2dp_sink
sleep 1
## In Pulseaudio wird jedem Flip ein Kanal (L oder R) zugewiesen.
pacmd load-module module-remap-sink sink_name=left master=bluez_sink.yy_yy_yy_yy_yy_yy.a2dp_sink channels=1 channel_map=front-left master_channel_map=front-left remix=no
pacmd load-module module-remap-sink sink_name=right master=bluez_sink.xx_xx_xx_xx_xx_xx.a2dp_sink channels=1 channel_map=front-right master_channel_map=front-right remix=no
## In Pulseaudio wird ein "combined-Sink" erstellt, welcher aus dem oberen linken und rechten Kanal besteht. Der wird dann von MPD angesprochen.
pactl load-module module-combine-sink sink_name=combined sink_properties=device.description=myCombine slaves=left,right channels=2
## Der combined Sink wird zum Standard.
pactl set-default-sink combined
Display More
Die Sleeps waren nötig, weil sich das Verbindung-Aufbauen manchmal verhaspelte.
Wer MPD verwendet sollte nun noch dafür sorgen, dass der so definierte Pulseaudio-Sink verwendet wird, anzupassen in /etc/mpd.conf.
Wer lieber mplayer verwendet kommt so zum ersten Test:
mplayer -ao pulse 08.\ ZZ\ Top\ -\ Sleeping\ Bag.flac
Der Song ist prädestiniert, um Latenzen zu entdecken.
Kommentare:
- Bei Verwendung nur eines BT-Adapters: Entweder keine Verbindung zu beiden Flips oder übelste Asynchronität
- Adapter-Kombination aus Raspi-BT und USB-BT: Hier glaube ich auch Asynchronität vernommen zu haben; wenn auch nur gering.
- Den Raspi-BT habe ich in der /boot/config.txt abgeschaltet: dtoverlay=pi3-disable-bt
- Das Skript muss nach jedem erneuten Einschalten der Flips ausgeführt werden. Ein automatisches Verbinden und nutzen der Konfiguration klappte leider nicht.