A2DP auf PulseAudio - schrecklich abgehacktes / überspringendes Audio

12

Ich habe mein Bluetooth-Headset mit meinem Ubuntu 12.04-Laptop mit einem Bluetooth-Chip gekoppelt:

lsusb | grep Bluetooth

Bus 003 Device 003: ID 045e:0745 Microsoft Corp. Nano Transceiver v1.0 for Bluetooth

Das Gerät wurde gekoppelt und mit Hilfe von bluemanhabe ich es als Spüle mit PulseAudio verbunden. Audio kommt im A2DP-Modus zwar vor, ist aber furchtbar abgehackt und springt so weit, dass es nicht viel besser als nichts ist.

Ich las herum und sah, dass es einen Fix gab, bei dem die nicePriorität des PulseAudio-Servers angepasst wurde. Da PulseAudio standardmäßig auf Benutzerbasis ausgeführt wird, habe ich Folgendes zu meinem hinzugefügt /etc/security/limits.conf:

*       hard    rtpio   0
*       soft    rtpio   0
@audio  hard    rtpio   20
@audio  soft    rtpio   20
pulse   hard    rtpio   20
pulse   soft    rtpio   20

Ich habe mich dann der audioGruppe hinzugefügt, um die Priorität für den pulseaudioProzess festlegen zu können. Es scheint, dass pulseaudiojetzt mit einer Priorität von läuft -11:

ps -eo pri, ni, cmd | grep [p] ulse

30 -11 /usr/bin/pulseaudio --start --log-target=syslog

Dies sollte bedeuten, dass PulseAudio mit einer Priorität von -11 ausgeführt wird, was gut ist.

Aber auch nach dem Neustart bekomme ich immer noch das schrecklich abgehackte Audio.

Wie soll ich vorgehen? Ich versuche, das von mir gekaufte Bluetooth-Headset nutzbar zu machen.

Hinweis: Ich habe versucht, dieses Gerät mit einem Android-Tablet direkt neben meinem Laptop zu koppeln, und es funktioniert einwandfrei. Es handelt sich also nicht um eine drahtlose Überlastung, sondern es scheint irgendwie direkt mit Linux zu korrelieren.

Naftuli Kay
quelle

Antworten:

20

Bearbeiten Sie die ALSA-Konfigurationsdatei

sudo gedit /etc/modprobe.d/alsa-base.conf

Fügen Sie die Zeile hinzu

options snd-hda-intel model=generic

bis zum Ende der Datei und starten Sie neu.

ConfirmAndCreateThisAccount
quelle
1
Dies funktionierte wunderbar für meine BOSE leise Komfort 35 II Lautsprecher (Ubuntu 18.04)
Victor Parmar
Diese einfache Lösung hat auch nach langem Suchen bei mir funktioniert. Ubuntu 18.10, Bluetooth-Kopfhörer (Promate TrueBlue).
Francesco Napolitano
Erstellt ein Konto, um zu erwähnen, dass dies auch meine Probleme gelöst hat (QC35II). Eine Erklärung wäre hilfreich; aber so oder so, du bist ein Lebensretter
Sam
Ich sehe ungefähr 95% weniger Choppiness mit diesem Fix mit QC35II auf Debian 9-Tests, Kernel 4.18.20-2.
Andrey Portnoy
3
Am Ende nach dem Bearbeiten dieser Datei müssen Sie nicht neu starten, sudo service bluetooth restart
sondern
9

Da keine der anderen Antworten auf meinem System funktionierte (Ubuntu 18.04 LTS auf einem 2012 MacBook Air), fand ich meine Lösung im deutschen Ubuntuuser-Wiki . Englische Zusammenfassung der deutschen Anleitung:

