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

5 - Les serveurs son : Jack, PulseAudio et autres...

Dernier post

Jack connexion de deux cartes son

cjpsimon utilisateur non connecté
Si cela peut être utile à la communauté ...

Un cas particulier évoqué dans l'article : http://jackaudio.org/multiple_devices est de connecter une carte son en capture avec une autre en playback.

Problème posé :

Je dipose d'une platine vinyle USB, d'une carte son interne, et d'une carte son USB Maudio Fast Track Pro.

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


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.

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.

Les paramètres que j'utilise dans un premier temps :

-d alsa => pour utiliser alsa

-d vinyl-int => nom de l'interface qui sera créé

-C hw:1 => ma platine vinyle USB

-P hw:0 => ma carte son interne.

J'ai donc lancé jack avec les parametres suivants :

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

pour créer une interface vinyl-int.

Après cela j'ai lancé Audacity, 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.

J'en déduit donc que ma commande jackd a défini vinyl-int comme interface système.

Pour voir mes niveau d'enregistrement j'ai voulu connecter Meterbridge.

J'ai lancé Qjackctl puis Meterbridge.

Dans Qjackctl j'ai choisi l'interface vinyl-int au lieu de hw:quelque chose
puis j'ai connecté system => bridge.

J'ai mis un disque et j'ai lancé l'enregistrement. Ca marche. J'ai mis sur pose et j'ai bien vu dans la fenêtre Connecter que PortAudio et system étaitent connectés.

Voila pour ma connexion carte interne et platine vinyle USB.

Pour connecter ma carte Fast track pro je n'ai eu qu'à remplacer le parametre -P hw:0 par -P hw:3 et vinyl-int par vinyl-ftp et j'ai refait le paramétrage dans Qjackctrl. Cela marche nickel.

J'ai essayé la même chose avec alsa_in et alsa_out mais cela m'a généré trop de Xrun. Peut-être qu'un bon paramétrage permettrait d'améliorer les choses.

Quelqu'un a-t-il essayé ?

Il me reste a investiguer pour donner des noms à mes cartes son ou au moins des numéros invariables. J'ai vu que c'était possible. Si c'est possible je n'aurais plus qu'à me faire quelques scripts pour les config courantes que j'utilise.

Claude Simon

PS : j'ai un problème avec jaxk, il me faut cliquer plusieurs fois dans démarrer de Qjackctl pour lancer jack. C'est bizarre non ?

allany utilisateur non connecté
Salut !

Merci beaucoup pour cette explication claire et détaillée !

Si tu t'en sens, ce pourrait faire l'objet d'un bon petit tuto, à partir de ton post.
D'autant que ça touche une utilisation particulière des cartes-son mais aussi la numérisation de vynils.

La rubrique "bac à sable" permet d'essayer des mises en page et tu peux également contacter pianolivier qui est très au fait de l'édition, sur le site.

A+, merci,
Jacques.

cjpsimon utilisateur non connecté
J'ai fait des corrections dans le texte précédant car il y avait des bêtises.

J'ai essayé de voir un peu plus clair dans les arcanes de la commande jackd et pour l'instant il reste des zones d'ombre.
J'ai essayé d'automatiser à l'aide des scripts dans l'onglet Options de Qjackctl mais ce n'est pas satisfaisant car les scripts ne s'exécutent pas tous et pas comme je l'avais compris. Donc cela me parait pour l'instant un peu juste pour faire un tuto.

Donc voici la nouvelle version du texte, si quelqu'un peut m'éclairer ?

Problème posé :

Je dipose d'une platine vinyle USB, d'une carte son interne, et d'une carte son USB nm_audio Fast Track Pro.

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


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.

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.

Les paramètres que j'utilise dans un premier temps :

-d alsa => pour utiliser alsa

-d hw:4 => nom de l'interface qui sera créé

-C hw:1 => ma platine vinyle USB

-P hw:0 => ma carte son interne.

