Pile audio Linux
La pile audio Linux (Linux audio stack ou Linux sound stack) désigne l’ensemble des composants logiciels qui interviennent dans le processus sonore d’une distribution Linux.
Présentation générale
La pile audio de Linux se présente de la façon suivante, avec les composants des couches supérieures appelant des fonctions des composants des couches inférieures :
- Logiciel applicatif (lecteur audio ou vidéo, etc.)
- Bibliothèque logicielle permettant la manipulation de sons
- Serveur de sons qui a pour fonction de mixer différents flux audio en un unique flux audio
- Sous-système son (modules ou pilotes du noyau Linux)
DĂ©tail des composants et relations
Les différentes API et services et leur rôles
La première interface de programmation (API) unifiée pour gérer les processeurs sonores sous UniX est OSS (de l'anglais : Open Sound System, signifiant système sonore ouvert). Elle a été ensuite complémentée par un système plus évolué, ALSA (de l'anglais : Advanced Linux Sound Architecture architecture sonore avancée de Linux), puis, pour les périphériques Firewire, FFADO (en) (de l'anglais : Free FireWire Audio Drivers signifiant Pilotes audio libre FireWire) : ce sont eux qui communiquent directement avec le matériel.
PortAudio, une bibliothèque sonore multiplateforme qui fut utilisée par un grand nombre d'applications (dont Audacity[1] ou VLC, qui remplace par PulseAudio en 2012[2]) jusqu'aux début des années 2010, elle dépend de libsnd pour produire du son, et a été remplacée progressivement par PulseAudio, ou par son backend PulseAudio. Son développement s'est arrêté en 2011.
Enlightened Sound Daemon (en), développé initialement pour le bureau Enlightenment, est venu apporter la possibilité de mixer plusieurs sources audio.
Simple DirectMedia Layer (SDL), d'abord développé pour les jeux vidéos afin d'avoir un accès relativement bas niveaux aux périphériques via une API plus haut niveau, pouvant également être utilisé pour tout type d'application multimédia.
JACK (de l'anglais : JACK Audio Connection Kit, signifiant, Kit de connxion audio JACK) est une API orientée vers l'audio professionnel à faible latence, utilisée pour la production de musique, il permet également de mixer l'audio. Il passe également par les API ALSA, OSS pour la communication avec puces et cartes sonores et FFADO avec les périphériques sonores en FireWire.
PulseAudio a ensuite été créé, reprenant les principes ESD pour le mixage audio, et généralisé l'unification et le mixage de l'audio en environnement de bureau ou pour les jeux et applications multimédia. Il est chargé de mixer le son, et de communiquer avec les entrées/sorties via les API ALSA ou OSS.
L'API GStreamer est quant à elle dédiée aux flux multimédia, permettant d'encoder/décoder audio et vidéo est venu s'ajouter.
OpenAL, à l'origine développée pour Microsoft Windows, est une API sonore 3D, devenu un standard multiplateforme, à l'image de l'API graphique 3D OpenGL (à l'origine développé pour IRIX, le système UNIX de Silicon Graphics) ou de son successeur Vulkan. Il permet de spatialiser le son, comme le font OpenGL et Vulkan pour l'image.
Libao est une api multiplateforme, développée par Xiph.org de 2003 à 2014, permettant d'envoyer des flux sonores vers les API de sons des différents systèmes.
Phonon peut intervenir et ajouter une couche d’abstraction en se situant entre une application KDE et une bibliothèque multimédia (par exemple : GStreamer).
PulseAudio et JACK ont tous les deux développé des ponts entre les services pour permettre d'utiliser simultanément les deux services, mais leur manipulation reste complexe pour l'utilisateur. Il est nécessaire d'avoir un gestionnaire de session différent pour chacun d'eux pour faire fonctionner le pontage.
Unification avec Pipewire
PipeWire, en cours de développement (en ), a pour but d'unifier l'API multimédia GStreamer avec les deux API audio, Jack et PulseAudio, et de les remplacer à terme. Cette bibliothèque reprend les principes de ces différents services et bibliothèque. Elle permet de mixer différentes entrée et sorties, audio et vidéo, indépendamment de leurs caractéristiques techniques, et d'avoir une API unifiée pour les applications. Elle intègre à la fois une API et une ABI, compatibles avec ces 3 bibliothèques, afin de permettre aux applications de continuer à fonctionner. Durant la phase de transition, elle retransmet à ces services les fonctionnalités qui ne lui sont pas encore intégrées, en prévision de leurs remplacements.
Notes et références
- (en) « Audacity PortAudio v19 », sur Audacityteam.org
- « PortAudio », sur wiki.videolan.org
Articles connexes
Sous-systèmes son
Serveurs de sons
- PipeWire
- PulseAudio
- JACK
- aRts
- ESD (Enlightened Sound Daemon (en))
Bibliothèques logicielles de manipulation de sons
Divers
Liens externes
- (en) How Linux Audio Works vs. Windows Audio in 2017, Learn Digital Audio,
- (en) How it works: Linux audio explained, par Graham Morrison, TuxRadar,
- (en) Introduction to Linux Audio, par Filippo Pappalardo, OSNews,
- (en) Cleaning up the Linux Desktop Audio Mess [PDF], par Lennart Poettering,