Die abgehackte Ausgabe kann durch die A2DP-Implementierung und die Art und Weise verursacht werden, wie der Sound vor dem Codieren gepuffert wird. Für mich löste das Ändern der Größe dieses Puffers das Problem des abgehackten Klangs. Sie müssen drei Schritte ausführen:

  1. Hier finden Sie die erforderlichen Informationen zum Bluetooth-Gerät (solange es verbunden ist!)

    pactl list | grep -Pzo '.*bluez_card(.*\n)*'
    

    Die Ausgabe sollte so etwas wie sein

    Name: bluez_card.28_11_A5_84_B6_F9
    Driver: module-bluez5-device.c
    ...
    Ports:
    speaker-output: Speaker (priority: 0, latency offset: 0 usec, available)
        Part of profile(s): a2dp_sink, headset_head_unit
    speaker-input: Bluetooth Input (priority: 0, latency offset: 0 usec, not available)
        Part of profile(s): headset_head_unit
    

    Wir sehen, dass die Puffer derzeit eine Latenz von 0 haben. Im nächsten Schritt benötigen Sie das NAMEund PORTIhrer Ausgabe. In diesem Beispiel sind bluez_card.28_11_A5_84_B6_F9und speaker-outputjeweils.

  2. Stellen Sie die Puffergröße (Latenz) Ihrer Karte mit diesem Befehlsmuster auf einen geeigneten Wert ein:

    pactl set-port-latency-offset <NAME> <PORT> <BUFFER_SIZE_MICROSECONDS> 
    

    Die Latenzzeit des folgenden Befehls ist Mikrosekunden, daher verwende ich hier einen 50-Millisekunden-Puffer für meinen Befehl:

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
    
  3. Starten Sie Ihren Bluetooth-Dienst neu, um Ihre Änderung zu übernehmen

    sudo service bluetooth restart
    

Da dies normalerweise nicht dokumentiert ist, müssen Sie möglicherweise mit höheren oder niedrigeren Pufferwerten experimentieren.

Chris_128
quelle
1
Sie verdienen mehr Upvotes! Ich möchte erwähnen, dass 45000 gut für das Macbook Air (Anfang 2014) und Bose QC35
Ole Aldric
3

Das Update hat bei mir funktioniert, obwohl ich festgestellt habe, dass ich die Leitung davor REMEN musste. Siehe unten:

# Keep snd-usb-audio from beeing loaded as first soundcard  
# options snd-usb-audio index=-2  <-REM this line if it doesn't work at first  
options snd-hda-intel model=generic
randomthingsido
quelle
2

Chris_128 Antwort hat bei mir funktioniert, aber für Neulinge werde ich ein bisschen Detail hinzufügen.

Für NAME und PORT für den folgenden Befehl:

pactl set-port-latency-offset NAME PORT 50000 

Sie erhalten es, nachdem Sie das Ergebnis der Eingabe erhalten haben:

pactl list | grep -Pzo '.*bluez_card(.*\n)*'


Name: bluez_card.5C_FB_7C_0D_0F_EE
Driver: module-bluez5-device.c
Owner Module: 28
Properties:
    ...
Profiles:
    headset_head_unit: Headset Head Unit (HSP/HFP) (sinks: 1, sources: 1, priority: 30, available: yes)
    a2dp_sink: High Fidelity Playback (A2DP Sink) (sinks: 1, sources: 0, priority: 40, available: yes)
    off: Off (sinks: 0, sources: 0, priority: 0, available: yes)
Active Profile: a2dp_sink
Ports:
    headset-output: Headset (priority: 0, latency offset: 0 usec, available)
        Part of profile(s): headset_head_unit, a2dp_sink
    headset-input: Headset (priority: 0, latency offset: 0 usec)
        Part of profile(s): headset_head_unit

Der NAME lautet "bluez_card.5C_FB_7C_0D_0F_EE" und der PORT lautet "Headset-Ausgabe".

Für meinen Fall lautet mein Befehl also

"pactl set-port-latency-offset bluez_card.5C_FB_7C_0D_0F_EE headset-output 50000"

Starten Sie Ihren Bluetooth-Dienst neu

sudo service bluetooth restart
okto
quelle
1

Hatte das gleiche Problem mit Ubuntu 18.04 als Dual-Boot in MacBook Mini. Es wurde versucht, die ALSA-Konfiguration wie von @ConfirmAndCreateThisAccount angegeben zu ändern.

Aber es hat nicht funktioniert.

Also habe ich Blueman mit dem folgenden Befehl installiert

sudo apt-get install blueman

Dann habe ich das Bluetooth-Gerät von den Bluetooth-Einstellungen des Systems getrennt und mit Blueman erneut gekoppelt. Jetzt ist alles in Ordnung. Sogar die Play / Pause-Steuerung funktioniert.

iamnagaky
quelle