Historique: jackdmp
Aperçu de cette version: 52
- «
- »
Le Jack nouveau arrive .... !
Liste des développeurs : Dmitry Baikov, Steven Chamberlain, Thom Johansen, Thibault LeMeur, Pieter Palmers, Tom Szilagyi, Andrzej Szombierski, Kjetil S.Matheussen, Pieter Palmers, Tim Blechmann, Marc-Olivier Barre, Nedko Arnaudov, Fernando Lopez-Lezcano, Romain Moret, Florian Faber, Michael Voigt, Torben Hohn, Paul Davis.
Jack2 est une nouvelle implémentation, en langage C++, du serveur Jack.
Il est fait pour les machines multi-processeurs et est disponible pour GNU/Linux, OSX, Windows et Solaris.
Jack2 est issu d'une branche de développement anciennement nommée JackdMP (Jack Daemon Multi Processeur), et il est maintenant dans la branche officielle de Jack.
Avec l'arrivée des machines multi-processeurs se pose la question de l'utilisation optimale des ressources de la machine, en particulier lorsque plusieurs applications audio fonctionnent simultanément.
Les dépendances de données entre les applications, liées à la topologie de leur connections, imposent un ordre dans l'activation des clients pour un cycle audio donné.
La version actuelle du serveur Jack effectue systématiquement une exécution séquentielle de tous les clients jack, ceci même si du parallélisme existe potentiellement dans le graphe des applications jack.
Par exemple si deux applications A et B sont connectées aux entrées audio, et envoient leurs flux de sortie sur une 3° application C, le serveur Jack effectuera la séquence d'activation "A,B,C" (ou peut être "B,A,C" en fonction de l'algorithme de tri interne). Ce graphe est un cas typique de modèle "parallélisable" sur une machine multiprocesseur: puisque A et B dépendent des mêmes entrées, ils peuvent être activés simultanément sur 2 processeurs dès que les entrées sont disponibles.
Le serveur Jack2 propose un modèle d'activation différent dit "flot-de données" qui garantit une activation au plus tôt des clients :
en gros un client est activé dès que l'ensemble de ses sources a été produit par les clients antérieurs dans le graphe.
Ce modèle étant une généralisation du modèle d'activation précédent, il fonctionne donc aussi sur une machine mono-processeur.
Jack2 est par ailleurs une nouvelle implémentation C++ du serveur Jack.
Elle corrige ou améliore plusieurs limitations de la version précédente :
Utiliser Jack2 au lieu de Jack1 est particulièrement intéressant lorsque la configuration des clients permet une activation en parallèle et peut amener une diminution de moitié de l'occupation CPU sur un machine avec 2 processeurs dans les cas les plus favorables (et plus sur des machines multi-coeurs en fonction de la topologie du graphe des applications). D'autre part, l'activation des clients et les connections ne provoquent plus de clics.
Notes importantes :
Désinstallation de Jack1
Il est nécessaire d'enlever les bibliothèques existantes de jack1 avant l'installation de jack2.
Si vous ne pouvez pas désinstaller jack1 pour des raisons de dépendances, vous pouvez déplacer ces bibliothèques dans un dossier de sauvegarde (attention, le rétablissement en cas de retour sur jack1 est un peu plus compliqué car il faut restituer des liens!).
Mais peut être que vous ne voudrez pas retourner sur jack1 😉.
Pour déplacer ces bibliothèques:
En complément, voir aussi ce fil de discussion.
Téléchargement
Installation
jack2 se lance également avec la commande jackd.
Il y a des options supplémentaires (notamment l'option -S si l'on souhaite travailler en mode "synchrone"), mais les options spécifiées dans QJackCtl fonctionnent.
Et voila, ça devrait marcher !
Et même courir 😉
Les options de jackd sont disponibles, par défaut le serveur est lancé en mode asynchrone:
Pour lancer le serveur en mode synchrone, il faut utiliser le paramètre -S :
Informations
Site web officiel : http://www.grame.fr/~letz/jackdmp.html.Liste des développeurs : Dmitry Baikov, Steven Chamberlain, Thom Johansen, Thibault LeMeur, Pieter Palmers, Tom Szilagyi, Andrzej Szombierski, Kjetil S.Matheussen, Pieter Palmers, Tim Blechmann, Marc-Olivier Barre, Nedko Arnaudov, Fernando Lopez-Lezcano, Romain Moret, Florian Faber, Michael Voigt, Torben Hohn, Paul Davis.
Présentation
Jack2 est une nouvelle implémentation, en langage C++, du serveur Jack.
Il est fait pour les machines multi-processeurs et est disponible pour GNU/Linux, OSX, Windows et Solaris.
Jack2 est issu d'une branche de développement anciennement nommée JackdMP (Jack Daemon Multi Processeur), et il est maintenant dans la branche officielle de Jack.
Avec l'arrivée des machines multi-processeurs se pose la question de l'utilisation optimale des ressources de la machine, en particulier lorsque plusieurs applications audio fonctionnent simultanément.
Les dépendances de données entre les applications, liées à la topologie de leur connections, imposent un ordre dans l'activation des clients pour un cycle audio donné.
La version actuelle du serveur Jack effectue systématiquement une exécution séquentielle de tous les clients jack, ceci même si du parallélisme existe potentiellement dans le graphe des applications jack.
Par exemple si deux applications A et B sont connectées aux entrées audio, et envoient leurs flux de sortie sur une 3° application C, le serveur Jack effectuera la séquence d'activation "A,B,C" (ou peut être "B,A,C" en fonction de l'algorithme de tri interne). Ce graphe est un cas typique de modèle "parallélisable" sur une machine multiprocesseur: puisque A et B dépendent des mêmes entrées, ils peuvent être activés simultanément sur 2 processeurs dès que les entrées sont disponibles.
Le serveur Jack2 propose un modèle d'activation différent dit "flot-de données" qui garantit une activation au plus tôt des clients :
en gros un client est activé dès que l'ensemble de ses sources a été produit par les clients antérieurs dans le graphe.
Ce modèle étant une généralisation du modèle d'activation précédent, il fonctionne donc aussi sur une machine mono-processeur.
Jack2 est par ailleurs une nouvelle implémentation C++ du serveur Jack.
Elle corrige ou améliore plusieurs limitations de la version précédente :
- par l'utilisation d'un modèle d'accès "lock-free" du graphe des applications, celui-ci peut être modifié (par exemple lorsque des nouveaux clients sont lancés, ou des nouvelles connections réalisées) sans interrompre le calcul du flux audio. Ceci évite les "clics" audio.
- par la mise en place de deux modèles de synchronisation pour le calcul d'un cycle complet du graphe: le mode "synchrone", similaire au modèle précédent de Jack ou le serveur "attend" le fin de l'activation de tous les clients pour produire les buffers de sorties, et le mode "asynchrone" ou le serveur utilise les buffers de sortie produits au cycle précédent sans avoir besoin de se synchroniser sur la fin de l'activation du graphe au cycle courant. Le mode synchrone est plus sensible en cas de déficience d'un client (en gros la non-activation d'un client bloque l'ensemble du calcul du graphe) alors que le mode asynchrone est plus robuste (une partie du graphe peut continuer à fonctionner) mais a le désavantage d'ajouter un buffer de latence supplémentaire.
Utiliser Jack2 au lieu de Jack1 est particulièrement intéressant lorsque la configuration des clients permet une activation en parallèle et peut amener une diminution de moitié de l'occupation CPU sur un machine avec 2 processeurs dans les cas les plus favorables (et plus sur des machines multi-coeurs en fonction de la topologie du graphe des applications). D'autre part, l'activation des clients et les connections ne provoquent plus de clics.
Notes importantes :
- L'utilisation de jack2 est donc intéressante y compris sur les machines mono-processeur, il est d'ailleurs utilisé par défaut dans certaines distributions audio (Studio To Go 2.0 par exemple). En effet, Jack2' supprime par exemple les clics audio lors des connections ou lancement d'applications.
- À partir de la version 0.62, le driver freebob a été ajouté.
Installation
L'installation sur GNU/Linux est seulement un peu délicate car elle se substitue à la version de jack1 installée sur la machine de manière à ce que les applications continuent de fonctionner avec le nouveau serveur, mais le code est stable.Désinstallation de Jack1
Il est nécessaire d'enlever les bibliothèques existantes de jack1 avant l'installation de jack2.
Si vous ne pouvez pas désinstaller jack1 pour des raisons de dépendances, vous pouvez déplacer ces bibliothèques dans un dossier de sauvegarde (attention, le rétablissement en cas de retour sur jack1 est un peu plus compliqué car il faut restituer des liens!).
Mais peut être que vous ne voudrez pas retourner sur jack1 😉.
Pour déplacer ces bibliothèques:
Copy to clipboard
su cd /usr/lib mkdir jack1.backup mv libjack* jack1.backup exit
En complément, voir aussi ce fil de discussion.
Téléchargement
- Télécharger la dernière archive de jackdmp sur la page http://jackaudio.org/download.
- L'extraire dans le répertoire de son choix. Copy to clipboardmkdir jackdmp mv jack-*.tar.bz2 jackdmp cd jackdmp tar -xvf jack-*.tar.bz2
Installation
- Dans un terminal, se déplacer dans le répertoire src :Copy to clipboardcd jack-1.9.3
- puis compiler grâce à la méthode waf :Copy to clipboard./waf configure --prefix=/usr ./waf
- puis l'installer en mode super-utilisateur :Copy to clipboard./waf install
Lancement de jack2 via QJackCtl
jack2 se lance également avec la commande jackd.
Il y a des options supplémentaires (notamment l'option -S si l'on souhaite travailler en mode "synchrone"), mais les options spécifiées dans QJackCtl fonctionnent.
Et voila, ça devrait marcher !
Et même courir 😉
Lancement de Jack2 en mode console
Les options de jackd sont disponibles, par défaut le serveur est lancé en mode asynchrone:
Copy to clipboard
jackd -R -d alsa -d hw:1
Pour lancer le serveur en mode synchrone, il faut utiliser le paramètre -S :
Copy to clipboard
jackd -S -d alsa -d hw:1