Python Bibliothek für A2DP / Bluetoothctl

  • Hallo,

    ich versuche gerade, einen Raspberry (3) als Bluetooth-Lautsprecher zu konfigurieren, was auch bis auf eine Sache ganz gut funktioniert.

    Das Problem ist, dass ich bisher immer über bluetoothctl im Terminal die Geräte verbinden und verwalten muss. Ich kenn mich bisher leider weder

    wirklich gut mit Bluetooth noch mit der Verwaltung von Audiogeräten unter Linux aus und hab einfach nach einer Möglichkeit

    zur Steuerung von Bluetooth gesucht und eigentlich nur Beiträge für automatisches Verbinden beim Start mit einem hinterlegten Gerät oder Serielle Kommunikation gefunden, aber wenig zu A2DP.

    Mein Ziel wäre es, eine Steuerung zu programmieren, mit der ich mich mit meinem Endgerät pairen kann und dann Lieder vor und zurückspulen kann. So wie eine

    Bluetooth-Box bzw. Autoradio das eben auch macht. Was bisher am besten funktioniert hat, war ein Wrapper für bluetoothctl, der aber sehr oft abstürzt, wenn

    ich bestimmte Befehle (wie zum Beispiel bei pairing mit Pin) eingebe.

    Hat jemand zufällig eine Idee / Ansatz oder kennt eine Bibliothek, mit der das schöner oder zuverlässiger gelöst werden könnte?

    PS:

    Das ist der Wrapper für bluetoothctl den ich verwendet habe (bluetoothctl.py):

    https://gist.github.com/egorf (...mit ein paar zusätzlichen Befehlen, ist im Anhang)

    ...und das die Anleitung nach der ich A2DP konfiguriert habe:

    https://raspberrypi.stackexchange.com/questions/4770…uetooth-speaker

  • Hallo LordPatrick , willkommen im Forum. Für das Steuern von Player ist das AVRCP / Audio/Video Remote Control Profile für Steuerung von zb. Mediaplyern (Start,Stop, Pause) zuständig. A2DP / Advanced Audio Distribution Profile für Übertragung von Stereodaten nur Wiedergabe. Wenn es um das Steuern geht wäre eine Suche nach den Protokolleigenschaften von AVRCP sicherlich hilfreich. Gruß ux

    Edit: BT + Pulseaudio. Die Steuerungsfunktion AVRCP ist gut in Pulseaudio integriert. Mein BT-Headset arbeitet mit vlc zusammen. Die Funktionen Start, Stopp, Nächster Titel, Letzter Titel werden vom Headset unterstützt und kommen im vlc Player korrekt an. Sollte auch mit Bluealsa funktionieren. Alle Pakete sind auch für armhf verfügbar.

    Die Verwaltung von Sources und Sinks:

    https://packages.debian.org/buster/pavucontrol

    https://packages.debian.org/buster/pulseaudio-module-bluetooth

    Verwaltung von BT-Geräten via bluemann:

    Link https://packages.debian.org/buster/blueman

    Body-Count >= 2.2 Million ☠️-covid19-??@?

    ? + ?? >= 2.2 Million ☠️

    2002 | 2019+

    Freedom 4 ?? + ??

    Einmal editiert, zuletzt von unimatrix-0 (12. Februar 2020 um 07:49) aus folgendem Grund: +Link

  • Danke!

    Ich hab bisher gedacht, dass ich das Endgerät über A2DP steuern kann, aber das scheint so wohl so nicht zu funktionieren.

    Was ich aber noch gefunden hab ist dbus zum steuern von Bluez, eventuell komm ich so auch über Python auf Pulseaudio, dass ich dann so das Gerät steuern kann.

    PS: Ich hab gerade bemerkt, dass ich nirgends wirklich geschrieben hab, dass ich python dafür verwenden will... (was ich auch wollte) aber ich glaube ich werde noch auf Java umsteigen, dort gibt es hoffentlich mehr Bibliotheken für dbus / Pulseaudio und bluez :/

  • LordPatrick , das Steuerungsprotokoll AVRCP ist mit dem A2DP verzahnt. A2DP für die Stereowiedergabe, AVRCP für Laut , Leise usw.

    Bei dem z.b Hfp Protokoll funktioniert es ebenso, nur das noch ein Mikro als Aufnahmegerät im Protokoll implementiert ist. Meist kommt es auf die Fähigkeiten vom jeweiligen BT-Gerät an. Meine ein 5€ BT-Lautsprecher unterstützt ggf. nicht so viele AVRCP Funktionen wie ein modernes Headset.

    kle , mein Headset läuft über bluealsa mit dem A2DP einwandfrei. Das Aufnahme Problem (Micro) ist in meiner Testumgebung (Pi4/4gb gelöst. Kann mit Audacity eine recht gute Aufnahme via Headset-Mikro erzeugen. (Hfp) Modus.

    Body-Count >= 2.2 Million ☠️-covid19-??@?

    ? + ?? >= 2.2 Million ☠️

    2002 | 2019+

    Freedom 4 ?? + ??

  • unimatrix-0 ich erinnerte mich an Issue 180 vom 25.12.2018 (es ging um Gentoo) und dort den Kommentar von borine vom 03.03.2019. Im Forum wurde Stereo mit 2 Bluetooth-Lautsprechern mit Pulsaudio vorgestellt. Ich habs am 01.08.2019 mit dem damals aktuellen Buster getestet. Headset und 2 BT-Lautsprecher sind 2 Paar Stiefel. (gestern war ich mit Schmartphone unterwegs...)

    Hab eben das BT-Headset getestet. Der linke und rechte Lautsprecher lässt sich mit dem alsamixer getrennt in der Lautstäreke regeln zb. (z,c). Die andere Konfiguration ( 2 Stück BT-Lautsprecher als getrennte Geräte kann ich zur Zeit nicht testen, da gerade selbst in Reparatur. Ob das Headset jetzt doppelt Mono ausgibt ? Evtl. gibt es im www ein Testfile.

    Body-Count >= 2.2 Million ☠️-covid19-??@?

    ? + ?? >= 2.2 Million ☠️

    2002 | 2019+

    Freedom 4 ?? + ??

  • rechts/links Test mit GUI:

    mit Browser: https://www.audiocheck.net/audiotests_stereo.php

    yt im Browser:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Die Lösung für bluealsa vom Dez./2018 habe ich gerade gefunden aber noch nicht nach-getestet.

    Setting up bluez-alsa to stream audio to two BT speakers from two dongles vom 18.12.2018 zeigt, wie es mit bluealsa geht bzw. ging.

    Achtung im folgenden Beitrag für mpd wird die audio_output-Definitionen in der /etc/mpd.conf gezeigt. Das aktuelle bluealsa kennt HCI=... nicht mehr, also muß HCI=hci0, bzw. HCI=hci1, entfallen.

    Edit: Unterschied zwischen bluealsa mit Stretch und Buster

    Einmal editiert, zuletzt von kle (16. Februar 2020 um 13:25)

  • Die Lösung für bluealsa vom Dez./2018 habe ich gerade gefunden aber noch nicht nach-getestet.

    Setting up bluez-alsa to stream audio to two BT speakers from two dongles vom 18.12.2018 zeigt, wie es mit bluealsa geht bzw. ging.

    Achtung im folgenden Beitrag für mpd wird die audio_output-Definitionen in der /etc/mpd.conf gezeigt. Das aktuelle bluealsa kennt HCI=... nicht mehr, also muß HCI=hci0, bzw. HCI=hci1, entfallen.

    Edit: Unterschied zwischen bluealsa mit Stretch und Buster

    kle , thx für die Infos. Der Eintrag service org.bluealsa in der .asoundrc oder anderen möglichen Konfigurationsdateien war bis jetzt noch nicht als Lösungsansatz eingeflossen. Die Test's stehen noch aus, werde später berichten wie die Ergebnisse aussehen. Gruß ux

    Body-Count >= 2.2 Million ☠️-covid19-??@?

    ? + ?? >= 2.2 Million ☠️

    2002 | 2019+

    Freedom 4 ?? + ??

  • Ich war die letzte Woche noch weg und hab in den letzten Tagen noch weitergetüftelt...

    Java ist in dem Gebiet irgendwie noch furchtbarer, die Bibliotheken sind von 2002-2010, außerdem hab ich es geschafft, dabei eine Ubuntu- Installation zu zerstören...

    Bin also wieder bei Python gelandet und hab ein Github mit einer DBus- Bluez- Adapterklasse (oder so ähnlich) gefunden:

    https://github.com/elsampsa/btdemo

    ich kann mich also bisher mit einem Art REST- Konstrukt mit dem Handy / Computer verbinden (Funktioniert fast akzeptabel, sollte es jemand brauchen)

    Das einzige Problem hier ist das Akzeptieren von Pairinganfragen bzw. die Bestätigung des Pins. Ich sollte wohl irgendwie eine leere Response an Bluez zurückgeben, so dass erkannt wird, dass ich die Anfrage Akzeptiere. Bisher macht das Programm an der Stelle nichts und wartet eine Exception ab, danach ist das Gerät aber trotzdem als "Gepaired" abgespeichert. Wüsste eventuell jemand bescheid, wie sowas ginge?

    AVRCP- Kommandos hab ich mal über die Kommandozeile gesendet, dass wird dann auch noch in das Programm gebastelt...

  • Vielleicht sollte ich noch eine Anleitung zu dem Sphagetticode dazuschreiben:

    control.py : kleiner Server über den man sich mit dem Port 1234 aufschält und dann Befehle sendet. Später wollte ich da mit C# und Mono eine GUI basteln

    (Befehle: Scan , Connect|xx_xx_xx_xx_xx_xx , Pair|xx_xx_xx_xx_xx_xx oder Remove|xx_xx_xx_xx_xx_xx)

    bt_studio.py : der DBus-Bluez Adapter, von dem Orginal hab ich nur verändert, dass bei der Suche nach einem Gerät die Attribute mitgegeben werden (wie der Name, die Adresse usw. ) Was noch fehlt ist im Bluetooth-Agent die Pinbestätigung, außerdem hab ich das ganze noch auf keinem PI getestet...

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!