Le serveur son JACK
Par Gisles le mercredi 13 février 2008, 04:23 - * Mixage Sonore - Lien permanent
La plupart des utilisateurs Linux savent ce qu'est un serveur. Un serveur a pour but d'éliminer des transactions de données qui surchargerait une application si celle ci devait les gérer. Par exemple, le serveur de controle des services vidéo, le serveur X permet de controller les services d'une carte vidéo sans que celle-ci soit organisée par une application graphique. Ainsi, plusieurs applications peuvent fonctionner sans s'immiscer dans les principes de gestion de flux d'informations d'une carte vidéo, puisque le serveur gère ce périphérique. Bien des ressources sont alors économisées et bien des conflits logiciels résolus.
Un serveur audio pilote les services d'une carte son. Ces périphériques audio incluent, les cartes sons, les chipsets son intégrés à la carte mère et tout autre matériel audio, téléphone, carte télévision, radio... Écouter un disque ou simplement enregistrer, ces fonctions basiques ne requièrent pas les besoins d'un serveur son. Par contre, dès qu'il est question de piloter différents flux audio, le serveur son devient totalement nécessaire. C'est en effet lui et lui seul qui va gérer les formats de son, les fréquences d'échantillonage, les entrées et les sorties et bien d'autres caractéristiques d'un flux audio.
Si votre domaine d'activité utilises des autoroutes de flux audio, vous devez nécessairement utiliser le serveur son JACK.
Le développeur Paul Davis a créé la plus remarquable des applications audio Opensource, le JACK Audio Connection Kit. Plus connu sous le nom de JACK. Jack est spécialement conçu pour les systèmes à basse latence et les hautes demandes de traitements audio. Les peurs professionnels de l'audio sont les retards (delays) de lectures et d'enregistrements audibles à l'oreille. Toutes les opérations de transmissions audio peuvent ainsi être bloquées par la configuration système ou transitent les traitements de l'information. Il en cause alors des craquements (drop out) et retards (Xruns) dans le son. Le système de basse latence est spécialement conçu pour évincer ces désagréments.
Jack supporte toutes les transactions audio entre les différentes applications clientes de jack dans un système de basse latence. Jack supporte les pilotes ALSA de vos cartes sons, gère les différentes taches de fond des sytèmes de son tel que ALSA, OSS, PortAudio, CoreAudio, FreeBob (FFADO), les connections entre les applications, détecte les craquements et retards, configure vos traitements basse latence, synchronise via une interface de pilotage (transport) vos applications audio. Cette interface nous invite également à lire le journal de bord de Jack, détection des Xruns et changement, très appréciables lors des tests de configurations.
Jack ne gère pas les pilotes des cartes sons, cette tâche revient à ALSA ou à OSS. Ses principes sont de traiter les flux audio, leurs entrées et leurs sorties à travers votre machine, vos applications et les périphériques audio dédiés.
Installer JACK
De nombreuses distributions fournissent dans leurs dépots logiciels officiels, le serveur son. Parmi celle-ci, Ubuntu, MAndriva, OpenSuse. Mais aussi les distributions orientées plateforme audiovisuelle qui sont entre autres, UbuntuStudio, Apodio, JackLab, Planet CCRMA, Agnula DeMuDi, 64 Studio... L'installation par les dépôts logiciels se fait donc en total transparence.
- Si vous désirez vous même compiler le programme, vous devez avoir un noyau Linux récent > version 2.4. Vérifier que vous ayez le fichier systeme tmpfs actif. Dans la plupart des distributions moderne celui-ci devrait l'être. Vous pouvez le vérifier en tapant : cat /proc/filesystems.
- Ensuite, vous devez monter un partage de la mémoire du fichier système, /dev/shm, créez vous même ce répertoire et ajouter dans votre fichier de montage /etc/fstab, les lignes suivantes :
- shmfs /dev/shm shm defaults 0 0
- Téléchargez les sources : http://jackit.sourceforge.net
- Décompactez l'archive, dans le répertoire que vous allez créer, lisez le README pour les mises à jour.
- Invoquez ./configure --help afin de repérer les options.
Les outils de compilations sont courant et vous devriez les avoir préinstallés, comme GCC.
Éditez :
- ./configure (plus vos options);
- make;
- make install.
Et voila, jack est prêt à être démarrer.
Utiliser JACK
Le serveur son peut être mis en route en lançant Jackd ou soit Jackstart. Les options sont les mêmes quelque soit la méthode de lançement. d'une façon général, un noyau patché basse latence de version 2.4 préfère jackstart, tandis qu'un noyau de version 2.6 souhaite jackd, nous indique le manuel.
Une relative simple ligne de commande pour démarrer jackd : jackd -R -d alsa -d hw:0. Dans cet exemple, Jackd est démarré avec les options d'utiliser le système temps réèl "realtime" -R, en utilisant -d les pilotes de son alsa et -d la première carte son reconnu par le système hw:0.
Passons à une ligne de commande de lancement plus laborieuse : jackstart -R -d alsa -d hw:1 -p 512 -r 48000 -z . Bien, pas de problème majeur au début de la commande, lancement de jackstart, avec le temps réèl, pilote alsa utilisé et activé sur la seconde carte son (hw:1). Nous y ajoutons la taille de la mémoire tampon, Buffer Size, -p 512, soit 512 Ko. Cette allocation mémoire est partagée avec toutes les applications audio clientes de jack. A cela, nous précisons la qualité de l'échantillonnage audio, -r 48000, soit 48 KHz, qualité DAT et taux d'échantillonnage par défaut de la vidéo. Enfin , l'option -z indique le dithering par défaut. Le dithering interpole des points manquant si il y'avait eu un défaut de conversion analogique/numérique. Ces points manquant sont simulés en restitutions audio comme une légère saturation analogique. Bien des ingénieurs du son ont un attachement à cette faible saturation lors des prises de son analogiques et non numériques. Il est souvent entendu que cette technique d'acquisition sonore analogiques apporte de la chaleur au son. Une carte son supportant la résolution de 24 bit ne devrait pas recourir à cette méthode de dithering, qui finallement est en fait un cache misère numérique.
Voyons ces options en détails...
- -R --realtime : lance l'application jack en prenant en charge l'aspect du traitement temps réèl du flux audio. Normalement, vous devez obligatoirement activer cette option. Mais, assurez-vous soit d'être en root ou utilisateur possédant le noyau basse latence.
- -m --no-mlock : cette option peut être nécéssaire de libérer la mémoire RAM si jack et toutes ses applications clientes avaient à la saturer.
- -u --unlock : libère de l'espace mémoire RAM pour d'autres applications que celles relatives à jack. Ce peut être le cas pour le simulateur windows, Wine, pour l'utilisation de plugins VST.
- -s --softmode : Ce mode désactive le journal des xruns des pilotes Alsa. Il est conseillé lors d'utilisations en performances Live.
- -S --shorts : ce mode force jack à fonctionner en résolution 16 bits que ce soit en entrée ou en sortie de flux audio. Jack, par défauts, utilise une résolution de 32 bits flottante. Ce mode peut servir pour des cartes son de basse résolution afin d'avoir une meilleure édition du journal des erreurs.
- -M --hwmeters : ce mode va disparaître dans les futures versions. Peu de cartes son le supporte et est rarement utilisé. Ce mode mesure les capacités d'une carte son.
- -z --dithers : L'option -z indique le dithering par défaut. Le dithering interpole des points manquant si il y'avait eu un défaut de conversion analogique/numérique. Ces points manquant sont simulés en restitutions audio comme une légère saturation analogique.
- -P --realtime-priority : configure le degré de priorité du traitement temps réèl. Par défaut, le laisser en valeur 10. Cependant, vous pouvez lui donnez une priorité jusqu'à 70 si vous avez un noyau bien configuré. Le serveur son dans ce cas sera prioritaire sur votre système Linux.
- -p --port-max : Cette option configure le nombre de sortie audio pouvant être gérer par jack. La version de 128 sorties par défaut devrait être suffisament raisonnable, mais vous pouvez pousser la valeur jusqu'à 512, si votre machine vous le permet.
- -d --driver : vous sélectionnez le choix des pilotes. Couramment c'est soit alsa, freebob ou OSS. Pour les tests, choisissez Dummy. mais vous avez la possibilité du coreaudio et du portaudio.
- -r --rate : vous choisissez ici la fréquence d'échantillonage de votre carte son. Par défauts, la qualité est de 48 khz. pour une carte son basique, choisissez 44KHz, ce n'est pas sure qu'elle supporte une résolution supérieure, testez-là.
- -p --period : le nombre d'images découpées par le processeur Jack. Par défauts 1024, une valeur inférieure augmente le sytème de basse latence. La période divisé par le ratio d'échantillonage est égale à la latence mesurée en seconde. Testez votre meilleurs rapports période/latence, en évitant les xruns (le nombre d'applications clientes en cours d'utilisations est aussi à prendre en compte, a chaque projet sa configuration).
- -i inchannels ; -o outchannels : par défauts le nombre d'entrées et de sorties mono de votre carte son.
- -n --nperiods : spécifie le nombre de période stocké dans la mémoire tampon de votre carte son. Par défauts, 2.
- -C capture ; -P playback ; -D, --duplex : Indique si votre carte son enregistre seulement, ou est en mode lecture ou bien est en full duplex, c'est à dire en lecture et en enregistrement simultanément. Peut être très utile.
L'interface graphique de jack , QJackctl
Nous avons vu l'utilisation de jack en ligne de commande. Il est nettement plus simple d'utiliser l'interface graphique de QJackCtl, développé par Rui Nuno Capela. En une seule fenêtre, nous pouvons configurer les options de Jack et le contrôler. Mais, QJackCtrl peut aussi nous permettre de lier les flux audio et midi entre les différentes applications clientes. Vous pouvez sauvegarder vos connections audio et midi établis par l'interface PatchBays. Vous pouvez également synchroniser ces mêmes applications entre-elles grâce à des fonctions comme lecture, stop, redemarrer avec la fonction transport.
D'autres interfaces graphiques du serveur son jack existent tel que celle de Dave Robillard nommée patchage et celle de Matthias Nagorni nommée QJackConnect.
Voici un pas à pas de configuration de jack. Les captures d'écran ont été faites sur une installation récente de Ubuntu Studio avec une carte son M-Audio Delta 44. Chaque carte son comprendra des réglages différents. Mais ce tutoriel, vous informe de l'idée générale.
Vous lancez JACK par le menu application de Gnome. Voici JACK :
Cliquez sur le bouton Setup, et regardons l'onglet settings :
Nous modifions la configuration par défaut par les quatre étapes suivantes :
- 1. Sélectionnez votre carte son dans la liste déroulante
- 2. Activez le Realtime par la boîte à cocher
- 3. Activez le Monitoring par la boîte à cocher
- 4. Configurer le Frames/Period en ayant la plus basse latence possible
Validez par ok et dans l'interface JACK lancez le serveur son en cliquant Start :
Si à cette étape jack ne démarre pas, décochez la boîte Realtime. Dans l'interface principale de jack en cliquant sur le bouton Messages, vous obtenez un rapport d'erreurs. Soyez sûre également qu'aucune application n'utilise votre carte son, genre une vidéo dans le navigateur Firefox en lecture ou non. Voici le rapport de la fenêtre message d'un lancement du serveur son JACK réussi.
Maintenant que le serveur son marche, nous allons pouvoir activer des options essentiels :
- 1. Activer l'apparition de l'icone jack
- 2. Si vous lancez une application cliente de JACK celui-ci se lance automatiquement
Jack étant configuré afin qu'il soit caché par les applications (focus), l'icone vous permet de le passer en premier plan et vous informe sur les XRuns.
Si des Xruns apparaissent, configurez à nouveau le rapport Frame/Period
Configurez votre volume sonore avec Alsa Mixer, à l'aide de la console, le terminal, tapez alsamixer. En utilisant la touche tabulation et les touches de navigation de votre clavier, vous allez pouvoir régler les niveaux de lecture et d'enregistrement de votre carte son.
Ici, les niveaux de lecture, Playback.
Là, les niveaux d'enregistrement, capture.