J'ai donc lancé jack avec les parametres suivants :

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. Je ne sais pas si on peut lancer plusieurs instance ??? ni a quoi sert ce nom ???

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.

Je pensais bêtement que ma commande jackd avait défini une interface par défaut, mais en fait elle s'est substituée à Qjackctl pour la partie lancement de jackd.

Pour voir 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. Ca marche. 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.

Pour connecter ma carte Fast track pro je n'ai eu qu'à remplacer le parametre -P hw:0 par -P hw:3

Le problème maintenant est que si on veut automatiser cette utilisation on ne peut pas compter 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 :

jackd -d alsa -C hw:CODEC -P hw:Pro -n vynil-ftp


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.

Les paramètres physiques des cartes sont pris par défaut si on ne les précise pas. On 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 -n vynil-ftp


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

fichier start_vynil-ftp.bash :

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.

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.

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


Claude Simon

cjpsimon utilisateur non connecté
J'ai mis dans la bac à sable un projet de tuto pour validation par les experts.

pianolivier utilisateur non connecté France
coucou,

Pour l'option -n (nom du serveur), il me semble que c'est utilisé dans le cas ou plusieurs instances de jackd sont lançées en parallèle. Je crois qu'une distrib' de MAO a un réglage dans le genre par défaut, j'essayerai de la retrouver si ça t'interesse.

Les lancements de scripts par qjackctl, tu l'auras remarqué, ne sont pas fait pour lancer jackd lui-même.

J'aurai eu tendance à penser que démarrer jack avec 2 interfaces différentes rende le même résultat qu'utiliser alsa_in/alsa_out. Je suis interressé par d'autres résultats de comparaison si tu pousses les tests plus loin.

Enfin, je t'encourage à recopier ton brouillon dans une nouvelle page, à linker dans les pages jack et Jack et plusieurs cartes son.

Merci de tes contrib' !

oliv'

pianolivier utilisateur non connecté France
Merci pour cette nouvelle page donc, je l'ai renommée vu que c'est aussi un tuto :
Jack Tuto Associer deux cartes son

Pour le paragraphe "Automatiser avec Qjackctl", je ne comprend pas bien ce que tu souhaites faire, peux-tu développer ?

oliv'

cjpsimon utilisateur non connecté
J'ai corrigé ce paragraphe en incluant le lancement de Qjackctl et le kill à la suite dans le script de start. Cela fonctionne et c'est plus simple. Je dirait même que c'est plus propre car ma carte FTP à du mal à être reconnue quand je la déclare comme interface dans Qjackctl (je doit la démarrer plusieurs fois) alors que là il n'y a aucun problème.

Claude Simon

pianolivier utilisateur non connecté France
Pour moi c'est une affaire qui roule, j'ai rajouté un lien dans le "portail tuto" et je mettrai aussi un lien temporaire en page d'accueil (actualités) sous peu.

oliv'

cjpsimon utilisateur non connecté
Je suis en train de tester le même principe d'association avec alsa_out et aussi alsa_in. Si j'obtient de bon résultats j'ajouterais une solution 2.

Claude Simon

cjpsimon utilisateur non connecté
Ca y est, j'ai réussi à utiliser alsa_in et alsa_out cela n'a pas été sans mal car j'ai eu du des difficultés à mettre au point un script propre qui fonctionnait (presque) toujours. Mon problème étant que quand je me trompais, les carte son USB n'étaient plus accessibles. ???

J'ai modifié le tuto pour prendre en compte les deux solutions et j'ai ajouté des remarques sur ces deux solutions et leur mise en oeuvre.

Claude Simon

pianolivier utilisateur non connecté France
Plop,

Citation :
J'ai modifié le tuto pour prendre en compte les deux solutions et j'ai ajouté des remarques sur ces deux solutions et leur mise en oeuvre.

