# JACK Audio Connection Kit

JACK, acronyme récursif de JACK Audio Connection Kit, est un logiciel d'interconnexion d'applications audio pour système Unix tel que GNU/Linux et macOS et aussi pour Windows. Il a été conçu pour obtenir des connexions temps réel à faibles latences et une exécution synchrone de ses clients audio et MIDI. En dehors du fait d'être multi-plateformes, il est l'un des deux principaux serveurs audio sous Linux, avec PulseAudio qui est plus orienté bureautique et jeu. PipeWire, s'inspirant de Gstreamer à pour but d'unifier ces deux serveurs de son ainsi que les flux vidéo.
Il est développé par une communauté de développeurs open source conduite par Paul Davis (qui a gagné un Award Open Source en 2004 pour son travail) et il a été une pièce maîtresse de l'infrastructure et un standard de-facto pour les logiciels audio professionnel sous Linux depuis son inclusion en 2002.
Le serveur est FLOSS, sous licence GNU GPL, tandis que la bibliothèque est sous licence plus permissive GNU LGPL.

## Usage

Le serveur de son est exécuté comme démon à l'aide du programme jackd. Il peut être contrôlé grâce à différentes interfaces graphiques dont la plus connue est qjackctl.
JACK permet d'interconnecter les entrées et les sorties de tous ses clients très simplement : la souris est utilisée pour faire les connexions de la même manière qu'on utiliserait des câbles sur une scène ou dans un studio d'enregistrement. Cela permet de réaliser tout montage que l'utilisateur jugerait utile.

## Implémentation

JACK peut utiliser les drivers matériels ALSA, PortAudio, CoreAudio, FreeBoB, FFADO et OSS. De plus, sont inclus un driver factice (utile si aucune sortie son n'est désirée, par exemple pour un rendu offline) et un driver Audio-sur-UDP (utile pour le fonctionnement du serveur sur un réseau, lequel doit être de préférence dédié). Il tourne sur Linux, macOS, Solaris, Windows, FreeBSD, OpenBSD et NetBSD. L'API de JACK est standardisé par consensus et il en existe deux implémentations compatibles : jack1, qui est implémenté en C, et jack2 (à l'origine jackdmp), a été implémenté en C++ sous la direction de Stéphane Letz. Cette dernière implémentation est en développement rapide, elle a introduit la gestion multi-processeurs et le support pour d'autres systèmes d'exploitation que Linux.
Contrairement aux autres serveurs son où ce sont les applications qui envoient leurs données au serveur, JACK utilise un modèle où le serveur impose quand, et dans quel ordre, les applications doivent lui envoyer les données audio ou MIDI.

## Ordonnancement à faible latence

Les besoins d'ordonnancement à faible latence de JACK ont été une des forces conductrices derrière l'effort d'optimisation temps réel de la série 2.6 actuelle du kernel Linux$^,$, alors que les performances initiales de latence avaient été décevantes en comparaison avec l'ancienne série 2.4. Le travail d'introduction du temps réel dans le kernel Linux est en cours. De nombreuses améliorations de l'ordonnancement ont déjà été réalisées et la branche -rt a été créée pour des optimisations plus intrusives avec la version 2.6.24, et plus tard du correctif CONFIG_PREEMPT_RT. À cette date, une des fonctions principales du correctif -rt (le force threaded irq handlers) est en cours d'incorporation dans le kernel Linux.

## Gestionnaires de session

Il existe trois principaux gestionnaire de sessions JACK, que l'on retrouve sous les différentes distributions Linux ayant un support audio avancé :
* Ladish et son interface utilisateur graphique Gladish permet de la manipuler. C'est une évolution de LASH, qu'il remplace, qui remplace lui même LADCCA.
* Jack-session
* Non session manager

## Applications qui supportent JACK

Une grande quantité d'applications sont compatibles avec JACK et leur liste s'allonge avec le temps. Ce nombre élevé d'applications et la possibilité de les interconnecter librement font que les seules limites pratiques d'un système informatique audio qui utilise ce serveur son sont la puissance de la machine et l'imagination de l'utilisateur. Les versions récentes de JACK permettent également de distribuer les calculs audio sur plusieurs machines, via le réseau.
Des distributions Linux comme Kxstudio, LibraZiK, Ubuntu Studio, Demudi, le groupe de paquets pro-audio d'Arch Linux en ont fait leur serveur son par défaut.