Booster la sortie audio sous Ubuntu+Alsa+Dmix

22 03 2011

Pour celles et ceux qui exècrent PulseAudio et qui utilisent Dmix pour que plusieurs programmes puissent accéder au son simultanément, voici de quoi peaufiner la qualité sonore en sortie.

Alsa, PulseAudio et Dmix

En fait, dès l’instant où vous n’utilisez pas PulseAudio et que votre carte n’est pas capable de gérer plusieurs sources simultanément, Alsa utilise le plugin Dmix (de façon transparente).

Dmix fonctionne simplement : il prend le contrôle de la carte sonore et les applications se connectent alors sur lui. Ce qui fait qu’au final il n’y a bien qu’une seule application qui utilise la carte sonore à la fois.

La configuration par défaut de Dmix

Mais il y a un hic ! Dmix utilise des valeurs par défaut qui sont généralement en deçà des capacités des cartes sonores actuelles, même celles intégrées sur la carte mère. Généralement cela donne une fréquence d’échantillonnage de 48 KHz en 16 bits avec un algorithme de conversion simple.

Il est cependant possible de corriger ce comportement.

Pour cela il faut modifier le fichier /usr/share/alsa/alsa.conf. Oui, c’est barbare, il existe d’autres endroits pour régler la configuration d’Alsa ! Mais à cet endroit, vous êtes garantis que les modifications s’appliqueront à tout le système.

Il faut ajouter/modifier les lignes suivantes dans /usr/share/alsa/alsa.conf :

defaults.pcm.dmix.rate 192000
defaults.pcm.dmix.format S32_LE
defaults.pcm.dmix.converter "samplerate_best"

La première ligne règle le taux d’échantillonnage à 192 KHz. La deuxième choisit des samples de 32 bits au lieu de 16. La dernière force l’utilisation du meilleur algorithme disponible pour la conversion.

Appliquer la configuration

Pour que ces paramètres soient pris en compte, il faut redémarrer Alsa. Cela peut être fait sans redémarrer le système.

Pour cela, une ligne de commande sous Ubuntu suffit :

sudo /sbin/alsa reload

La commande a une sortie qui doit ressembler à ceci :

fred@fred-desktop:~$ sudo /sbin/alsa reload
Unloading ALSA sound driver modules: snd-pcm-oss snd-mixer-oss snd-seq-dummy snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq snd-seq-device snd-hda-intel snd-hda-codec-analog snd-hda-codec snd-hwdep snd-pcm snd-page-alloc snd-timer Loading ALSA sound driver modules: snd-pcm-oss snd-mixer-oss snd-seq-dummy snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq snd-seq-device snd-hda-intel snd-hda-codec-analog snd-hda-codec snd-hwdep snd-pcm snd-page-alloc snd-timer.

Et il est fort probable que vous entendiez un petit poc sortir des enceintes.

Toutefois, une application peut encore être en train d’utiliser Alsa même si aucun son n’est joué. Dans ce cas, la sortie de la commande ressemblera à ceci :

fred@fred-desktop:~$ sudo /sbin/alsa reload
/sbin/alsa: Warning: Processes using sound devices: 16185(rhythmbox).
Unloading ALSA sound driver modules: snd-pcm-oss snd-mixer-oss snd-seq-dummy snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq snd-seq-device snd-hda-intel snd-hda-codec-analog snd-hda-codec snd-hwdep snd-pcm snd-page-alloc snd-timer (failed: modules still loaded: snd-hda-intel snd-hda-codec-analog snd-hda-codec snd-hwdep snd-pcm snd-page-alloc snd-timer).
Loading ALSA sound driver modules: snd-pcm-oss snd-mixer-oss snd-seq-dummy snd-seq-oss snd-seq-midi snd-rawmidi snd-seq-midi-event snd-seq snd-seq-device snd-hda-intel snd-hda-codec-analog snd-hda-codec snd-hwdep snd-pcm snd-page-alloc snd-timer.

Alsa vous prévient qu’un processus utilise la carte sonore (Warning : Processes using sound devices) et vous indique qu’il n’a pas pu être arrêté (failed : modules still loaded).

La solution : arrêter l’application proprement ou au moyen d’une commande kill bien sentie (le PID vous est même donné😉 )

Limitations

J’ai rencontré pour l’instant 2 problèmes avec cette configuration :

  • Le jeu OpenOrena en version 64 bits (x86_64) souffre de lags. En utilisant la version 32 bits (i386) qui fonctionne très bien sur plateforme 64 bits (x86_64), les lags disparaissent.
  • Le logiciel Cinelerra saccade lors de la lecture de vidéos HD. Pour corriger le problème, il faut baisser la taille du tampon audio  (buffer) dans les paramètres.

Il y en a peut-être d’autres mais ce sont les seuls que j’ai rencontrés. Audacity et RhythmBox fonctionnent normalement.


Actions

Information

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s




%d blogueurs aiment cette page :