Je suis moyennement d'accord avec ce choix, je t'explique pourquoi :
  • il existe plus de deux solutions
  • les différentes solutions documentées sont déjà regroupées dans la page Jack et plusieurs cartes son
  • il existe déjà un tuto pour l'utilisation de alsa_in/out : jack_alsa_io
Du coup je te proposes ceci :
Dis moi ce que tu en penses.

oliv'

ps : Fons Adriaensen vient de sortir la première version de zita-ajbridge, équivalent de alsa_in/alsa_out avec un meilleur resampling lien wink

cjpsimon utilisateur non connecté
En fait ce tuto ne fait que relater une expérimentation et si on l'éclate il risque de perdre son intérêt. Je suis loin de comprendre le fonctionnement d'alsa, jack et Qjackctl et donc d'avoir fait suffisamment le tour de la question pour avoir un avis pertinent sur ce que tu propose.

Mon but est d'avoir des scripts clé en main qui répondent à mes quelques petits problèmes en m'évitant de lancer un tas de commandes dans un terminal avant et après l'utilisation de Qjackclt et autres logiciels.

Les petits scripts que je présente sont susceptibles d'évoluer en fonction de ce que je vais encore découvrir.

Par contre l'ajout de liens vers les pages plus généralistes est certainement une bonne chose.

Voila ce que je pense, mais tu peux faire comme tu veux si tu pense que cela sera plus utile à la communauté.

Claude Simon

pianolivier utilisateur non connecté France
Je ne sais pas trop ce que tu projetes du coup je suis encore un peu dans le flou moi aussi. Voilà comment je voyais cela, niveau orga du site on aurai :
  • un tuto sur l'utilisation de deux cartes son avec jack (sans outil externe), avec script inclus pourquoi pas
  • un tuto sur l'utilisation de deux cartes ou plus avec alsa_in/out, avec script inclus pourquoi pas
  • un tuto sur l'utilisation de deux cartes ou plus avec une troisieme methode
  • etc
  • tout ca regroupé dans une page central du dossier jack, du genre "utilisation de deux cartes ou plus, différentes solutions"
les tutos peuvent aussi renvoyer entre eux du genre : "on peut faire la même chose d'une manière différente (ou l'inverse) en suivant cet autre tuto"

Ensuite si tu comptes à terme partager tout un tas de scripts, il serai mieux de tous les centraliser.
Pour le moment on a une page Scripts Bash très incomplète et un exemple concret avec les scripts de tumulte. Peut être serai-t-il mieux de créer une nouvelle page pour ton exemble de scripts et de compléter un peu la page générale Scripts Bash. De mon coté j'apprend des trucs avec tes lignes de commandes qui ne sont pas encore dans la documentation vers laquelle les gens vont quand ils s'interressent à bash.

Du coup, peux tu expliquer ton projet plus en profondeur pour voir comment il peut s'inscrire au mieux dans tout ça ?

oliv'

cjpsimon utilisateur non connecté
Pour être clair, je n'ai pas de projet particulier autre que des petits problèmes ponctuels comme celui que j'ai exposé. Cela me permet petit à petit de mieux comprendre als, jack et autres logiciels. Comme je n'ai pas trouvé de docs approfondies et à jour alors je procède par des tests et pour les pérenniser je fait des petits scrips qui servent à lancer une configuration de travail donnée. Il y a peut-être des outils pour cela mais il faut les trouver et les maîtriser.

Pour ce qui est l'insertion du tuto dans le wiki, je n'ai pas vraiment d'idées car je ne maîtrise pas le sujet. Pour l'instant je suis plutôt dans le genre "trucs et astuces" ou bien "système D" mrgreen.

Tu peux en faire tout ce qui pourra être utile pour la communauté. Pour l'instant j'essaie de compléter ce travail en cherchant à ajouter le lancement des applications et établir les connexions. Par exemple Audacity se lance avec alsa alors que je voudrais jack.

Pour ce qui est de bash là encore je suis débutant et je procède par essais et erreurs en me documentant sur internet.

