Historique: QJackctl - associer deux cartes son
Aperçu de cette version: 1
- «
- »
Jackd : associer deux cartes son
Il y a des cas ou on voudrait pouvoir associer deux cartes son pour une application bien particulière. Un de ces cas est celui qui nécessite une carte en capture et une autre en playback comme s'il s'agissait d'une même carte.
Voila mon utilisation bien particulière
Problème posé
Je dispose d'une platine vinyle USB, d'une carte son interne, et d'une carte son USB M-audio Fast Track Pro. Mon désir est d'écouter des disques soit sur ma carte son interne soit sur ma carte son USB et de pouvoir les enregistrer.
Mes cartes
Copy to clipboard
$cat /proc/asound/cards 0 [SB ]: HDA-Intel - HDA ATI SB HDA ATI SB at 0xfccf4000 irq 16 1 [CODEC ]: USB-Audio - USB Audio CODEC Burr-Brown from TI USB Audio CODEC at usb-0000:00:13.0-1, full speed 2 [NVidia ]: HDA-Intel - HDA NVidia HDA NVidia at 0xfe97c000 irq 19 3 [Pro ]: USB-Audio - FastTrack Pro M-Audio FastTrack Pro at usb-0000:00:12.0-5, full speed $
- La carte 0 est ma carte son interne
- La carte 1 appelée CODEC est ma platine vynile USB
- La carte 2 est inutilisée (HDMI de ma carte vidéo).
- La carte 3 est ma carte Fast Trac Pro appelée Pro
Voici donc une solution :
J'ai repéré qu'avec Jack on peut construire une interface composée d'une carte en Playback et une autre en Capture. Pour voir les paramètres : man jackd.
Premier essai
Voici les paramètres que j'utilise dans un premier temps pour lancer jackd :- -d alsa => pour utiliser alsa
- -C hw:1 => ma platine vinyle USB
- -P hw:0 => ma carte son interne.
J'ai donc lancé jack dans un terminal avec les paramètres suivants :
Copy to clipboard
jackd -d alsa -C hw:1 -P hw:0 -n vynil-int
le paramètre -n pour créer une instance de serveur jack appelée vynil-int (*).
Après cela j'ai lancé Audacity, et dans préférences j'ai paramétré l'interface avec JACK Audio Connection Kit. Le périphérique de lecture système et le périphérique d'enregistrement system sont imposés.
Pour vérifier mes niveau d'enregistrement j'ai voulu connecter Meterbridge.
J'ai lancé Qjackctl et cliqué sur démarrer. Cela à pour effet pour Qjackctl de prendre en compte le serveur jackd que j'avais lancé.
J'ai lancé Meterbridge, puis j'ai connecté system => bridge.
J'ai mis un disque et j'ai lancé l'enregistrement. J'ai mis sur pause et j'ai bien vu dans le fenêtre Connecter que PortAudio et system étaitent connectés.
Voila pour ma connexion carte interne et platine vinyle USB.
Deuxième essai
Pour connecter ma carte Fast track pro je n'ai eu qu'à remplacer le paramètre -P hw:0 par -P hw:3Automatisation de la solution
Le problème maintenant est que si on veut automatiser cette solution on ne peut pas compter sur les numéros des cartes USB car ils sont affectés dans un ordre aléatoire.Pour cela on remplace le numéro de carte son par le nom donné par la commande cat /proc/asound/cards :
Dans l'exemple plus haut, la carte 1 s'appelle CODEC et la carte 3 s'appelle Pro.
Ce qui fait que ma commande jackd devient :
Copy to clipboard
jackd -d alsa -C hw:CODEC -P hw:Pro -n vynil-ftp
Ajout des paramètres physiques
Les paramètres physiques des cartes sont pris par défaut si on ne les précise pas. On doit/peut définir tous les paramètres du setup de Qjackctl dans la commande jackd.Par exemple :
Copy to clipboard
jackd --realtime-priority 89 -d alsa -C hw:CODEC -P hw:Pro -p 128 -r 44100 -n vynil-ftp
Création de scripts
J'ai donc fait un script de lancement de jackd :fichier start_vynil-ftp.bash :
Copy to clipboard
jackd --realtime-priority 89 -d alsa -C hw:CODEC -P hw:Pro -p 128 -r 44100 -n vynil-ftp & echo kill -9 $! >~/testMAO/kill_vynil-ftp.bash chmod +x ~/testMAO/kill_vynil-ftp.bash
Ce script lance jackd en arrière-plan avec les options que j'ai choisies et puis crée un script kill_vynil-ftp.bash et le rend exécutable. Cela me dispense de faire un ps pour connaitre le PID de jackd pour le tuer. Bien sur le répertoire testMAO est à la convenance de l'utilisateur.
Automatiser avec Qjackctl
J'ai essayé sans succès de lancer ces scripts dans les Options de Qjackctl mais cela ne fonctionne pas. Le start se lance mais le kill est exécuté immédiatement après. De plus les options ne sont pas conservées dans le préréglage. Donc pour le moment je lance le start et le kill en dehors de Qjackctl.Il y a peut-être d'autres outils qui permettent de faire cela mais je ne les connais pas.
Résumé
En résumé je dois faire dans l'ordre :1) lancer le script start_vynil-ftp.bash
2) lancer Qjackctl
3) lancer Meterbridge
4) connecter system à bridge
5) lancer Audacity
6) paramétrer Audacity pour qu'il utilise jack
7) travailler avec Audacity
8) lancer le script kill_vynil-ftp.bash
(*) Dans mon expérimentation, le nom donné par le paramètre -n n'a aucune importance car le jackd ainsi lancé est celui qui sera pris par Qjackctl quelque soit l'interface choisie dans le setup. Et donc si on veut changer d'interface il faut arréter la commande jack par CRTL_C ou par kill -9 sur son process ID.
Claude Simon