Linux audio & Hi-Fi : choisir la bonne fréquence d’échantillonnage

J’ai récemment pu comparer le son de Tidal Hifi (qualité CD) entre un ordi Apple et un autre sous Linux (Debian 11) branchés sur une carte son USB et une chaine Hifi haut de gamme. Quelle ne fut pas ma surprise alors qu’il était clairement évident que le son de l’ordi Apple était meilleur dans les aigus…

Je pense avoir trouvé la raison. Sous Linux, le système son (PulseAudio ou Pipewire) utilise un mixeur dont la fréquence d’échantillonnage est réglée sur 48kHz par défaut. Or la majorité des enregistrements audio CD sont au format 44.1kHz. La conversion 44.1 -> 48 kHz me semble être la source de la perte de qualité sonore.

Comparaison des convertisseurs de fréquences (resampler) MacOS et Linux (Pipewire) dans leur réglages par défaut

Plusieurs solutions sont possibles. Il faut d’abord comprendre l’intérêt du mixeur. La carte son peut changer de fréquence d’échantillonnage. Mais cela se fait souvent par une rupture (clic sonore audible) et quid de plusieurs logiciels émettant simultanément des sons dans des échantillonnages différents? Le mixeur mixe les signaux émis par les logiciels et en fait sortir un mix à une fréquence d’échantillonnage unique.

Voyons les solutions à disposition avec Pipewire :

Créer un fichier texte ~/.config/pipewire/pipewire.conf.d/customconfig.conf et ajouter les textes suivants:

Solution 1 : Augmenter la qualité du resampleur du mixeur

stream.properties = {
  #quality of software resampling (to convert 44.1kHz source into 48Khz for example). 1 is min quality. 15 is max quality
  resample.quality = 14
}

Solution 2 : Changer la fréquence échantillonnage par défaut pour celle du CD (44100Hz)

context.properties = {
   #default sample rate of your sound card
   default.clock.rate = 44100
}

Solution 3: Changer dynamiquement la fréquence d’échantillonnage en fonction de la source jouée (une seule source en meme temps)

context.properties = {
   #default sample rate of your sound card
   default.clock.rate = 44100

   #allows to switch the sound card sample rate to those values to match to the source sample rate
   default.clock.allowed-rates = [ 44100 48000 88200 96000 ]
}

Pour appliquer la configuration, redémarrer Pipewire avec la commande systemctl restart –user pipewire pipewire-pulse (pas besoin d’être root)

Le comportement peut se vérifier avec la commande pw-top. Vous verrez la fréquence d’échantillonnage de sortie (ici la carte Focusrite en 88200Hz) et la fréquence de la source (Firefox en 44100Hz)

Je vous laisse trouver le réglage qui vous convient.

Moi j’ai pris les solutions 1+2 en mettant 88200Hz par défaut (en espérant que re-sampler 48kHz->88.2kHz soit plus qualitatif que 48kHz->44.1kHz si j’ai du son à 48Khz à jouer). Le changement de fréquence (solution 3) de ma carte son occasionnant des clicks audibles.

Si vous vous demandez pourquoi le CD est en 44.1Hz, c’est tout simplement car à l’époque les enregistrements numériques sur bandes magnétiques étaient faits à cette fréquence. Aujourd’hui, sur ordinateur, c’est plutôt une puissance de 2 (48 ou 96Khz) qui est considérée comme optimisée pour le matériel.

Postez en commentaire votre expérience !

Sources :
https://wiki.archlinux.org/title/PipeWire#Sound_quality_(resampling_quality)
https://discovery.endeavouros.com/audio/audiophile/2022/01/
https://src.infinitewave.ca/

3 réactions sur “ Linux audio & Hi-Fi : choisir la bonne fréquence d’échantillonnage ”

  1. waitnsea

    Merci du topo
    erratum, utiliser plutôt cette syntaxe:
    $ systemctl restart –user pipewire pipewire-pulse

  2. Tourneriff

    Blog très intéressant, pour un passionné de son et de ce que linux peut apporter dans ce domaine ! Merci !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.