42 votes

A2DP sur PulseAudio - audio terrible saccadé/sauté

J'ai associé mon casque Bluetooth avec mon ordinateur portable Ubuntu 12.04 équipé d'une puce Bluetooth à l'intérieur :

lsusb | grep Bluetooth

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

Le périphérique a été associé, et avec l'aide de blueman, je l'ai connecté à PulseAudio en tant que récepteur. Le son est diffusé en mode A2DP, mais est terriblement haché et saute à tel point que cela n'est pas beaucoup mieux que rien.

J'ai lu autour de moi et j'ai vu qu'il y avait une solution impliquant l'ajustement de la priorité nice du serveur PulseAudio. Puisque par défaut, PulseAudio s'exécute sur une base par utilisateur, j'ai ajouté ce qui suit à mon fichier /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

Ensuite, je me suis ajouté au groupe audio pour pouvoir planifier la priorité du processus pulseaudio. Il semble que pulseaudio fonctionne maintenant avec une priorité de -11 :

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

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

Cela devrait signifier que PulseAudio fonctionne avec une priorité de -11, ce qui est bien.

Cependant, même après redémarrage, j'obtiens toujours un son terriblement haché.

Comment dois-je procéder ? J'essaie de rendre utilisable ce casque Bluetooth que j'ai acheté.

Remarque : J'ai essayé d'associer ce périphérique avec une tablette Android juste à côté de mon ordinateur portable et cela fonctionne bien, donc ce n'est pas à cause de la congestion sans fil, cela semble être directement lié à Linux d'une manière ou d'une autre.

79voto

Chris_128 Points 891

Comme aucune des autres réponses n'a fonctionné sur mon système (Ubuntu 18.04 LTS sur un MacBook Air de 2012), j'ai trouvé ma solution sur le wiki ubuntuusers en allemand. Résumé en anglais des instructions allemandes :

La sortie saccadée pourrait être causée par la mise en œuvre A2DP et la façon dont elle met en mémoire tampon le son avant de l'encoder. Pour moi, changer la taille de cette mémoire tampon a résolu le problème de son saccadé. Vous devez effectuer trois étapes :

  1. Trouvez les informations nécessaires sur le périphérique bluetooth (pendant qu'il est connecté !)

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

La sortie devrait ressembler à cela

    Nom : bluez_card.28_11_A5_84_B6_F9
    Pilote : module-bluez5-device.c
    ...
    Ports :
    speaker-output : Speaker (priorité : 0, décalage de latence : 0 µs, disponible)
        Partie du(des) profil(s) : a2dp_sink, headset_head_unit
    speaker-input : Entrée Bluetooth (priorité : 0, décalage de latence : 0 µs, non disponible)
        Partie du(des) profil(s) : headset_head_unit

Nous voyons que les tampons ont actuellement une latence de 0. À l'étape suivante, vous aurez besoin du NOM et du PORT de votre sortie. Dans cet exemple, il s'agit respectivement de bluez_card.28_11_A5_84_B6_F9 et de speaker-output.

  1. Définissez la taille de la mémoire tampon (latence) de votre carte sur une valeur adaptée avec ce modèle de commande :

    pactl set-port-latency-offset    

L'unité de latence de la commande suivante est les microsecondes, donc j'utilise un tampon de 50 millisecondes pour ma commande ici :

    pactl set-port-latency-offset bluez_card.28_11_A5_84_B6_F9 speaker-output 50000 
  1. Redémarrez votre service bluetooth pour appliquer votre changement

    sudo service bluetooth restart

Comme il n'y a généralement aucune documentation à ce sujet, vous pourriez devoir expérimenter avec des valeurs de tampon plus élevées ou plus basses. De nombreuses personnes ont posté leurs latences de travail dans les commentaires de cette réponse. Consultez-les pour des indications sur la valeur de latence.

35voto

Modifier le fichier de configuration ALSA

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

Ajouter la ligne

options snd-hda-intel model=generic

à la fin du fichier, et redémarrer le service bluetooth :

sudo service bluetooth restart

8voto

okto Points 81

La réponse de Chris_128 a fonctionné pour moi mais pour les débutants, je vais ajouter un peu de détails.

Pour le NOM et le PORT de la commande ci-dessous :

pactl set-port-latency-offset NOM PORT 50000 

Vous l'obtiendrez après avoir obtenu le résultat de la commande :

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

Le NOM sera "bluez_card.5C_FB_7C_0D_0F_EE" et le PORT sera "headset-output"

Donc pour mon cas ma commande est

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

Redémarrez votre service bluetooth

sudo service bluetooth restart

7voto

knb Points 4051

Vous pouvez ouvrir la barre de recherche (CTRL-D dans Unity, touche de Windows dans Gnome) tapez "Pulse" ou "Volume". Ouvrez l'outil GUI "Contrôle du volume Pulseaudio", son icône ressemble à un bouton ou un compteur.

Là, vous pouvez sélectionner votre enceinte Bluetooth. Cliquez sur Avancé, réglez la valeur de latence comme proposé dans les autres réponses. 45 ms ou 50 ms semblent fonctionner pour eux, mais je n'ai pas trouvé de bonne valeur qui fonctionne pour moi.

Une capture d'écran est attachée. Mon enceinte Bluetooth s'appelle SRS-BTX300. Vous n'avez pas besoin de redémarrer le Bluetooth après avoir changé la valeur de latence.

entrer la description de l'image ici

4voto

randomthingsido Points 41

La solution a fonctionné pour moi, bien que j'ai dû mettre en commentaire la ligne précédente. Voir ci-dessous:

# Empêcher snd-usb-audio d'être chargé en première carte son
# options snd-usb-audio index=-2  <-REM cette ligne si cela ne fonctionne pas au départ
options snd-hda-intel model=generic

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X