A2DP sur PulseAudio - audio saccadé / sautant terrible

12

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

lsusb | grep Bluetooth

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

L'appareil a été couplé et, avec l'aide de blueman, je l'ai connecté à PulseAudio en tant qu'évier. L'audio apparaît en mode A2DP, mais est terriblement saccadé et saute au point d'être pas beaucoup mieux que rien.

J'ai lu et j'ai vu qu'il y avait un correctif impliquant d'ajuster la nicepriorité du serveur PulseAudio. Puisque par défaut, PulseAudio fonctionne sur une base par utilisateur, j'ai ajouté ce qui suit à mon /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

Je me suis ensuite ajouté au audiogroupe pour pouvoir programmer la priorité du pulseaudioprocessus. Il semble que cela pulseaudiofonctionne 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 le redémarrage, j'obtiens toujours le terrible son saccadé.

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

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

Naftuli Kay
la source

Réponses:

20

Editez le fichier de configuration ALSA

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

Ajoutez la ligne

options snd-hda-intel model=generic

à la fin du fichier et redémarrez.

ConfirmAndCreateThisAccount
la source
1
Cela a fonctionné à merveille pour mes enceintes BOSE quiet comfort 35 II (ubuntu 18.04)
Victor Parmar
Cette solution simple a également fonctionné pour moi après de nombreuses recherches. Ubuntu 18.10, écouteurs bluetooth (promate trueBlue).
Francesco Napolitano
J'ai créé un compte pour mentionner que cela a aussi résolu mes problèmes (QC35II). Une explication serait utile; mais de toute façon, vous êtes un épargnant de vie
Sam
Je vois environ 95% moins d'interruptions avec ce correctif avec QC35II sur les tests Debian 9, noyau 4.18.20-2.
Andrey Portnoy
3
à la fin après avoir édité ce fichier, vous n'avez pas besoin de redémarrer, exécutez simplementsudo service bluetooth restart
Dinuka Salwathura
12

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

La sortie saccadée peut être causée par l'implémentation A2DP et la façon dont elle met en mémoire tampon le son avant de l'encoder. Pour moi, la modification de la taille de ce tampon a résolu le problème du 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 être quelque chose comme

    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
    

    Nous voyons que les tampons ont actuellement 0 latence. Dans l'étape suivante, vous aurez besoin du NAMEet PORTde votre sortie. Dans cet exemple, ce sont bluez_card.28_11_A5_84_B6_F9et speaker-output, respectivement.

  2. Définissez la taille du tampon (latence) de votre carte sur une valeur appropriée avec ce modèle de commande:

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

    L'unité de latence de la commande suivante est en 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 
    
  3. Redémarrez votre service Bluetooth pour appliquer votre modification

    sudo service bluetooth restart
    

Comme il n'y a généralement aucune documentation à ce sujet, vous devrez peut-être expérimenter avec des valeurs de tampon supérieures ou inférieures.

Chris_128
la source
1
Vous méritez plus de votes positifs! Je voudrais mentionner que 45000 fonctionne bien pour le Macbook Air (début 2014) et le Bose QC35
Ole Aldric
C'est correct, merci
jhtong
3

Le correctif a fonctionné pour moi, même si j'ai trouvé que je devais REM la ligne avant. Voir ci-dessous:

# 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
la source
2

La réponse de Chris_128 a fonctionné pour moi mais pour les débutants, j'ajouterai un peu de détails.

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

pactl set-port-latency-offset NAME PORT 50000 

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

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 "sortie casque"

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
okto
la source
1

A eu le même problème avec Ubuntu 18.04 fonctionnant en double démarrage dans MacBook Mini. J'ai essayé de changer la configuration ALSA comme mentionné par @ConfirmAndCreateThisAccount.

Mais ça n'a pas marché.

J'ai donc installé Blueman en utilisant la commande ci-dessous

sudo apt-get install blueman

Ensuite, j'ai déconnecté le périphérique Bluetooth des paramètres Bluetooth du système et réappairé à l'aide de Blueman. Maintenant, tout va bien. Même les commandes Play / Pause fonctionnent.

iamnagaky
la source
0

Vous pouvez ouvrir la barre de recherche (CTRL-D dans l'unité, Windows-Key dans Gnome) tapez "Pulse" ou "Volume". Ouvrez l'outil graphique "Pulseaudio Volume Control", son icône ressemble à un bouton ou une jauge.

Là, vous pouvez sélectionner votre haut-parleur Bluetooth. Cliquez sur Avancé, définissez 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é une bonne valeur qui fonctionne pour moi.

Une capture d'écran est jointe. Mon haut-parleur Bluetooth s'appelle SRS-BTX300. Vous n'avez pas besoin de redémarrer Bluetooth après avoir modifié la valeur de latence.

entrez la description de l'image ici

knb
la source