A2DP no PulseAudio - terrível áudio agitado / pulando


12

Emparelhei meu fone de ouvido Bluetooth com meu laptop Ubuntu 12.04 com um chip Bluetooth dentro:

LSUSB | grep Bluetooth

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

O dispositivo foi emparelhado e, com a ajuda de blueman, eu o conectei ao PulseAudio como um coletor. O áudio aparece no modo A2DP, mas é terrivelmente instável e pula a ponto de não ser muito melhor que nada.

Eu li e vi que havia uma correção envolvendo o ajuste da niceprioridade do servidor PulseAudio. Como, por padrão, o PulseAudio é executado por usuário, adicionei o seguinte ao meu /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

Então me adicionei ao audiogrupo para poder agendar prioridade para o pulseaudioprocesso. Parece que pulseaudioagora está sendo executado com uma prioridade de -11:

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

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

Isso significa que o PulseAudio está sendo executado com uma prioridade de -11, o que é bom.

No entanto, mesmo depois de reiniciar, ainda recebo o terrível áudio instável.

Como devo proceder? Estou tentando tornar utilizável o fone de ouvido Bluetooth que comprei.

Nota: Tentei emparelhar este dispositivo com um tablet Android ao lado do meu laptop e ele funciona bem, por isso não é congestionamento sem fio, parece estar diretamente correlacionado ao Linux de alguma forma.

Respostas:


20

Edite o arquivo de configuração do ALSA

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

Adicione a linha

options snd-hda-intel model=generic

até o final do arquivo e reinicie.


11
Isso funcionou maravilhosamente para meus BOSE tranquilos conforto 35 II falantes (ubuntu 18.04)
Victor Parmar

Essa correção simples também funcionou para mim depois de muita pesquisa. Ubuntu 18.10, fones de ouvido bluetooth (promate trueBlue).
Francesco Napolitano

Criei uma conta para mencionar que isso também solucionava meus problemas (QC35II). Uma explicação seria útil; mas de qualquer forma, você é um salva-vidas
Sam

Eu vejo cerca de 95% menos distorção com essa correção no QC35II nos testes do Debian 9, kernel 4.18.20-2.
Andrey Portnoy

3
no final depois de editar este ficheiro não precisa reiniciar, basta executarsudo service bluetooth restart
Dinuka Salwathura

11

Como nenhuma das outras respostas funcionou no meu sistema (Ubuntu 18.04 LTS em um MacBook Air 2012), encontrei minha solução no wiki de ubuntuusers em alemão . Resumo em inglês das instruções em alemão:

A saída instável pode ser causada pela implementação do A2DP e como o som é armazenado em buffer antes da codificação. Para mim, alterar o tamanho desse buffer resolveu o problema de som instável. Você precisa executar três etapas:

  1. Encontre as informações necessárias sobre o dispositivo bluetooth (enquanto estiver conectado!)

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

    A saída deve ser algo como

    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
    

    Vemos que os buffers atualmente têm 0 de latência. Na próxima etapa, você precisará do NAMEe PORTda sua saída. Neste exemplo, estes são bluez_card.28_11_A5_84_B6_F9e speaker-output, respectivamente.

  2. Defina o tamanho do buffer (latência) do seu cartão para um valor adequado com este padrão de comando:

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

    A unidade de latência do seguinte comando é microssegundos, então estou usando um buffer de 50 milissegundos para o meu comando aqui:

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
    
  3. Reinicie seu serviço bluetooth para aplicar sua alteração

    sudo service bluetooth restart
    

Como geralmente não há documentação sobre isso, talvez seja necessário experimentar valores de buffer mais altos ou mais baixos.


11
Você merece mais votos! Gostaria de mencionar que o 45000 funciona bem para o Macbook Air (início de 2014) e o Bose QC35
Ole Aldric

Isso está correto, obrigado
jhtong 19/04

3

A correção funcionou para mim, embora eu achasse que tinha que REM a linha antes dela. Ver abaixo:

# 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

Chris_128 resposta funcionou para mim, mas para iniciantes vou adicionar um pouco de detalhes.

Para NAME e PORT do comando abaixo:

pactl set-port-latency-offset NAME PORT 50000 

Você o obterá após o resultado da digitação:

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

O NAME será "bluez_card.5C_FB_7C_0D_0F_EE" e o PORT será "headset-output"

Então, no meu caso, meu comando é

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

Reinicie seu serviço bluetooth

sudo service bluetooth restart

1

Teve o mesmo problema com o Ubuntu 18.04 sendo executado como inicialização dupla no MacBook Mini. Tentei alterar a configuração do ALSA conforme mencionado por @ConfirmAndCreateThisAccount.

Mas não deu certo.

Então instalei o Blueman usando o comando abaixo

sudo apt-get install blueman

Em seguida, desconectei o dispositivo bluetooth das configurações do bluetooth do sistema e emparelhamos novamente usando o Blueman. Agora está tudo bem. Até os controles Reproduzir / Pausar funcionam.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.