PulseAudio est un serveur sonore visant à simplifier la lecture de son sur le bureau. Il remplace le vieux Esound (ESD). Il permet d'envoyer le son sur les hauts parleurs d'un autre ordinateur, d'utiliser plusieurs cartes son, prend en charge les oreilettes bluetooth, gère la consommation d'énergie, etc. Sur le papier, ça semble super : relire Why you should care about PulseAudio (and how to start doing it) pour s'en convaincre. Par contre, en pratique c'est une grosse plaie : PulseAudio rajoute une couche entre les applications et ALSA qui consomme du temps processeur, de la mémoire, et (dans mon cas) dégrade la qualité du son (rajoute des petits pics sonores).

Problèmes liés à PulseAudio sur un Eee PC (Fedora 11)

En particulier, sur mon Eee PC (1101 HA) équipé de Fedora 11 : mplayer est incapable de lire une vidéo (le film Sympathy for Lady Vengeance) bien que mon processeur graphique (la célèbre puce Poulsbo) accélère grandement le décodage de l'image. Dans les logs noyaux (/var/log/messages), j'ai pu voir que PulseAudio tente de rattraper la situation :

Nov 15 23:07:57 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 1,00 ms
Nov 15 23:16:27 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 2,00 ms
Nov 15 23:16:50 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 4,00 ms
Nov 15 23:20:43 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 8,00 ms
Nov 15 23:20:48 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 16,00 ms
Nov 15 23:21:19 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 26,00 ms
Nov 15 23:22:03 maggie pulseaudio[6894]: alsa-sink.c: Increasing wakeup watermark to 15,99 ms
Nov 15 23:37:22 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 36,00 ms
Nov 15 23:37:37 maggie pulseaudio[6894]: alsa-sink.c: Increasing wakeup watermark to 25,99 ms
Nov 15 23:43:03 maggie pulseaudio[6894]: alsa-sink.c: Increasing minimal latency to 46,00 ms

Toutes à 5 à 10 minutes, le son finit par sauter et mplayer se fige. J'ai trouvé un contournement : revenir un peu en arrière puis aller un peu en avant (touches gauche puis droite).

Solution : passer directement par ALSA

Après trois coupures dans mon film (c'est-à-dire après un quart d'heure), j'ai fini par me décider à le couper et à chercher à résoudre ce problème énervant. J'ai vu que Mplayer utilisait PulseAudio. J'ai alors essayé l'option « -ao alsa » (-ao : Audio Output), mais mplayer utilisait quand même PulseAudio. Bizarre.

En regardant la configuration ALSA, j'ai vu dans le fichier /etc/alsa/pulse-default.conf :

# Let's make it the default!
pcm.!default {
    type pulse
    ...
}

Donc PulseAudio est configuré pour être le pilote par défaut. J'ai supprimé ce fichier et j'ai redémarré la machine (vu que PulseAudio a trituré ALSA, j'ai préféré tout réinitialiser).

Après le redémarrage, j'ai relancé mon film et j'ai pu le voir jusqu'au bout sans la moindre coupure !

Utilisation du processeur

  • mplayer -ao pulse : le processus pulseaudio utilise 20% du CPU, et au total 20 à 25% du CPU est utilisé
  • mplayer -ao alsa : le processus pulseaudio n'est plus solicité (et n'est donc plus visible dans top), et au total 5 à 10% du CPU est utilisé

Réglage du volume

Avec PulseAudio, alsamixer (et autres mixeurs de sons) n'affiche qu'une seule sortie. Il faut utiliser « alsamixer -c 0 » pour que je puisse avoir accès à toutes les sorties. En particulier, ça me permet de régler le volume du casque, chose nécessaire car le volume est insuffisant.

Problèmes liés à PulseAudio qu'ont d'autres utilisateurs

Lors de la migration à PulseAudio, pas mal d'applications ne fonctionnaient plus (le son en tout cas). Flash et Skype supportent aujourd'hui PulseAudio (Flash 10+ et Skype 2.1+), par contre Audacity ne le supporte toujours pas. Les jeux utilisant la bibliothèque SDL (ex: l'excellent xmoto) ont également des problèmes. Correction : SDL 1.2.12 a un pilote natif pour PulseAudio.

Complaintes :

Le démon PulseAudio a besoin de tourner en priorité temps réel (SCHED_FIFO). Or il faut être root pour cela. Une faille de sécurité dans PulseAudio a déjà servi pour exploiter des failles du noyau Linux (2.6.30, 2.6.31, 2.6.32), notamment via la boîte à outils de Brad Spengler.

Conclusion

Sympathy for Lady Vengeance est un excellent film ! Il fait parti de trilogie sur la vengeance du sud-coréen Park Chan-wook. La fin est bien gore, j'adore :-)

Pour PulseAudio, c'est plutôt mauvais signe étant donné qu'il est activé par défaut sur Ubuntu, Fedora et Mandriva. Bien que j'ai du mal à voir l'intérêt de PulseAudio, il doit bien en avoir un pour que les distributions bureaux majeures l'activent par défaut. Par contre, il serait bon de donner le choix de désactiver complètement PulseAudio le temps que le code soit stabilisé.