Historique: Net Jack
Aperçu de cette version: 22
Netjack
Cette page représente les expériences communes obtenues entre dharanamrs et Mysth-R à la recherche d'une simple synchronisation de deux séquenceurs 😊Table des matières
Introduction
- Netjack permet de relier deux ou plusieurs ordinateurs en audio et midi par le réseau, et de synchroniser le transport jack.
- Netjack permet de faire de la musique à deux ou plusieurs reliés par le réseau!
Netjack est une fonctionalité de jackd, intégrée depuis la version 0.116. Elle permet d'utiliser un montage serveur-client entre deux daemons jack présents sur deux ordinateurs reliés par le réseau. L'ordinateur distant client devient une source d'entrée/sortie Audio, MIDI et transport sur l'ordinateur serveur. Netjack utilise le protocole UDP.
La mise en place sera plus conviviale une fois que la version 2.0 de jackd sera disponible, mais il fonctionne déjà très bien, les auteurs de cette page l'ont testé dans différentes configurations.
Une documentation préliminaire officielle existe à cette url.
Guide de démarrage rapide (style mémo, regardez plus bas si vous essayez la première fois)
Connexion ethernet locale:
-Branchez les deux machines sur un switch ethernet-Attribuez des adresses ip aux deux machines
-Ouvrez un port UDP (exemple 5060) sur les deux machines (alternative: desactiver le pare-feu)
Sur le serveur:
-Lancez qjackctl habituellement
-Tapez
jack_netsource -r5060 -p5060 -h IPdelautremachine
Sur le client:
-Tapez
jackd -R -l 5060 -d net
-Lancez qjackctl habituellement
Ensuite
-Dans qjackctl du serveur connectez netsource vers system out
-Dans qjackctl du client connectez tout normalement
Connexion par internet ADSL (raisonnable à partir de DSL 4Mbit/s):
-Determinez les deux adresses ip extérieures-Forwardez le port choisi et desactiver un filtre icmp éventuel sur les deux routeurs
Sur le serveur:
-Lancez qjackctl habituellement
-Tapez
jack_netsource -r 5060 -p 5060 -c qualité_comp -l latence -h IPdelautremachine
Sur le client:
-Tapez
jackd -R -l 5060 -d net
-Tapez
alsa_out -d hw:x -f 100000
Ensuite
-Dans qjackctl du client connectez à alsa_out tout ce que vous souhaitez entendre localement
Principe
Ces deux illustrations montrent les possibilités et utilisations typiques de Netjack.Chaque machine fait tourner un daemon jack. Sur le serveur, le "backend" est alsa ou freebob, c'est à dire, il tournera comme d'habitude avec l'interface audio présent. Sur le client, le backend est 'net', c'est à dire jack n'utilise pas de carte son, mais le réseau pour envoyer les données. Ces données sont acheminées par jack_netsource sur le serveur. Jack_netsource produit un port entrée/sortie supplémentaire dans jackd du serveur. L'intégralité de l'information audio n'est convertie qu'à la carte son du serveur. Le client n'a même pas besoin de carte son (!) en cas d'utilisation locale. En revanche si un monitoring sur la machine client est nécessaire (si on n'est pas dans la même pièce), les utilitaires alsa_in/out sont là pour ça.
Si les deux ordinateurs se trouvent dans la même pièce reliés par éthernet (100Mbit/s en duplex!), aucune compression n'est nécessaire même pour plusieurs canaux audio duplex, et l'ordinateur client envoit ses données audio et MIDI directement par ethernet à l'autre serveur jack.
Dans le cas de la connexion par intermédiaire d'un routeur, un codec appellé CELT assure la compression des données audio afin d'être compatible avec le débit disponible. Il faut assurer que les ports correspondants sont forwardés vers les ordinateurs et que la bande passante du réseau dans les deux directions upload/download est suffisante (de l'ordre de 50kByte/s en upload suffisent pour une qualité raisonnable). Pour assurer une entrée/sortie audio physique pour le client, on se sert d'alsa_in et alsa_out.
Prérequis dans tous les cas
- La version de jackd doit être au moins 0.116.1
- La version du codec CELT (qui permet la compression audio avec une latence basse à travers le réseau) doit etre la meme version sur les 2 ordinateurs.
- Une connexion ip active sur chaque machine
- Un port UDP ouvert (le numéro peut être choisi) sur chaque machine
- Pas de filtrage icmp
- Un bon test est de s'envoyer des requetes mutuellementping IPdelamachine
➡️ L'adresse IP est locale si la connexion n'est pas à travers l'Internet. La commande ifconfig permet de l'obtenir. Si la connexion est à travers l'internet il faut obtenir l'adresse IP externe attribuée en général dynamiquement par le fournisseur. Elle se trouve sur la page de configuration du routeur.
Mise en route
Il faut décider quelle machine sera serveur et quelle machine sera client. Comme montré sur les figures, l'audio est envoyé par jack uniquement sur la carte son du serveur. En général, le serveur sera donc la machine avec la meilleure carte son. Le client n'a même pas besoin de carte son (!) en cas d'utilisation locale. En revanche si un monitoring sur la machine client est nécessaire (si on n'est pas dans la même pièce), les utilitaires alsa_in/out sont là pour ça.Connexion par une liaison ethernet dans un réseau local: cable croisé ou switch
Sur la machine serveur
-Lancez qjackctl habituellement, puis dans une fenêtre terminal, tapezjack_netsource -p 5060 -h IPdelautremachine
IPdelautremachine est l'adresse ip de l'ordinateur client. On peut la renseigner en tapant ifconfig en tant que root.
Sur la machine client
-Dans un terminal, tapezjackd -R -l 5060 -d net
-Lancez qjackctl habituellement
-Connectez tout habituellement dans qjackctl
Vous pouvez maintenant entendre les sons produits sur le client sur la carte audio du serveur. Les transports jack sont synchronisés.
Pour entendre le son du client sur sa carte son interne également, tapez
alsa_out -d hw:0 -f 100000
Vous verrez une sortie supplémentaire apparaitre dans qjackctl à laquelle vous devez aussi connecter les sources Audio.
(Image à ajouter: alsa_out dans qjackctl)
Les connexions à faire dans Qjackctl
Sur le serveur vous verrez
- une entrée/sortie audio supplémentaire apparaître dans qjackctl onglet AUDIO: netsource
- une entrée/sortie MIDI apparaître dans qjackctl onglet MIDI (non ALSA): netsource
L'image suivante montre les entrées netsource dans qjackctl. Toutes les sources connectées à netsource passeront par le réseau.
Connectez netsource à la sortie system et toutes vos sources audio du serveur à la sortie netsource pour les acheminer du ou vers le client.
Pour les connexions MIDI ALSA:
Pour connecter des applications MIDI ALSA, on peut se servir de l'utilitaire a2jmidid. Pour envoyer des données MIDI de l'interface UA-25 vers le réseau, il faut connecter les entrées/sorties 'netsource' à 'a2jmidid Through', et dans l'onglet ALSA on connecte l'UA-25 à 'MIDI Through' également'. C'est montré dans l'image suivante:
Onglet MIDI
Onglet ALSA
Connexion par internet
En plus des points précédents, il faut assurer le suivant sur les deux postes à relier:- Le port UDP choisi doit être "forwardé" ("ouvert") du monde extérieur vers l'ordinateur local. Ceci peut nécessiter des changements sur le pare-feu de votre routeur et votre ordinateur. C'est le même principe que pour ouvrir les ports pour amule. Par exemple si vous êtes en LowId dans amule, c'est que vos ports sont mal ouvert. Dans un tel cas, netjack ne fonctionnera pas.
- Les deux ordinateurs doivent répondre à une requête 'ping' provenant d'internet (pas de filtre icmp)
- jack doit être compilé avec le codec celt (de préférence celt>0.5), ce qui est le cas avec les paquets des distributions
- il est important de disposer des utilitaires alsa_in et alsa_out. Ceci est le cas avec les paquets des distributions.
Sur la machine serveur
-Lancez qjackctl habituellement-Dans une fenêtre terminal, tapez
jack_netsource -h IPdelautremachine -p portchoisi -c compr -l lat
-IPdelautremachine est l'adresse ip de la machine distante. Ce n'est pas l'adresse locale commençant par 192.168., mais l'adresse extérieure. On peut la renseigner en se connectant sur le routeur ADSL.
-portchoisi peut être 5060 par exemple, celui-ci est utilisé par la téléphonie sip également
-compr: un chiffre déterminant la qualité Audio et donc le débit nécessaire. Pour internet, compr est entre 16 et 120. Plus bas est compr, plus bas sera le débit. Si compr=100, on aura besoin d'environ 80 kByte/s en up- et download pour 2 canaux audio (performance d'une ligne ADSL 8Méga).
-lat: la latence attendue en générale entre 20 et 100 (unités non connues)
➡️la commande jack_netsource --help donne une liste des autres options
Sur la machine client
-Tapezjackd -R -l 5060 -d net
-Lancez qjackctl habituellement
-Connectez tout habituellement
Pour entendre le son du client sur sa carte son interne également, tapez
alsa_out -d hw:x -f 100000
x étant l'identification de la carte son.
Les connexions dans qjackctl seront les même pour internet que celles montrées plus haut pour l'utilisation du réseau local.