Ich bin neu in Linux und neu in Bluetooth-Skripten. Was ich bisher entdeckt habe, ist Folgendes:
- Bluez ist der Standard-BT-Stack.
- BluezTools ist eine Reihe von Dienstprogrammen, mit denen Sie einfacher mit Bluez interagieren können
- DBus ist die Schnittstelle, mit der Bluez eine Verbindung herstellt, während er direkt mit der Hardware interagiert.
- PulseAudio ist das Subsystem, das für die Erzeugung von Audio auf dem System verantwortlich ist.
Das macht Sinn. Nehmen wir also an, ich habe einen Satz BlueTooth-Kopfhörer. Ich würde erwarten (alles nach dem Pairing und Vertrauen), dass ich einen Befehl ausgeben kann, der eine direkte Verbindung zu einem bestimmten Profil auf den BT-Kopfhörern herstellen kann.
Der technische Weg, den ich vorhabe, wäre ungefähr so:
- Schalten Sie die Kopfhörer ein.
- Geben Sie einen BluezTools-Befehl aus, z bt-audio -c
- Warten Sie, bis das Gerät eine Verbindung zu dem Dienst hergestellt hat, nach dem ich suche
- PulseAudio sollte jetzt ein neues Ausgabegerät aufnehmen
- Geben Sie einen weiteren Befehl ein, um das Audio von dem, was es war, in neues Ausgangsaudio (die BT-Kopfhörer) zu ändern.
- Genießen Sie ein nahtloses Hörerlebnis.
Dies alles scheint logisch, aber die tatsächliche Implementierung ist nicht so, und ich suche nach dem WARUM, damit ich das Problem besser verstehen und versuchen kann, es zu beheben.
Das passiert tatsächlich:
- Schalten Sie die Kopfhörer ein.
- Geben Sie einen BluezTools-Befehl aus, z. B. bt-audio -c
- Warten Sie, bis das Gerät eine Verbindung zu dem Dienst hergestellt hat, nach dem ich suche
- PulseAudio sollte jetzt ein neues Ausgabegerät aufnehmen
- Geben Sie einen PulseAudio-Befehl aus, um das Audioprofil von Telefonqualität auf High-Fidelity zu ändern.
Lassen Sie mich das etwas näher erläutern. Das Bluetooth-Headset bietet zwei Qualitätsmodi (Telefon und High-Fidelity). Nur 1 ist wirklich zum Musikhören geeignet.
Ich würde erwarten, dass die BT-Kopfhörer jeden Qualitätsmodus als Service verfügbar machen, stimmt das? Diese Annahme könnte falsch sein, aber ich würde so etwas erwarten
bt-audio -c highFidelityProfile
oder
bt-audio -changeProfile highFidelityProfile
Stattdessen scheint Bluez nur die RAW-Verbindung zum Gerät zu verwalten, und von dort aus müssen Sie ein: pacmd-Set-Card-Profil $ INDEX a2dp ausgeben
Das scheint einfach grundlegend falsch zu sein. Warum ist die Qualitätskontrolle im Audio-Subsystem und erfordert daher eine andere Implementierung für Puls oder Alsa oder ein anderes Sound-Subsystem?
Was vermisse ich? Warum ist es mit Bluez / BluezTools usw. nicht möglich, eine direkte Verbindung zu einem bestimmten Profil herzustellen?