Pile audio Linux

La pile audio Linux ( ou ) 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, signifiant système sonore ouvert). Elle a été ensuite complémentée par un système plus évolué, ALSA (de l architecture sonore avancée de Linux), puis, pour les périphériques Firewire,  (de l 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 ou VLC, qui remplace par PulseAudio en 2012) 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.

, 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) 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

Articles connexes

Sous-systèmes son 
 ALSA (Advanced Linux Sound Architecture)
  (Free FireWire Audio Drivers)
 OSS (Open Sound System)

Serveurs de sons 
 PipeWire
 PulseAudio
 JACK
 aRts
 ESD ()

Bibliothèques logicielles de manipulation de sons 
 Phonon
 GStreamer
 SDL (Simple DirectMedia Layer)
 OpenAL
 Libao

Divers 
 Pile graphique Linux

Liens externes 
  How Linux Audio Works vs. Windows Audio in 2017, Learn Digital Audio, 
  How it works: Linux audio explained, par Graham Morrison, TuxRadar, 
  Introduction to Linux Audio, par Filippo Pappalardo, OSNews, 
  Cleaning up the Linux Desktop Audio Mess , par Lennart Poettering, 

Linux
Informatique musicale