A2DP na PulseAudio - straszne przerywane / pomijane audio

13

Sparowałem zestaw słuchawkowy Bluetooth z laptopem Ubuntu 12.04 z układem Bluetooth w środku:

lsusb | grep Bluetooth

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

Urządzenie zostało sparowane i za pomocą bluemanpodłączyłem je do PulseAudio jako zlew. Dźwięk pojawia się w trybie A2DP, ale jest strasznie nierówny i przeskakuje do tego stopnia, że ​​nie jest dużo lepszy niż nic.

Przeczytałem i zobaczyłem, że była poprawka polegająca na dostosowaniu nicepriorytetu serwera PulseAudio. Ponieważ domyślnie PulseAudio działa dla poszczególnych użytkowników, do mojego dodałem /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

Następnie dodałem się do audiogrupy, aby móc zaplanować priorytet dla tego pulseaudioprocesu. Wygląda na pulseaudioto, że działa teraz z priorytetem -11:

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

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

Powinno to oznaczać, że PulseAudio działa z priorytetem -11, co jest dobre.

Jednak nawet po ponownym uruchomieniu nadal otrzymuję okropny, przerywany dźwięk.

jak powinienem postąpić? Staram się, aby ten zestaw słuchawkowy Bluetooth, który kupiłem, był użyteczny.

Uwaga: próbowałem sparować to urządzenie z tabletem z Androidem tuż obok mojego laptopa i działa dobrze, więc nie jest to przeciążenie sieci bezprzewodowej, wydaje się być w jakiś sposób bezpośrednio skorelowane z Linuksem.

Naftuli Kay
źródło

Odpowiedzi:

20

Edytuj plik konfiguracyjny ALSA

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

Dodaj linię

options snd-hda-intel model=generic

na końcu pliku i uruchom ponownie.

ConfirmAndCreateThisAccount
źródło
1
Działa to wspaniale dla moich cichych głośników BOSE Comfort Comfort 35 II (ubuntu 18.04)
Victor Parmar
Ta prosta poprawka zadziałała również dla mnie po wielu poszukiwaniach. Ubuntu 18.10, słuchawki Bluetooth (promuj trueBlue).
Francesco Napolitano,
Utworzono konto, aby wspomnieć, że to również rozwiązało moje problemy (QC35II). Pomocne byłoby wyjaśnienie; ale tak czy inaczej, ratujesz życie
Sam
Widzę około 95% mniej szarpnięć dzięki tej poprawce z QC35II w testowaniu Debiana 9, jądro 4.18.20-2.
Andrey Portnoy
3
na koniec po edycji tego pliku nie musisz restartować, po prostu uruchomsudo service bluetooth restart
Dinuka Salwathura
12

Ponieważ żadna z pozostałych odpowiedzi nie działała w moim systemie (Ubuntu 18.04 LTS na MacBooku Air 2012), znalazłem swoje rozwiązanie na niemieckiej wiki Ubuntuusers . Streszczenie w języku niemieckim instrukcji:

Niestabilne wyjście może być spowodowane implementacją A2DP i tym, jak buforuje dźwięk przed jego zakodowaniem. Dla mnie zmiana rozmiaru tego bufora rozwiązała problem nierównego dźwięku. Musisz wykonać trzy kroki:

  1. Znajdź niezbędne informacje o urządzeniu Bluetooth (gdy jest podłączone!)

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

    Wynik powinien być podobny

    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
    

    Widzimy, że bufory mają obecnie 0 opóźnień. W następnym kroku będziesz potrzebować NAMEi PORTswoich wyników. W tym przykładzie, są bluez_card.28_11_A5_84_B6_F9i speaker-output, odpowiednio.

  2. Ustaw rozmiar bufora (opóźnienie) karty na odpowiednią wartość za pomocą tego wzorca poleceń:

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

    Jednostką opóźnienia dla następującego polecenia są mikrosekundy, więc używam tutaj bufora 50 milisekund:

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
    
  3. Uruchom ponownie usługę Bluetooth, aby zastosować zmianę

    sudo service bluetooth restart
    

Ponieważ zwykle nie ma na ten temat dokumentacji, może być konieczne eksperymentowanie z wyższymi lub niższymi wartościami buforów.

Chris_128
źródło
1
Zasługujesz na więcej pochwał! Chciałbym wspomnieć, że 45000 działa dobrze w przypadku Macbook Air (początek 2014 r.) I Bose QC35
Ole Aldric
To prawda, dziękuję
jhtong
3

Poprawka zadziałała dla mnie, chociaż stwierdziłem, że musiałem usunąć linię przed nią. Patrz poniżej:

# 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
źródło
3

Odpowiedź Chris_128 zadziałała dla mnie, ale dla początkujących dodam trochę szczegółów.

Dla NAZWY i PORTU dla poniższego polecenia:

pactl set-port-latency-offset NAME PORT 50000 

Otrzymasz go po uzyskaniu wyniku pisania:

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

NAZWA to „bluez_card.5C_FB_7C_0D_0F_EE”, a PORT to „wyjście słuchawkowe”

Więc w moim przypadku moje polecenie jest

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

Uruchom ponownie usługę Bluetooth

sudo service bluetooth restart
OK, aby
źródło
1

Miał ten sam problem z Ubuntu 18.04 działającym jako podwójny rozruch w MacBooku Mini. Próbowałem zmienić konfigurację ALSA, jak wspomniano w @ConfirmAndCreateThisAccount.

Ale to nie zadziałało.

Więc zainstalowałem Bluemana za pomocą poniższego polecenia

sudo apt-get install blueman

Następnie odłączyłem urządzenie Bluetooth od systemowych ustawień Bluetooth i ponownie sparowałem za pomocą Blueman. Teraz wszystko jest w porządku. Działa nawet sterowanie Play / Pause.

iamnagaky
źródło
0

Możesz otworzyć pasek wyszukiwania (CTRL-D w jedności, klawisz Windows w Gnome) i wpisz „Pulse” lub „Volume”. Otwórz narzędzie GUI „Pulseaudio Volume Control”, jego ikona wygląda jak pokrętło lub wskaźnik.

Tam możesz wybrać głośnik Bluetooth. Kliknij Zaawansowane, ustaw wartość Opóźnienia, tak jak zaproponowano w innych odpowiedziach. Wydaje się, że 45 ms lub 50 ms działa dla nich, ale nie znalazłem dobrej wartości, która działałaby dla mnie.

Zrzut ekranu jest załączony. Mój głośnik Bluetooth nazywa się SRS-BTX300. Nie trzeba ponownie uruchamiać bluetooth po zmianie wartości opóźnienia.

wprowadź opis zdjęcia tutaj

knb
źródło