Levez la main si vous vous souvenez quand PulseAudio était célèbre pour casser l’audio sur Linux pour tout le monde. Pendant quelques années, la réponse standard à tout problème audio sous Linux était de désinstaller PulseAudio et d’utiliser simplement ALSA. C’est probablement le cas qu’un certain nombre de distributions sont passées à Pulse avant qu’il ne soit tout à fait prêt. Mon expérience est qu’après quelques années de correction de bogues, l’expérience est devenue assez stable et utile. PulseAudio a apporté de très belles fonctionnalités à Linux, comme le déplacement de flux sonores entre les appareils et le rééchantillonnage dynamique des flux selon les besoins.

L’autre côté de la médaille audio Linux est JACK. Si vous avez utilisé Ardour, ou fait beaucoup avec les interfaces audio Firewire, vous êtes probablement familier avec le JACK Audio Connection Kit – les acronymes récursifs sont amusants. JACK vous permet d’acheminer presque arbitrairement des flux audio et est tout à fait destiné à un public audio professionnel.

Vous pouvez vous demander s’il existe un moyen d’utiliser PulseAudio et JACK ensemble. Oui, mais c’est juste un peu pénible de faire fonctionner le plugin PulseAudio avec JACK. Par exemple, tous les flux Pulse sont mélangés et apparaissent comme un seul appareil sur le graphique JACK, vous ne pouvez donc pas les acheminer ou les traiter séparément.

C’est l’énigme à laquelle sont confrontés les utilisateurs de Linux depuis des années maintenant. PulseAudio n’est pas utilisable pour l’audio pro, et JACK est trop compliqué pour tout le reste. Je déteste suggérer qu’un autre système audio puisse résoudre les problèmes audio du monde, mais ce serait bien d’avoir le meilleur des deux mondes. Pour laisser le chat sortir du sac, PipeWire est ce nouveau système, et il a le potentiel d’être la solution pour presque tout le monde.

le l’audio Vidéo choisie

L’histoire racontée est que [Wim Taymans] envisageait des applications distribuées sous forme de Flatpaks et s’est rendu compte que cela poserait problème pour l’entrée et la sortie vidéo. Il travaillait à faire en sorte que PulseAudio fonctionne bien avec les applications conteneurisées et a également commencé à réfléchir à la manière de résoudre le problème des flux vidéo. Lors de la conception initiale du protocole, il est devenu évident que la synchronisation AV serait un problème diabolique si l’audio et la vidéo étaient acheminés sur des systèmes distincts, il a donc été décidé que PipeWire inclurait également la gestion audio. Une fois cette décision prise, il est devenu évident que PipeWire pouvait remplacer complètement PulseAudio. Pour faire de cette transition une transition transparente, PipeWire a été conçu pour être entièrement compatible avec le serveur PulseAudio. En d’autres termes, toute application pouvant communiquer avec PulseAudio prend automatiquement en charge PipeWire.

Si PulseAudio devait être reconstruit à partir de zéro, alors il pourrait aussi bien s’adresser à l’audio pro. Si PipeWire pouvait satisfaire les besoins des utilisateurs audio professionnels, il pourrait remplacer JACK en tant que backend audio incontournable pour les stations de travail audio numériques comme Ardour. Convaincre chaque projet d’ajouter la prise en charge d’un autre serveur audio Linux allait être une bataille difficile, alors ils ont triché. PipeWire implémenterait simplement l’API JACK. Cela peut ressembler à beaucoup de glissement de fonctionnalités, à partir d’un simple système de transport vidéo et pour finir par ré-implémenter à la fois JACK et PulseAudio.

Faisons de nouveau ce point. PipeWire remplace simultanément Pulseaudio et JACK. Toute application qui prend en charge Pulse prend désormais en charge PipeWire, et en même temps, elle peut tirer toutes les astuces astucieuses que JACK peut faire. Jusqu’à présent, j’ai trouvé deux hacks tueurs que PipeWire rend possibles, auxquels nous reviendrons dans un instant. Presque toutes les principales distributions prennent désormais en charge l’exécution de PipeWire en tant que serveur audio principal, et Fedora 34 en a fait la solution par défaut. Il y avait quelques bugs à résoudre au cours des deux premières semaines d’utilisation, mais PipeWire semble maintenant bien fonctionner avec toutes les applications que j’ai lancées.

La question de la latence

JACK s’habitue à toutes sortes de hijinks, et l’une de ses principales caractéristiques est qu’il peut atteindre des latences suffisamment faibles pour être imperceptibles. La lecture audio avec un retard notable peut perturber gravement la musique ou les locuteurs. L’effet est si fort que les chercheurs ont construit un brouilleur de parole qui utilise le principe pour faire taire les locuteurs à distance. Disons simplement que vous ne voulez vraiment pas cet effet sur votre conférence téléphonique. Un délai de 200 ms coupe la parole, mais des latences encore plus faibles peuvent être gênantes, en particulier pour les musiciens.