Si tu as des directions à me donner je veux bien participer dans la mesure de mes compétences limitées (ne pas oublier que je débute en MAO, mes compétences de base sont la programmation classique avec des langages compilés où l'usage des scripts est très réduit).

Claude Simon

cjpsimon utilisateur non connecté
[EDIT de Xzu merci de mettre {CODE(wrap="1")} pour les balises de code ]wink

Voici un script qui permet de lancer un Audacity tout configuré pour mes deux cartes son utilisées pour enregistrer mes disques vinyles.

#!/bin/bash
#----------------------------------------------------------------------------
# Script de lancement d'Audacity et Qjackctl prenant en compte deux cartes son,
# une carte en capture et l'autre carte en playback.
#
# Après ce lancement il suffit de mettre Audacity en pause et de cliquer
# sur enregistrement pour voir apparaître les connexions entre PortAudio et
# system. PortAudio est l'interface entre Audacity et jackd et system est le 
# client Jack composé des deux cartes son.
#----------------------------------------------------------------------------

#-- Les cartes son peuvent être connues par la commande : cat /proc/asound/cards.
#-- On utilise les noms plutot que les numéros car les cartes USB peuvent être
#-- détectées dans n'importe quel ordre.

#-- Ma carte en capture a pour nom CODEC, c'est mon lecteur de disque vynil.
capture=CODEC

#-- Ma carte en playback a pour nom Pro, c'est ma carte M-Audio Fast Track Pro,
#-- je pourrais mettre 0 ou SB si je voulais utiliser ma carte son interne.
playback=Pro

function configure_audacity 
{
    #-- La fonction "configure_audacity" remplace trois paramètres 
    #-- dans la section [AudioIO] du fichier de configuration d'audacity.
    #
    #-- ${1} premier paramètre pour le paramètre Host,
    #-- ${2} deuxième paramètre pour le paramètre RecordingDevice,
    #-- ${3} troisième paramètre pour le paramètre PlaybackDevice.

    #-- Les fichiers temporaires seront stockés dans TMP, notamment les  
    #-- fichiers sed-audacity.bash et audacity.cfg-new.
    TMP=/tmp

    #-- Le fichier de configuration d'audacity est CONF.
    CONF=~/.audacity-data/audacity.cfg

    #-- Construction du script de remplacement sed-audacity.bash dans TMP.
    #-- La construction se fait à l'aide de sed, en trois passes au moyen 
    #-- de pipe "|", une passe par paramètres.
    #-- Il y a sûrement moyen de faire mieux :-)

    #-- Remplacement de la valeur du paramètre Host par ${1}.
    echo "sed 's/Host=.*$/Host=${1}/g' ${CONF} |\\" > ${TMP}/sed-audacity.bash

    #-- Remplacement de la valeur du paramètre RecordingDevice par ${2}.
    echo "sed 's/RecordingDevice=.*$/RecordingDevice=${2}/g'|\\" >> ${TMP}/sed-audacity.bash

    #-- Remplacement de la valeur du paramètre PlaybackDevice par ${3}.
    echo "sed 's/PlaybackDevice=.*$/PlaybackDevice=${3}/g' >${TMP}/audacity.cfg-new" >> ${TMP}/sed-audacity.bash

    #-- Lancement du remplacement.
    bash -f ${TMP}/sed-audacity.bash

    #-- Destruction du script de remplacement.
    rm ${TMP}/sed-audacity.bash

    #-- Sauvegarde de audacity.cfg en audacity.cfg-old 
    #-- et remplacement par audacity.cfg-new.
    cp ${CONF} ${CONF}-old 
    mv ${TMP}/audacity.cfg-new ${CONF};
}

#-- Les paramètres de jackd peuvent être connus par : man jackd.
#-- Lancement de jackd en arrière plan (avec "&" en fin de commande).
#-- jackd crée un client "system" composé des deux cartes ${capture} 
#-- et ${playback} avec les paramètres physiques suivants :

    priorite=70
    rate=44100
    sample=256
    period=2

jackd -P ${priorite} -d alsa -C hw:${capture}  \
                             -P hw:${playback} \
                             -r ${rate}        \
                             -p ${sample}      \
                             -n ${period} &

#-- Récupération de l'ID de jackd.
jackd_ID=$!

#-- Attente pendant une seconde que jackd se mette en place.
sleep 1

#-- Lancement de Qjackctl en arrière plan ("&" en fin de commande).
#-- Qjackctl va prendre jackd déjà lancé et ignorera les réglages 
#-- définis dans une précédente session.
qjackctl &

#-- Récupération de l'ID de qjackctl.
qjackctl_ID=$!

#-- Attente pendant une seconde que qjackctl se mette en place.
sleep 1

#-- Lancement du paramétrage d'Audacity à l'aide de la fonction
#-- configure_audacity définie plus haut avec les paramètres suivants :
#--   Host            = JACK Audio Connection Kit
#--   RecordingDevice = system
#--   PlaybackDevice  = system

configure_audacity "JACK Audio Connection Kit" system system

#-- Lancement d'Audacity en arrière plan ("&" en fin de commande).
audacity &

#-- Récupération de l'ID de Audacity.
audacity_ID=$!

#-- Attendre que Qjackctl se termine.
wait ${qjackctl_ID}

#-- Arrêt de jackd.
kill -s KILL ${jackd_ID}

#-- Arrêt d'audacity s'il n'est pas déjà arrêté.
kill -s KILL ${audacity_ID}

#-- Fin du script --


J'ai commenté un maximum. Cela peut servir d'exemple pour d'autres scripts.

Par contre je ne sais pas comment cela peut s'inscrire dans le wiki.

Pour mon utilisation personnelle, je l'ai versé dans mon répertoire ~/bin et je fait un lanceur pour l'avoir sur mon bureau.

Il n'est pas impossible que je le réutilise pour d'autres scripts à venir.
Si quelqu'un a des idées pour l'améliorer, je suis preneur.

Claude Simon

Afficher les articles :
Aller au forum :

Documentation [Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

sub26nico, 13:11, mer. 08 Jul 2020: Salut et bienvenue à 10D2P et J-B-V :-)
olinuxx, 15:36, mar. 07 Jul 2020: Bonjour et bienvenue à Moona cool
olinuxx, 15:42, lun. 06 Jul 2020: Bonjour et bienvenue à smellycat cool
allany, 21:11, dim. 05 Jul 2020: Trop fort, R-oooouane !
r1, 20:56, dim. 05 Jul 2020: Ce ne sont pas des nigauds, la bande de l'édito \o/ !
allany, 18:09, dim. 05 Jul 2020: C'est pas la bande à Bonnot, c'est la bande de l'édito ! [Lien]
GypsyPlayer, 10:33, ven. 03 Jul 2020: Merci Olinuxx ! J'épluche le site depuis maintenant 2-3 jours, y a plein plein d'infos c'est top !
olinuxx, 10:57, jeu. 02 Jul 2020: Bonjour et bienvenue à GypsyPlayer cool
olinuxx, 13:34, mer. 01 Jul 2020: Bonjour et bienvenue à nevastech cool
farvardin, 10:29, mer. 01 Jul 2020: @Sahaathyva original comme outil ! Un piano roll pour du chiptune à la place du traditionnel tracker. Pas mal du tout !
pierrotlo, 09:12, mer. 01 Jul 2020: Salut tous. Pour les nostalgiques ou les curieux. Quasar Beach a développé un clone du mythique Fairlight CMI IIx. [Lien] ça tourne sous Linux
r1, 23:49, mar. 30 Jun 2020: @Sahaathyva merci pour le tuyau et c'est sous license MIT : [Lien] par contre du c# :-D