Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]


Informations du tutoriel :
  > But : Associer deux cartes son comme s'il s'agissait d'une même carte
  > Date : dernière mise-à-jour le 19 Mars 2012
  > Auteur(s) : Claude Simon (cjpsimon).
  > Fil de forum lié

Intro : 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 (enregistrement) et une autre en playback (écoute) comme s'il s'agissait d'une même carte.
Cette page explique une des manipulations possibles pour obtenir ce résultat avec Jack.

Problème

Voila mon utilisation bien particulière :
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

$ 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 vinyle 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

Associer deux cartes son

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 :

jackd -d alsa -C hw:1 -P hw:0


Tests


Après cela j'ai lancé Audacity, et dans les 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 système 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 (la carte son) étaient 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:3

Automatisation de la solution

Pour automatiser le procéder, il faut définir le numéro des cartes son une bonne fois pour toutes, car ces numéros peuvent changer au redémarrage.
Pour celà il y a deux solution :
? La première agit sur ALSA et est décrite plus en détails sur cette page,
? La deuxième est une sorte de contournement et agit sur Jack. C'est celle-ci que j'ai choisi pour ce tuto mais elle ne fonctionne pas dans le cas ou plusieurs des cartes son ont un nom similaire.

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 :
jackd -d alsa -C hw:CODEC -P hw:Pro


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 :
jackd - -realtime-priority 89 -d alsa -C hw:CODEC -P hw:Pro -p 128 -r 44100


Création de scripts

J'ai donc fait un script de lancement de jackd :

jackd -P 70 -d alsa -C hw:CODEC -P hw:Pro -p 128 -r 44100 -n 2&
jackd_ID=$!
kill -s KILL ${jackd_ID}


Ce script lance jackd en arrière-plan avec les options que j'ai choisies et récupère l'ID du process de jackd pour pouvoir le tuer quand qjacckctl est terminé.

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 le start et le kill de jackd doivent se faire en dehors de Qjackctl.

Il suffit pour cela d'insérer le démarrage de Qjackctl juste avant le kill de jackd dans le script.

jackd - -realtime-priority 89 -d alsa -C hw:CODEC -P hw:Pro -p 128 -r 44100 &
jackd_ID=$!
qjackctl
kill -s KILL ${jackd_ID}


De cette manière quand on quitte Qjackctl, jackd est immédiatement tué.

Résumé

En résumé on doit faire dans l'ordre :

  1. lancer le script
  2. lancer Meterbridge
  3. connecter system à bridge
  4. lancer Audacity
  5. paramétrer Audacity pour qu'il utilise jack
  6. connecter les éléments de la configuration
  7. travailler avec Audacity
  8. quitter Meterbridge
  9. quitter Audacity
  10. quitter Qjackctl


Solutions alternatives

Il existe plusieurs solutions alternatives, décrites sur la page Jack et plusieurs cartes son.

En particulier, il est possible d'obtenir le même résultat grace aux programmes alsa_in et alsa_out. Cette solution est plus souple car on peut combiner plus de deux cartes son, mais elle est beaucoup plus consommatrice de CPU (15% à 26 % selon les cartes ajoutées sur ma configuration). Voir le tuto d'utilisation d'alsa_in/out.

Dans le cas ou vous vouhaitez simplement utiliser une carte pour l'enregistrement et l'autre pour la lecture, je vous conseillerai donc la solution ce présent tuto et non celle d'alsa_in/out. Elle est simple et stable et n'occupe presque pas de temps processeur (1.1% sur ma configuration).

Remarques


Il est important de tuer jackd après la sortie de Qjackctl et cela dans le script, sinon, si on relance le script il ne marchera pas forcément et si on lance un script avec une autre configuration on ne saura pas dans quelle configuration on est.

De plus avant de quitter Qjackctl il faut impérativement fermer les applications qu'on a lancées, sinon elles ne répondent plus (en tout cas sur ma configuration).

Notez que je préfère effacer le fichier .jackdrc à la fin du script pour qu'une prochaine utilisation de Qjackctl ne soit pas perturbée.

Voir aussi : Scripts bash par cjpsimon






[+]

Collaborateur(s) de cette page : olinuxx , allany , utilisateur_anonyme , pianolivier et cjpsimon .
Page dernièrement modifiée le Mercredi 13 septembre 2017 18:58:47 par olinuxx.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

olinuxx, 11:48, ven. 15 mars 2024: Bonjour et bienvenue à Jerry cool
calixtus06, 18:03, mer. 13 mars 2024: Bonjour et bienvenue à tanguero :-)
olinuxx, 11:01, dim. 10 mars 2024: Bonjour et bienvenue à lolo cool
bda, 16:59, sam. 09 mars 2024: Chapeau pour l'édito. Vous êtes au top les gars :-)
allany, 07:20, jeu. 07 mars 2024: Ça ne fait jamais de mal, c'est l'éditorial ! [Lien]
olinuxx, 19:52, mer. 06 mars 2024: Bonjour et bienvenue à TrkNrk cool
calixtus06, 11:17, mar. 05 mars 2024: Bonjour et bienvenue à D752 :-)
calixtus06, 18:59, lun. 04 mars 2024: Bonjour et bienvenue à Hborsa et Adjudandouille :-)
olinuxx, 18:34, jeu. 29 Feb 2024: Bonjour et bienvenue à anto45500 cool
jujudusud, 23:38, mar. 27 Feb 2024: Venez participer à la joute numéro 17 : [Lien]
calixtus06, 18:36, jeu. 22 Feb 2024: Bonjour et bienvenue à nikartri et rckloar :-)
calixtus06, 10:15, mer. 14 Feb 2024: Bonjour et bienvenue à smonff, Alphascorpii, tadumtss et letoII :-)