A2DP en PulseAudio - terrible audio picado / salteado

12

He emparejado mis auriculares Bluetooth con mi computadora portátil Ubuntu 12.04 con un chip Bluetooth dentro:

lsusb | grep Bluetooth

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

El dispositivo se ha emparejado y, con la ayuda de blueman, lo he conectado a PulseAudio como un sumidero. El audio aparece en modo A2DP, pero es terriblemente entrecortado y salta al punto de no ser mucho mejor que nada.

Leí y vi que había una solución que implicaba ajustar la niceprioridad del servidor PulseAudio. Dado que, por defecto, PulseAudio se ejecuta por usuario, agregué lo siguiente a mi /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

Luego me agregué al audiogrupo para poder programar la prioridad del pulseaudioproceso. Parece que pulseaudioahora se ejecuta con una prioridad de -11:

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

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

Esto debería significar que PulseAudio se ejecuta con una prioridad de -11, lo cual es bueno.

Sin embargo, incluso después de reiniciar, sigo teniendo el terrible audio entrecortado.

¿Cómo debo proceder? Estoy tratando de hacer que este auricular Bluetooth que compré sea utilizable.

Nota: He intentado emparejar este dispositivo con una tableta Android justo al lado de mi computadora portátil y funciona bien, por lo que no es una congestión inalámbrica, de alguna manera parece estar directamente relacionado con Linux.

Naftuli Kay
fuente

Respuestas:

20

Edite el archivo de configuración de ALSA

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

Agrega la línea

options snd-hda-intel model=generic

hasta el final del archivo y reinicie.

ConfirmandCreateThisAccount
fuente
1
Esto funcionó maravillosamente para mis altavoces BOSE quiet comfort 35 II (ubuntu 18.04)
Victor Parmar
Esta solución simple también funcionó para mí después de mucha búsqueda. Ubuntu 18.10, auriculares bluetooth (promate trueBlue).
Francesco Napolitano
Creé una cuenta para mencionar que esto también resolvió mis problemas (QC35II). Una explicación sería útil; pero de cualquier manera, eres un salvavidas
Sam
Veo aproximadamente un 95% menos de agitación con esta solución con QC35II en las pruebas de Debian 9, kernel 4.18.20-2.
Andrey Portnoy
3
al final después de editar este archivo no necesita reiniciar, solo ejecutesudo service bluetooth restart
Dinuka Salwathura el
11

Como ninguna de las otras respuestas funcionó en mi sistema (Ubuntu 18.04 LTS en una MacBook Air 2012), encontré mi solución en el wiki alemán ubuntuusers . Resumen en inglés de las instrucciones alemanas:

La salida entrecortada puede deberse a la implementación de A2DP y a cómo amortigua el sonido antes de codificarlo. Para mí, cambiar el tamaño de este búfer resolvió el problema de sonido entrecortado. Debes realizar tres pasos:

  1. Encuentre la información necesaria sobre el dispositivo bluetooth (¡mientras está conectado!)

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

    La salida debería 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 los buffers tienen actualmente 0 latencia. En el siguiente paso, necesitará el NAMEy PORTde su salida. En este ejemplo, estos son bluez_card.28_11_A5_84_B6_F9y speaker-output, respectivamente.

  2. Establezca el tamaño del búfer (latencia) de su tarjeta en un valor adecuado con este patrón de comando:

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

    La unidad de latencia del siguiente comando es microsegundos, por lo que estoy usando un búfer de 50 milisegundos para mi comando aquí:

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
    
  3. Reinicie su servicio bluetooth para aplicar su cambio

    sudo service bluetooth restart
    

Como generalmente no hay documentación al respecto, es posible que tenga que experimentar con valores de buffer más altos o más bajos.

Chris_128
fuente
1
¡Te mereces más votos a favor! Me gustaría mencionar que 45000 funciona bien para Macbook Air (principios de 2014) y Bose QC35
Ole Aldric
Esto es correcto, gracias
jhtong
3

La solución funcionó para mí, aunque descubrí que tenía que REM la línea anterior. Vea abajo:

# 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
fuente
2

La respuesta Chris_128 funcionó para mí, pero para los novatos agregaré un poco de detalle.

Para el NOMBRE y el PUERTO para el siguiente comando:

pactl set-port-latency-offset NAME PORT 50000 

Lo obtendrá después de haber obtenido el resultado de escribir:

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

El NOMBRE será "bluez_card.5C_FB_7C_0D_0F_EE" y el PUERTO será "salida de auriculares"

Entonces, para mi caso, mi comando es

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

Reinicia tu servicio de bluetooth

sudo service bluetooth restart
de acuerdo con
fuente
1

Tuve el mismo problema con Ubuntu 18.04 ejecutándose como arranque dual en MacBook Mini. Intenté cambiar la configuración de ALSA como lo menciona @ConfirmAndCreateThisAccount.

Pero no funcionó.

Así que instalé Blueman usando el siguiente comando

sudo apt-get install blueman

Luego desconecté el dispositivo bluetooth de la configuración del sistema bluetooth y lo volví a emparejar con Blueman. Ahora todo está bien. Incluso los controles Play / Pause funcionan.

iamnagaky
fuente