Ceci est une ancienne révision du document !
JACK - Jack Audio Connection Kit
Il existe sur Ubuntu de nombreuses applications dédiées à la création musicale et au traitement audio en temps réel. Il est ainsi possible de faire de l'enregistrement audio multipiste et du MIDI simultanément, le tout avec quelques effets (réverbération, chorus, flanger, etc.) et des instruments virtuels comme une boîte à rythmes ou un piano dans un lecteur d'échantillons SoundFonts. On trouve aussi de nombreux outils : accordeur d'instrument, clavier MIDI virtuel etc.. Tout ceci est à quelques clics de l'utilisateur, encore faut-il configurer son système de manière à pouvoir pleinement en profiter.
C'est le serveur de son JACK qui permet d'utiliser tous ces logiciels ensemble et de manière optimale.
Présentation
JACK
Impossible actuellement de prétendre faire de la MAO sous GNU/Linux sans installer JACK au préalable. JACK est un serveur de sons. Il a l'avantage sur ses concurrents d'être taillé pour l'audio en temps réel, de permettre de router l'audio de toutes les applications et matériels compatibles avec une grande souplesse et de proposer quelques fonctionnalités propres à la MAO.
JACK permet de lier virtuellement les différents programmes manipulant le son entre eux, exactement comme on pourrait se servir de câbles audio avec des machines dédiées (séquenceurs, instruments, effets).
Cela permet d'envisager des interactions poussées entre les différents programmes, et incite les développeurs à concevoir des applications simples, dédiées à une tâche en particulier. C'est donc un univers assez différent de ce qu'on trouve sur Mac OS ou Windows : de gros studios (DAWs) à tout faire qui ne supportent pas la cohabitation.
Pour plus d'informations à ce sujet, voir le chapitre sur JACK et les gestionnaires de session.
Temps de latence
En MAO, on a souvent besoin de jouer le son en temps réel. Malheureusement le matériel électronique et les ordinateurs en particulier introduisent un problème qu'on appelle le temps de latence : il s'agit du délai qui apparaît entre le moment où on demande à la machine de reproduire un son (en appuyant sur une touche d'un clavier par exemple), et celui où le son sort effectivement des haut-parleurs.
Il est souvent court (on l'exprime en millisecondes), mais si on peut négliger ce délai lorsqu'on appuie sur une touche play, le problème devient beaucoup plus épineux pour jouer de la batterie électronique ou pour appliquer un effet sur sa voix sans s'entendre en double.
Diverses optimisations permettent de le réduire au maximum.
Installation
jackd
Pour installer JACK il suffit d'installer le paquet jackd.
JACK sink
Sur Ubuntu cependant le serveur de son installé par défaut est PulseAudio, et par défaut il accapare les ressources ALSA (la carte son), ce qui empêche le démarrage de JACK. Par ailleurs il est compliqué à arrêter (il redémarre automatiquement), et mieux vaut ne pas le supprimer parce que les applications audio du bureau sont généralement incapables d'utiliser JACK.
À moins d'utiliser 2 cartes sons différentes (une pour le bureau et une pour JACK), la solution est d'installer le paquet pulseaudio-module-jack. Ce logiciel permet d'utiliser PulseAudio et JACK en même temps, en créant une sortie virtuelle de PulseAudio vers JACK (au lieu d'ALSA) lorsque JACK est lancé, ce qui permet de conserver le son du bureau en toute circonstance.
Il faut pour cela choisir la sortie JACK sink dans les paramètres de Pavucontrol.
Priorité temps réel
Le noyau linux implémente des fonctionnalités permettant d'optimiser le calcul en temps réel, ce qui permet de traiter l'audio en outrepassant certaines règles auxquelles sont soumis les autres processus. Cela permet de réduire la consommation du processeur pour un même temps de latence. Ces fonctionnalités sont incluses de base dans le noyau depuis Ubuntu 10.04, donc plus la peine d'installer le noyau realtime ou lowlatency dont on entend encore parler dans les anciennes documentations.
Pour profiter de ces optimisations il faut tout de même activer cette option dans la configuration de JACK, et ajouter l'utilisateur courant au groupe audio :
sudo gpasswd -a $USER audio
Redémarrez ensuite votre session pour prendre en compte les changements.
Démarrage et configuration
Il y a plusieurs moyens de gérer JACK : en ligne de commande ou via une interface graphique. L'interface graphique est généralement préférable, puisqu'elle permet de visualiser les liens entre chaque ressource audio (matérielle ou logicielle). La ligne de commande est surtout pratique pour débugger le serveur.
Ligne de commande
Tout d'abord il faut repérer la carte son qu'on souhaite utiliser par son identifiant, pour cela on liste les cartes sons disponibles :
aplay -l
Ensuite pour lancer JACK en ligne de commande, on entre par exemple :
jackd -Rd alsa -d hw:0 -r 48000 -p 1024 -n 2
- L'option -R indique qu'il faut utiliser les fonctionnalités temps réel du processeur.
- La première option -d indique le driver à utiliser (on utilisera à peu près toujours alsa).
Les options suivantes sont des options propres à ALSA :
- -d est le numéro de la carte à utiliser, tel que retourné par aplay -l : hw:0, hw:1 …
- -r est la fréquence d'échantillonnage (sample rate) à utiliser, en hertz.
- -p est la période, le nombre d'échantillons que le processeur doit traiter à chaque calcul (period)
- -n est le nombre de périodes à stocker dans le tampon de donnée (buffer)
Pour le réglage de ces 3 derniers paramètres, consultez la section optimisation.
Interface graphique
Il existe plusieurs interfaces graphiques qui peuvent être d'une grande utilité que ce soit pour la configuration ou l'utilisation de JACK : QjackCtl est la plus courantes, on trouve aussi Cadence, Catia ou Claudia (qui sont des logiciels de la distribution KXStudio).
Pour QjackCtl, une fois lancé, il faut cliquer sur le bouton Réglages pour accéder à l'interface qui règle les paramètres de démarrage du serveur jack (onglets Paramètres et Avancé). Dans l'onglet Divers, on a la possibilité de demander à QjackCtl de lancer le serveur automatiquement quand il démarre. On peut ensuite cliquer le bouton Démarrer et apprécier d'éventuels messages d'erreur dans la fenêtre Messages (bouton du même nom).
En plus de configurer JACK, ces interfaces permettent en général de tirer des câbles audio virtuels entre les différentes applications (et avec le matériel), et parfois aussi de gérer des sessions, ce qui est une autre fonctionnalité importante de JACK.
Optimisation
Pour diminuer le temps de latence, il faut modifier certains paramètres de JACK : le nombre d'échantillons par période et le nombre de périodes par tampon.
Plus ces nombres sont petits, plus faible est la latence, mais plus le processeur est sollicité. Si il est sollicité à 100% le son décroche et on entend des sortes de crépitements. C'est ce qu'on appelle des XRuns.
On peut également diminuer la latence en augmentant la fréquence d'échantillonnage. Cela influe aussi (théoriquement) sur la qualité audio, mais 44100Hz ou 48000Hz sont généralement suffisants, l'oreille n'entend pas la différence avec 96000Hz. Ça peut être utile de monter au dessus pour un travail de mastering par ex.
Pour diminuer la consommation du processeur on peut aussi activer l'option temps réel ou évidemment réduire la consommation processeur générale de son système, en limitant l'execution d'éventuels processus inutiles en arrière-plan.
Utilisation
Bienvenue dans la MAO sous Linux !
Par défaut lorsqu'on ouvre une application qui utilise JACK, JACK connecte automatiquement sa sortie audio principale en direction de la sortie de la carte son, ce qui permet de l'entendre.
Mais lorsqu'on a lancé plusieurs applications audio, on peut connecter leurs flux audio et MIDI dans n'importe quel sens : machin enregistre truc, ressort dans bidule etc. On dit alors qu'on route le signal ou qu'on créé un patch. Une interface graphique s'avère alors bien utile.
Avec QjackCtl par ex. en cliquant sur le bouton Connecter, on affiche l'interface qui permet de tirer des câbles audio ou MIDI entre les différents ports des applications ou des périphériques audio ou MIDI.
JACK permet en plus de gérer des sessions, ce qui simplifie la gestion et le chargement d'un environnement créé (un patch) et de tous ses logiciels (et leurs sessions respectives).
Problèmes courants
le serveur JACK ne démarre pas
Ressources (carte son) indisponibles
Il est possible qu'un processus utilise déjà votre carte son. Cette commande permet de voir de quel processus il pourrait s'agir :
lsof +D /dev/snd
Temps réel indisponible
Le temps réel n'est peut-être pas correctement configuré. Testez JACK sans priorité temps réel avec une commande de ce type :
jackd -d alsa -d hw:0 -r 44100
Si c'est bon, c'est que le temps réel n'est pas disponible. Vérifiez que vous appartenez bien au groupe audio :
groups
Mauvaise carte son
Il arrive couramment qu'on se trompe lors de la configuration de JACK, ou qu'on change la configuration matérielle par ex. en branchant un écran HDMI (ce qui créé une nouvelle sortie audio).
Vérifiez le numéro de votre carte son avec :
aplay -l
Coupures du son et crépitements
Le processeur sature probablement. Augmentez les valeurs échantillons et périodes, voir optimisation.