Pour que PipeWire remplace vraiment JACK, à quel niveau de latence avons-nous besoin ? Le guide Ardour suggère cinq millisecondes pour être vraiment imperceptibles, mais cela dépend de ce que vous faites exactement. Avec juste un peu de travail, sur une machine moderne, j’ai réduit ma latence à un peu moins de 18 ms, sur un périphérique audio USB. En d’autres termes, il s’agit du délai que vous obtenez en vous tenant à 18 pieds d’une source audio. C’est juste assez pour que votre cerveau s’en rende compte, surtout si vous essayez de jouer de la musique, mais pas un briseur d’affaire. Besoin de descendre plus bas ? Vous aurez probablement besoin d’un noyau temps réel.

Pour commencer à régler votre latence, copiez alsa-monitor.conf et jack.conf à leur place dans /etc/pipewire. Il y a quelques ajustements ici, mais les principaux boutons à tourner sont api.alsa.period-size et node.latency dans jack.conf. Pour vraiment obtenir de faibles latences, il existe une série de réglages système qui peuvent aider, essentiellement les mêmes réglages nécessaires pour une faible latence sur JACK.

Oh le plaisir que nous pouvons avoir

Passons maintenant à ces astuces. Bien que JACK puisse gérer plusieurs flux provenant d’une seule carte son, il ne gère pas facilement plusieurs sources externes ou des récepteurs. Vous possédez une paire de micros USB et souhaitez les enregistrer tous les deux ? Désolé, rien ne peut faire avec JACK ou ALSA. Obtenez une interface audio plus grande et plus chère.

PipeWire n’a pas cette limitation. Il voit tous vos appareils audio et peut mélanger et assortir les canaux même dans Ardour. Il est désormais trivial de faire un enregistrement trois pistes avec plusieurs cartes son.

OK, je vous entends dire maintenant : « Je ne suis pas ingénieur du son, je n’ai pas besoin de faire de l’enregistrement multipiste. Que peut faire Pipewire pour moi ? » Regardons quelques autres outils, et je suppose que vous verrez les possibilités. Le premier est Calf Studio Gear, une collection de plugins audio. Parmi les plugins figurent un compresseur, un égaliseur paramétrique et un limiteur. Ces trois éléments constituent une boîte à outils de mastering décente, où le «mastering» fait ici référence à la dernière étape par laquelle passe un album pour peaufiner le son. Cette étape fait cruellement défaut sur certaines des vidéos YouTube que nous consommons. Les niveaux audio incohérents sont ceux qui me rendent le plus fou le plus souvent.

Un deuxième outil, qjackctl, aide à utiliser Calf. Non seulement il vous permet de voir et de manipuler le graphique du flux du signal, mais il a la capacité de concevoir des règles simples pour router automatiquement l’audio. Ces règles utilisent la correspondance regex Perl, et il est assez facile de les configurer pour diriger automatiquement les flux audio de Chrome vers le compresseur Calf, et de là vers vos haut-parleurs. Ajouter le veau et qjackctl à la liste d’exécution automatique de votre bureau et vous disposez d’une solution automatisée pour une mauvaise maîtrise de YouTube. Pourquoi s’arrêter là ? Vous allez être sur un appel Zoom ? Acheminez votre micro à travers Calf, et faites un peu d’égalisation, ou ajoutez une porte pour réduire le bruit de fond. Puisque vous y êtes, enregistrez votre audio et l’audio de l’appel sur Ardour.

Travail restant à faire

PipeWire était à l’origine destiné à mélanger la vidéo. Cette partie fonctionne aussi. Les navigateurs ont ajouté la prise en charge de PipeWire pour la capture vidéo, et si vous utilisez Wayland, la capture de bureau est désormais également une affaire PipeWire. OBS a ajouté la prise en charge des entrées vidéo PipeWire, mais la sortie vers PipeWire n’est toujours pas implémentée. Et à ce sujet, alors que les outils JACK fonctionnent très bien pour l’audio, le contrôle vidéo et la sélection de plugins font sensiblement défaut.

Il y a une chose que JACK prend en charge que PipeWire ne peut actuellement pas toucher. JACK prend en charge les pilotes FFADO pour communiquer avec les interfaces audio FireWire, et PipeWire ne peut pas du tout les prendre en charge. (OK, oui, ALSA a une pile FireWire, mais elle n’est pas en très bon état et ne prend en charge qu’une poignée de périphériques.) USB3 a certainement remplacé FireWire comme connexion préférée pour les nouveaux périphériques, mais il existe encore de nombreuses interfaces de qualité. qui sont uniquement FireWire. Très récemment, un nouvel élément TODO est apparu sur la liste officielle : le backend FireWire basé sur FFADO ou fix up des pilotes ALSA.

Alors, où en sommes-nous? PipeWire a déjà changé ce que je peux faire avec l’audio Linux. Si l’écosystème vidéo se développe, il a le potentiel de rendre de nouvelles choses possibles, ou du moins plus faciles, là aussi. L’avenir est prometteur pour le multimédia sous Linux.