A2DP su PulseAudio - terribile audio discontinuo / saltando


13

Ho accoppiato le mie cuffie Bluetooth al mio laptop Ubuntu 12.04 con un chip Bluetooth all'interno:

lsusb | grep Bluetooth

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

Il dispositivo è stato associato e, con l'aiuto di blueman, l'ho collegato a PulseAudio come un lavandino. L'audio si presenta in modalità A2DP, ma è terribilmente instabile e salta al punto di non essere molto meglio di niente.

Ho letto in giro e ho visto che c'era una correzione che comportava la regolazione della nicepriorità del server PulseAudio. Poiché per impostazione predefinita, PulseAudio funziona su base per utente, ho aggiunto quanto segue al mio /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

Mi sono quindi aggiunto al audiogruppo per poter pianificare la priorità per il pulseaudioprocesso. Sembra che pulseaudioora sia in esecuzione con una priorità di -11:

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

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

Ciò dovrebbe significare che PulseAudio è in esecuzione con una priorità di -11, il che è positivo.

Tuttavia, anche dopo il riavvio, ottengo ancora il terribile audio discontinuo.

Come devo procedere? Sto cercando di rendere utilizzabili queste cuffie Bluetooth che ho acquistato.

Nota: ho provato ad associare questo dispositivo a un tablet Android proprio accanto al mio laptop e funziona benissimo, quindi non è congestione wireless, sembra in qualche modo direttamente correlato a Linux.

Risposte:


20

Modifica il file di configurazione ALSA

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

Aggiungi la linea

options snd-hda-intel model=generic

alla fine del file e riavviare.


1
Questo ha funzionato meravigliosamente per i miei diffusori BOSE quiet comfort 35 II (ubuntu 18.04)
Victor Parmar,

Questa semplice soluzione ha funzionato anche per me dopo molte ricerche. Ubuntu 18.10, auricolari bluetooth (promate trueBlue).
Francesco Napolitano,

Creato un account per menzionare che anche questo ha risolto i miei problemi (QC35II). Una spiegazione sarebbe utile; ma in entrambi i casi, sei un salvavita
Sam

Vedo circa il 95% in meno di increspatura con questa correzione con QC35II nei test di Debian 9, kernel 4.18.20-2.
Andrey Portnoy,

3
alla fine dopo aver modificato questo file non è necessario riavviare, basta eseguiresudo service bluetooth restart
Dinuka Salwathura

12

Poiché nessuna delle altre risposte ha funzionato sul mio sistema (Ubuntu 18.04 LTS su un MacBook Air 2012), ho trovato la mia soluzione sul wiki tedesco di Ubuntuusers . Sommario inglese delle istruzioni tedesche:

L'output instabile potrebbe essere causato dall'implementazione di A2DP e dal modo in cui suona il buffer prima di codificarlo. Per me, modificare le dimensioni di questo buffer ha risolto il problema del suono discontinuo. È necessario eseguire tre passaggi:

  1. Trova le informazioni necessarie sul dispositivo Bluetooth (mentre è collegato!)

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

    L'output dovrebbe essere qualcosa di simile

    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
    

    Vediamo che i buffer hanno attualmente 0 latenza. Nel passaggio successivo, avrai bisogno del NAMEe PORTdel tuo output. In questo esempio, questi sono bluez_card.28_11_A5_84_B6_F9e speaker-output, rispettivamente.

  2. Impostare la dimensione del buffer (latenza) della scheda su un valore adatto con questo modello di comando:

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

    L'unità di latenza del seguente comando è microsecondi, quindi sto usando un buffer da 50 millisecondi per il mio comando qui:

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
    
  3. Riavvia il servizio bluetooth per applicare la modifica

    sudo service bluetooth restart
    

Poiché di solito non è disponibile alcuna documentazione al riguardo, potrebbe essere necessario sperimentare valori di buffer più alti o più bassi.


1
Ti meriti più voti! Vorrei menzionare che 45000 funziona bene per Macbook Air (inizio 2014) e Bose QC35
Ole Aldric,

Questo è corretto, grazie
jhtong

3

La correzione ha funzionato per me, anche se ho scoperto che dovevo REM prima della linea. Vedi sotto:

# 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

2

La risposta di Chris_128 ha funzionato per me, ma per i neofiti aggiungerò un po 'di dettagli.

Per NAME e PORT per il comando seguente:

pactl set-port-latency-offset NAME PORT 50000 

Lo otterrai dopo aver ottenuto il risultato dalla digitazione:

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

Il NAME sarà "bluez_card.5C_FB_7C_0D_0F_EE" e il PORT sarà "output dell'auricolare"

Quindi per il mio caso il mio comando è

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

Riavvia il servizio bluetooth

sudo service bluetooth restart

1

Aveva lo stesso problema con Ubuntu 18.04 in esecuzione come dual boot in MacBook Mini. Ho provato a cambiare la configurazione ALSA come indicato da @ConfirmAndCreateThisAccount.

Ma non ha funzionato.

Quindi ho installato Blueman usando il comando seguente

sudo apt-get install blueman

Quindi ho disconnesso il dispositivo bluetooth dalle impostazioni bluetooth del sistema e sono stato ricollegato tramite Blueman. Adesso va tutto bene. Anche i controlli di riproduzione / pausa funzionano.


0

Puoi aprire la barra di ricerca (CTRL-D in unità, Windows-Key in Gnome) digitare "Pulse" o "Volume". Apri lo strumento GUI "Pulseaudio Volume Control", la sua icona sembra una manopola o un indicatore.

Lì puoi selezionare il tuo altoparlante Bluetooth. Fare clic su Avanzate, impostare il valore di latenza proprio come proposto nelle altre risposte. 45 ms o 50 ms sembrano funzionare per loro, ma non ho trovato un buon valore che funzioni per me.

Uno screenshot è allegato. Il mio altoparlante Bluetooth si chiama SRS-BTX300. Non è necessario riavviare il bluetooth dopo aver modificato il valore di latenza.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.