Skip to main content

Historique: TUTO : ALSA vers JACK

Aperçu de cette version: 47

Router ALSA vers Jack



Introduction


Certains producteurs / musiciens / etc utilisent linux pour leur travail. Il se peut qu'ils aient construit un PC entièrement dédié à leur production, où le serveur Jack Audio Connection Kit tourne de façon permanente. En tant que musicien-producteur moi-même, je ne désire pas d'autres couches son intermédiaires entre JACK et le niveau matériel (piloté par ALSA dans mon cas) du genre PulseAudioou autre. En effet, je possède une carte son pro RME HDSP + Multiface II. Le pilotage de l'interface de mixage de cette carte ne se range pas dans le cas générique qu'ALSA fournit pour la majorité des cartes du genre interne (Intel HDA, etc). D'une part, seul le logiciel spécial de mixage TotalMix (ou hdspmixer en linuxien) allié à Jack me permet d'utiliser cette carte sous toutes ces coutures. Cela a comme inconvénient que les logiciels ou applications non "jackifiés" ne peuvent rejoindre l' environnent très flexible et fiable fournit par le graphe audio de Jack. D'autre part, je ne souhaite pas recourir à ma carte son interne (l' "infâme" puce Intel HDA 🙀 ) que je garde constamment 'off' (config niveau BIOS).

Dans ce cas, comment peut-on établir un pont permanent entre Jack et les applications non jackifiées ? Je recherchais une solution du type 'client jack permanent' (à la fois playback et capture). Il y a un 'plugin' ALSA-jack mais malheureusement, ce n'est pas une solution pour plusieurs raisons:
- le client n'apparaît dans le graphe jack que lorsque l'application ALSA joue quelque chose et disparaît aussitôt après
- ce plugin n'a pas été mis à jour depuis longtemps et est très instable.
En bref, il n'est pas à la hauteur des propriétés désirées (permanence du pont, etc).

Ce n'est que récemment, alors que je faisais "mumuse" avec la carte virtuelle ALSA-Loopback que l'idée d'un pont permanent ALSA-vers-Jack m'est revenue. Une sorte de flash, en quelque sorte 😀

Cette page est une adaptation française de Jack and Loopback device as Alsa-to-Jack bridge avec quelques ajouts propres à un wiki général sur l'audio professionnelle.

La carte son virtuelle ALSA-Loopback

La carte virtuelle ALSA-Loopback est comme son nom l'indique un matériel complètement virtuel, une émulation d'une vraie carte son. Elle apparaît dans la liste des cartes son ALSA dès que le module noyau 'snd-aloop' est chargé.

Compiler le module noyau 'snd-aloop' : la méthode douce

Il se peut fortement que le noyau installé par la distro ne contienne pas ce module par défaut. On peut y remédier par la compilation "manuelle" de ce module.

GROS AVERTISSMENT : À noter que le chargement de ce module peut s'avérer difficile après compilation manuelle même lorsque le paquet 'linux-headers' est installé et la compilation sans problème! Voir la discussion (en anglais) sur le forum linuxmusicians.


EDIT: J'ai réglé le problème! Voir la mise-à-jour juste après cette section.

À vérifier au préalable que le module 'snd-aloop' n'est pas connu du noyau:

Copy to clipboard
sudo modinfo snd-aloop


Si 'modinfo' ne reporte rien, alors va falloir compiler la bête. Il faut choper le code source 'alsa-driver' correspondant à la version d'ALSA installé par défaut. Aller soi sur le site http://www.alsa-project.org ou bien utiliser 'sudo apt-get install alsa-source'

Une fois le code source installé, décompressé et désarchivé quelque part sur le disque dur, aller dans le répertoire principal (cd alsa-driver-xxxx) et configurer pour la compilation (ne pas installer le résultat, on fera ça "à la main"):

Copy to clipboard
./configure --with-cards=loopback make /!\ NE PAS FAIRE "make install"

Note: Si vous avez des erreurs à la compilation, vous pouvez tenter de compiler avec les sources de http://www.alsa-project.org/snapshot/files/ (alsa-driver) qui sont les versions les plus à jour ( règle les problèmes liés au noyau 2.6.36-2.dmz.5-liquorix-amd64 entre autres. )

Note 2:
Si toutefois à la fin de la compilation vous n'aviez pas le fichier snd-aloop.ko dans ./modules, tentez ces deux commandes:
Copy to clipboard
./configure --with-cards=aloop make /!\ NE PAS FAIRE "make install"


Maintenant, copier le module compiler vers l'installation noyau et enregistrer ses dépendances :

Copy to clipboard
sudo cp ./modules/snd-aloop.ko /lib/modules/`uname -r`/kernel/sound/drivers/ sudo depmod -a


Vérifier que le noyau est maintenant à jour:

Copy to clipboard
~$ sudo modinfo snd-aloop filename: /lib/modules/2.6.32/kernel/sound/drivers/snd-aloop.ko license: GPL description: A loopback soundcard author: Jaroslav Kysela <perex@perex.cz> srcversion: B85A5847D027749DCF96195 depends: snd-pcm,snd vermagic: 2.6.32 SMP preempt mod_unload modversions CORE2 parm: index:Index value for loopback soundcard. (array of int) parm: id:ID string for loopback soundcard. (array of charp) parm: enable:Enable this loopback soundcard. (array of bool) parm: pcm_substreams:PCM substreams # (1-8) for loopback driver. (array of int)


Charger le module:
Copy to clipboard
~$ sudo modprobe snd-aloop


Si ça foire, forcer la main au noyau:
Copy to clipboard
~$ sudo modprobe -f snd-aloop


Ensuite, vęrifier:

Copy to clipboard
~$ lsmod | grep aloop snd_aloop 4732 0 snd_pcm 57065 6 snd_aloop, snd_hdsp snd 40404 18 snd_aloop, snd_hdsp, snd_pcm, snd_hwdep, snd_rawmidi, snd_seq, snd_timer, snd_seq_device


On garde les options par défaut du module (mais on peut modifier au chargement si on veut, sauf que c'est pas la peine).

Compiler le module noyau 'snd-aloop' : la méthode forte!

OK, si la méthode douce a foiré, on va passer à des choses plus drastiques. On va réinstaller la totalité du pilote ALSA. Alors bien sûr, il va falloir dans ce cas ajouter toutes les cartes sons du système dans la configuration de la compilation. Par exemple, voici mon cas:

Copy to clipboard
sudo make clean ./configure --with-cards=hdsp,loopback,hrtimer,usb-audio --with-oss=yes --with-sequencer=yes OU FAIRE ./configure --with-cards=hdsp,aloop,hrtimer,usb-audio --with-oss=yes --with-sequencer=yes make sudo make install


Pour savoir de quels pilotes le système a besoin, on peut inspecter le fichier suivant:
Copy to clipboard
cat /proc/asound/modules


et aussi voir à quoi ça correspond pour la compilation:
Copy to clipboard
./configure --help


La dernière commande va reporter toutes les cartes possibles, y en a un paquet 😀

OK, une fois compilé et installé, il va falloir faire repartir ALSA:
Copy to clipboard
sudo alsa force-reload


sans oublier de charger snd-aloop bien sûr!

Comprendre la structure de la carte virtuelle ALSA-Loopback

Comme son nom l'indique, cette carte virtuelle a pour but de boucler le signal envoyé en sortie vers son entrée. On peut donc collecter le signal d'une application ALSA qui envoie son signal vers la sortie de cette carte à l'entrée de cette même carte 😀 et vice-versa.

Par défaut, cette carte virtuelle est composée de 2 parties, elles-mêmes composées de 8 sous-parties. Par exemple, on peut constater après le chargement du module les choses suivantes:

Copy to clipboard
~$ aplay -l **** List of PLAYBACK Hardware Devices **** card 0: DSP [Hammerfall DSP], device 0: RME Hammerfall DSP + Multiface [RME Hammerfall DSP + Multiface] Subdevices: 0/1 Subdevice #0: subdevice #0 card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM] Subdevices: 7/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7 card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM] Subdevices: 8/8 Subdevice #0: subdevice #0 Subdevice #1: subdevice #1 Subdevice #2: subdevice #2 Subdevice #3: subdevice #3 Subdevice #4: subdevice #4 Subdevice #5: subdevice #5 Subdevice #6: subdevice #6 Subdevice #7: subdevice #7


Les Loopback devices 0 et 1 sont symmétriques, dans le sens où si 0 est utlisé pour la sortie, 1 est automatiquement une entrée et vice-versa.
Les labels ALSA pour ces "devices" sont:
Copy to clipboard
hw:Loopback,0 hw:Loopback,1


Le principe est assez simple: si un signal est envoyé vers le "sub-device" hw:Loopback,i,n alors ce même signal se retrouve en entrée au sub-device correspondant hw:Loopback,j,n avec
i = [0..1]
j = ~i (c-à-d. si i = 0, j = 1, et vice-versa)
n = [0..7]

Modifier la configuration d'ALSA

Quand ils sont lancés sans paramètre particulier, les programmes ALSA (comme flash dans firefox) utilisent la carte son par défaut qui correspond généralement à la première carte son. Si celle-ci est utlisée par JACK, elle ne sera pas disponible pour ALSA. Il est donc nécessaire de configurer ALSA pour que la permière carte son soit la loopback. JACK utilisera alors la deuxième carte (ou celle appropriée à votre configuration).

Autre avantage, nous pourrons même nous passer complêtement de pulseaudio. C'est souvent même nécessaire car ce programme a la sale manie de démarrer de façon intempestive. De plus, il semble obsédé de vouloir être la carte son par défaut, et ceci va perturber notre configuration. Pour désinstaller pulseaudio, cela est une autre histoire, très simple sous gentoo, plus compliquée avec les distributions basée sur debian ou rpm qui ont gnome comme bureau par défaut. Récemment, gnome-settings-daemon et gdm se sont mis à dépendre de pulseaudio. Le plus simple est donc de déactiver pulseaudio. Pour cela, désactivez autospawn dans le fichier /etc/pulse/client.conf :
Copy to clipboard
autospawn = no


Exemple de configuration (vous pourrez trouver une description plus détaillée du réglage de "carte par défaut" sur cette page) :
Fichier /etc/modprobe.d/alsa.conf
Copy to clipboard
# Alsa kernel modules' configuration file. # ALSA portion alias char-major-116 snd # OSS/Free portion alias char-major-14 soundcore ## Options options snd-aloop index=0 options snd-ice1724 index=1 options snd-ice1724 model=ap192 options snd-virmidi index=2 ## ALSA portion alias snd-card-0 snd-aloop alias snd-card-1 snd-ice1724 alias snd-card-2 snd-virmidi ## OSS/Free portion alias sound-slot-0 snd-card-0 alias sound-slot-1 snd-card-1 alias sound-slot-2 snd-card-2 # OSS/Free portion - card #1 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-1 snd-seq-oss alias sound-service-0-3 snd-pcm-oss alias sound-service-0-8 snd-seq-oss alias sound-service-0-12 snd-pcm-oss ## OSS/Free portion - card #2 alias sound-service-1-0 snd-mixer-oss alias sound-service-1-3 snd-pcm-oss alias sound-service-1-12 snd-pcm-oss ## OSS/Free portion - card #3 alias sound-service-2-0 snd-mixer-oss alias sound-service-2-3 snd-pcm-oss alias sound-service-2-12 snd-pcm-oss alias /dev/mixer snd-mixer-oss alias /dev/dsp snd-pcm-oss alias /dev/midi snd-seq-oss # Set this to the correct number of cards. options snd cards_limit=3


Les options importantes ici sont index=n et cards_limit=m

Ne pas oublier de mettre à jour la configuration du kernel avec nos modifications. Sous gentoo:
Copy to clipboard
update-modules


et de relancer ALSA:
Copy to clipboard
/etc/init.d/alsasound restart


Une autre exemple: avec les kernels récents (hum, tout kernel depuis 2 ou 3 ans), une syntaxe plus succincte donne le même résultat:

Fichier /etc/modprobe.d/alsa.conf
Copy to clipboard
alias snd-card-0 snd-aloop alias snd-card-1 snd-hdsp alias snd-card-2 snd-hda-intel options snd-aloop index=0 pcm_substreams=2 options snd-hdsp index=1 options snd-hda-intel index=2


Les options de snd-aloop

Le module snd-aloop accepte les options suivantes:
Copy to clipboard
# modinfo snd-aloop ... parm: index:Index value for loopback soundcard. (array of int) parm: id:ID string for loopback soundcard. (array of charp) parm: enable:Enable this loopback soundcard. (array of bool) parm: pcm_substreams:PCM substreams # (1-8) for loopback driver. (array of int) parm: pcm_notify:Break capture when PCM format/rate/channels changes. (array of int)


TODO: finir de décrire ces paramètres:

Ces paramètres peuvent être spécifiés dans le fichier de configuration d'ALSA (/etc/modprobe.d/alsa.conf avec une ligne options comme dans les exemples ci-dessous.

* index: obligatoire, détermine l'ordre des cartes sons.
* id: facultatif, un nom.
* enable: facultatif
* pcm_substreams: faclutatif, détermine le nombre de périphériques pcm virtuels de la carte
* pcm_notify: facultatif, ???

Construire un fichier .asoundrc

Ah! le asoundrcien, quelle langue splendide! 😀
J'ai jamais vraiment lu quoi que ce soit à ce sujet mais j'ai du sérieusement le faire pour pouvoir établir ce pont vers Jack. Je vous épargne les quelques noms d'oiseau que j'ai lancé de temps en temps durant l'"apprentissage" ... 😉

Bon, le but est de créer un défaut ALSA basé sur la carte virtuelle Loopback. Comme ça, toutes les applications ALSA utiliseront ce défaut. On a besoin d'un PCM de playback, un PCM de capture, et combiner les deux PCMs en un "plug device" étant capable de full duplex. Noter que le but final est de pouvoir entendre via Jack ce que les applications ALSA jouent, et inversement, enregistrer les entrées Jack dans des applications ALSA.

Voici le fichier .asoundrc dans toute sa gloire :
Copy to clipboard
# playback PCM device: using loopback subdevice 0,0 pcm.amix { type dmix ipc_key 219345 slave.pcm "hw:Loopback,0,0" } # capture PCM device: using loopback subdevice 0,1 pcm.asnoop { type dsnoop ipc_key 219346 slave.pcm "hw:Loopback,0,1" } # duplex device combining our PCM devices defined above pcm.aduplex { type asym playback.pcm "amix" capture.pcm "asnoop" } # ------------------------------------------------------ # for jack alsa_in and alsa_out: looped-back signal at other ends pcm.ploop { type plug slave.pcm "hw:Loopback,1,1" } pcm.cloop { type dsnoop ipc_key 219348 slave.pcm "hw:Loopback,1,0" } # ------------------------------------------------------ # default device pcm.!default { type plug slave.pcm "aduplex" }


En résumé, on a défini les PCM suivant:

* ALSA playback = subdevice 0,0
* ALSA capture = subdevice 0,1

* Jack readable client (cloop) = subdevice 1,0 (par symmetrie avec 0,0)
* Jack writable client (ploop) = subdevice 1,1 (par symmetrie avec 0,1)

Tester le nouveau défaut ALSA


Sauver ce fichier dans '$HOME/.asoundrc_loop' et le copier dans $HOME/.asoundrc
A vérifier qu'il ne se trouve pas de fichier .asoundrc existant et déjà utilisé à l'insu de son plein gré 😉

Maintenant, jouer par ex. un fichier audio avec mplayer:
Copy to clipboard
mplayer -ao alsa fichier_audio


On peut aussi utliser lmms avec ALSA pour tester notre défaut.
Evidemment , on entendra rien encore via Jack!

Le Pont vers Jack

créer des clients jack permanents entre ALSA et Jack


Alors, comme subdevice 0,0 est le PCM ALSA de sortie, le signal sera disponible en entrée vers le PCM 'cloop' défini plus haut (subdevice 1,0). Tout ce qu'on a faire pour le connecter à Jack est d'utiliser alsa_in sur ce PCM 😀
A l'inverse, le PCM ALSA d'entrée (subdevice 0,1) collectera le signal de sortie du subdevice 1,1 ou 'ploop' qu'on a défini plus haut. Tout ce qu'on à faire est d'utiliser alsa_out sur de subdevice. Comme ça, on peut connecter le signal audio d'applications jack à 'ploop' et l'enregistrer dans l'application ALSA 😀
Brillant non ?😎

On peut d'abord tester la chose à partir d'un terminal

Copy to clipboard
alsa_in -j cloop -dcloop

et
Copy to clipboard
alsa_out -j ploop -dploop


Connecter le client jack 'cloop' vers les ports de sortie system:playback_xx correspondant aux moniteurs ou casque, rejouer la commande 'mplayer' plus haut ... alors alors ?

Pareil avec skype, connecter system:capture_xx avec le client jack 'ploop' (microphone ou basse ou une session ardour complète!), dans skype, configurer l'audio en sélectionnant "Default" partout (mic, sorties, sonnerie tel). Essayer l'appel test de skype, baragouiner dans le micro ou jouer de la gratte ... alors alors ? 😀

Pour éviter d voir des warnings, nous pouvons ajouter des paramètres, par exemple:
Copy to clipboard
alsa_in -j cloop -dcloop -n 2 -p 256 -r 96000


créer un script pour automatiser la création du pont dans Qjackctl

Les clients jack 'cloop' et 'ploop' et leur connection aux ports jack selon les besoins peuvent être créés et initialisés par Qjackctl si on met tout ça dans un script shell, par exemple /usr/local/bin/loop2jack

Copy to clipboard
#!/bin/sh # script loop2jack, dans /usr/local/bin # création des clients /usr/bin/alsa_out -j ploop -dploop -q 1 2>&1 1> /dev/null & /usr/bin/alsa_in -j cloop -dcloop -q 1 2>&1 1> /dev/null & # donner 1 seconde de répit avant de connecter au ports jacks sleep 1 # cloop ports -> jack output ports jack_connect cloop:capture_1 system:playback_1 jack_connect cloop:capture_2 system:playback_2 # au choix: microphone (RME analog input 3 pour moi) vers ports de "ploop" jack_connect system:capture_3 ploop:playback_1 jack_connect system:capture_3 ploop:playback_2 # done exit 0


Noter les paramètres -q 1. Cette option règle la qualité de ré-échantillonage. Dans l'exemple, la configuration est adaptée pour des faibles latences et des petits tampon. Abec -q à 2 ou 3, l'utilisation processeur va grimper.

Sauver le fichier dans /usr/local/bin/loop2jack (avec sudo) et ajouter la permission +x

Copy to clipboard
sudo chmod +x /usr/local/bin/loop2jack


Dans Qjackctl, allers dans "Options -> Executer après départ du serveur" et ajouter cette ligne

Copy to clipboard
/usr/local/bin/loop2jack


Sauver la config, faire repartir jack. Loop2jack doit executer la création de 'c/ploop' et connecter vers les ports jacks choisis.
Maintenant, essayer la chose en lançant 'skype', ou 'smasher' ou 'lmms', ou juste 'aplay' ou 'arecord'. Alors, ça marche ? 😀
Bien sûr, il y a de la latence vu qu'on a choisi le défaut de buffering des plugins 'dsnoop' et 'dmix'. Et alors ? on s'en fout un peu non ? 😀

Ah oui, j'oubliais: la beauté du truc c'est que si Jack plante comme une m...rde, les applications ALSA continuent à tourner sans s'être aperçues de quoi que ce soit. Y a qu'à refaire partir jack via Qjackctl, et le son revient 😀

Exemple pour RME Multiface II

Exemple d'asoundrc pour RME Multiface II
Certaines cartes son nécessitent de rajouter des paramètres liés à leur infrastructure matérielle. Ainsi, pour une RME Multiface II nous pourrons avoir le fichier ~/,asoundrc suivant:

Copy to clipboard
# ------------------------------------------------------ # hardware 0,0 : utilisé pour la lecture ALSA pcm.loophw00 { type hw card Loopback device 0 subdevice 0 format S32_LE rate 96000 } # ------------------------------------------------------ # périphérique de lecture PCM ALSA: utilise loopback 0,0 # Ne pas utiliser une taille de tampon trop petite. Certaines # applications ne l'aimeront pas et le son ne sera pas bon. pcm.amix { type dmix ipc_key 219345 slave { pcm loophw00 period_size 4096 periods 2 } } # ------------------------------------------------------ # volume logiciel pcm.asoftvol { type softvol slave.pcm "amix" control { name PCM } min_dB -51.0 max_dB 0.0 } # ------------------------------------------------------ # pour jack alsa_in: looped-back signal aux autres bouts pcm.cloop { type hw card Loopback device 1 subdevice 0 format S32_LE rate 96000 } # ====================================================== # ------------------------------------------------------ # hardware 0,1 : utilisé pour la capture ALSA pcm.loophw01 { type hw card Loopback device 0 subdevice 1 format S32_LE rate 96000 } # ------------------------------------------------------ # pour jack alsa_out: looped-back signal aux autres bouts pcm.ploop { type hw card Loopback device 1 subdevice 1 format S32_LE rate 96000 } # ====================================================== # ------------------------------------------------------ # périphérique duplex qui combine nos périphériques PCM définis ci-dessus pcm.aduplex { type asym playback.pcm "asoftvol" capture.pcm "loophw01" } # ------------------------------------------------------ # périphérique par défaut pcm.!default { type plug slave.pcm aduplex hint { show on description "Duplex Loopback" } }


Setup alternatif

Setup alternatif : solution matérielle et logicielle
Thorgal, l'auteur de l'article original en anglais, utilise en plus d'une carte RME, une carte sur la carte mère (Intel HDA) et aussi une webcam USB avec son propre micro. Cela serait un comble de ne pas pouvoir utiliser leurs capacités d'enregistrement d'une façon ou d'une autre, ceci surtout en tenant compte du fait qu'il utilise beaucoup skype.

Rajout de quelques entrées matérielles supplémentaires dans asoundrc

A la place d'utiliser le périphérique loopback pour la capture ALSA capture (toutes les entrées relatives à "ploop" dans les asoundrc précédents), nous pouvons déclarer simplement les entrées matérielles dans asoundrc. Donc, nous enlevons toutes les entrées ploop (y compris les sous-périphériques utilisés pour la capture ALSA et alsa_out, ils sont maintenant inutiles, et nous rajoutons les périphériques matériels PCM de la carte son Intel et de la webcam USB.

Copy to clipboard
# ------------------------------------------------------ # hardware 0,0 : utilisé pour la lecture ALSA pcm.loophw00 { type hw card Loopback device 0 subdevice 0 format S32_LE rate 96000 } # ------------------------------------------------------ # périphérique de lecture PCM : utilise le sous périphérique loopback 0,0 pcm.amix { type dmix ipc_key 219347 slave { pcm loophw00 period_size 4096 periods 2 } } # ------------------------------------------------------ # volume logiciel pcm.asoftvol { type softvol slave.pcm "amix" control { name PCM } min_dB -51.0 max_dB 0.0 } # ------------------------------------------------------ # pour jack alsa_in: looped-back signal aux autres bouts pcm.cloop { type hw card Loopback device 1 subdevice 0 format S32_LE rate 96000 } # ------------------------------------------------------ # hardware Intel: utilisé pour la capture ALSA pcm.intel { type hw card Intel } pcm.isnoop { type dsnoop ipc_key 219346 slave.pcm "intel" } # ------------------------------------------------------ # hardware USB cam: utilisé pour la capture ALSA pcm.usb { type hw card U0x46d0x81b # nom obtenu en inspectant le fichier '/proc/asound/cards' } # ------------------------------------------------------ # ------------------------------------------------------ # ------------------------------------------------------ # ------------------------------------------------------ # périphérique duplex qui combine nos périphériques PCM définis ci-dessus pcm.aduplex { type asym playback.pcm "asoftvol" capture.pcm "usb" } # ------------------------------------------------------ # périphérique par défaut defaults.pcm.rate_converter "samplerate_best" pcm.!default { type plug slave.pcm aduplex hint { show on description "ALSA Default" } }


Test du nouveau périphérique ALSA en capture

Ceci fut facile à tester. Nous devons être sur que la carte par défaut dans asoundrc utilise pcm capture "usb" comme ci-dessus. Ensuite, nous démarrons skype et le réglons pour qu'il utilise le périphérique "Default" pour tout. Ensuite avec QasMixer ou votre mixeur préféré, nous contrôlons le niveau de capture de la webcam (pourquoi laisser kype le régler?). Ansuite, nous essayons le test d'appel de skype et nous assurons qu'il a bien enregistré votre voix.

Notez que la même chose peut être faite avec la carte Intel HDA ("intel" pcm capture défini dans l'asoundrc précédent) à condition de brancher un micro à son entrée 😊.


latence

Pour mesurer la latence, nous devons fournir une source sonore commune à Jack et ALSA.

Lecture seule
D'abord, j'ai lancé jackd et alsa_in sur "cloop" (comme ci-dessus). Ensuite, j'ai utilisé ecasound comme intermédiaire pour être capable de mesurer un délai éventuel dans ardour (que je connais bien, vous pouvez bien sur utiliser un autre logiciel d'enregistrement compatible avec JACK).

Voici la ligne de commande pour ecasound, c'est très simple :

Copy to clipboard
ecasound -i jack -o alsa


Puis dans qjackctl, j'ai connecté une source sonore comme mon micro disponible sous system:capture_3 à ecasound:playback_1/2.

Dans ardour, j'ai créé deux pistes : une piste mono qui prend le son depuis le même port de capture, et une piste stéréo connectée au client "cloop". En fait, comme la sortie d'ecasound se fait sur le périphérique par défaut d'ALSA, le client cloop doit avoir l'audio par le loopback. J'ai ensuite enregistré quelque chose dans ardour pour que les deux pistes contiennent les données qui viennent de la source sonore. J'ai comparé les ondes résultantes et j'ai observé un délai de 120 ms quand les paramètres de dmix sont réglé sur "default".

Une autre façon de faire est d'utiliser le clic d'ardour à la place d'un microphone. Connectez le port de sortie "click" d'ardour au port d'entrée d'ecasound, et ce port "click" à une des pistes d'ardour, la deuxième doit toujours recevoir les données du client cloop. Si vous changez les paramètres de dmix dans le .asoundrc, vous observerez que vous allez obtenir des délais différents. C'est à vous de décider des réglages des paramètres period_size et buffer_size.

Un délai de 120 ms n'est pas mauvais du tout en tenant compte du grand tampon de données que dmix utilise par défaut. Mais souvenez-vous que dmix est réellement mauvais avec des petits tampons et que vous devez donc choisir une taille qui soit suffisament grande. J'ai terminé avec les valeurs suivantes :

Copy to clipboard
# ------------------------------------------------------ # playback PCM device: using loopback subdevice 0,0 pcm.amix { type dmix ipc_key 219347 slave { pcm "loophw00" period_size 4096 periods 2 } }

Ce réglage me donne une latence finale du Loopback d'environ 35ms, tandis que dmix fait un bon travail sans disparition du son.

Lecture et enregistrement

Historique

Information Version
Sun 10 Apr 2016 03:37 olinuxx typo 76
Afficher
Wed 03 Sep 2014 10:09 olinuxx Recherche et remplacement en masse 75
Afficher
Wed 12 Feb 2014 21:52 romain_bar Dossier JACK 74
Afficher
Thu 05 Sep 2013 17:59 raf modif titre Jack et la lecture audio et video HTML5 dans Firefox 73
Afficher
Sun 11 Aug 2013 17:08 Dominique 72
Afficher
Thu 18 Jul 2013 14:19 Dominique typo 71
Afficher
Thu 18 Jul 2013 14:17 Dominique mise en page 70
Afficher
Thu 18 Jul 2013 14:14 Dominique remarques de Fons 69
Afficher
Wed 03 Jul 2013 15:27 pianolivier structure par défaut 68
Afficher
Tue 02 Apr 2013 07:37 utilisateur_anonyme2 67
Afficher
Fri 15 Mar 2013 09:56 utilisateur_anonyme2 66
Afficher
Fri 15 Mar 2013 08:56 utilisateur_anonyme2 65
Afficher
Fri 15 Mar 2013 08:55 utilisateur_anonyme2 64
Afficher
Tue 12 Mar 2013 22:42 utilisateur_anonyme2 63
Afficher
Tue 12 Mar 2013 15:55 utilisateur_anonyme2 62
Afficher
Tue 12 Mar 2013 15:50 utilisateur_anonyme2 61
Afficher
Tue 12 Mar 2013 15:42 utilisateur_anonyme2 60
Afficher
Tue 12 Mar 2013 15:40 utilisateur_anonyme2 59
Afficher
Thu 20 Dec 2012 17:11 raftrombone 58
Afficher
Thu 20 Dec 2012 17:10 raftrombone 57
Afficher
Thu 20 Dec 2012 17:09 raftrombone 56
Afficher
Thu 20 Dec 2012 17:09 raftrombone 55
Afficher
Thu 04 Oct 2012 20:14 pianolivier aille les yeux :) 54
Afficher
Wed 26 Sep 2012 10:16 Dominique 53
Afficher
Wed 26 Sep 2012 10:12 Dominique 52
Afficher
Sun 23 Sep 2012 13:30 Dominique 51
Afficher
Sun 23 Sep 2012 13:28 Dominique 50
Afficher
Sun 23 Sep 2012 13:26 Dominique 49
Afficher
Sun 23 Sep 2012 12:59 Dominique 48
Afficher
Sun 23 Sep 2012 12:57 Dominique 47
Afficher
Sun 23 Sep 2012 12:55 Dominique 46
Afficher
Sun 23 Sep 2012 11:48 Dominique 45
Afficher
Sun 23 Sep 2012 11:40 Dominique 44
Afficher
Fri 24 Aug 2012 13:23 pianolivier idem 43
Afficher
Fri 24 Aug 2012 13:21 pianolivier 42
Afficher
Fri 24 Aug 2012 13:20 pianolivier mise en page petits écrans 41
Afficher
Fri 24 Aug 2012 13:12 pianolivier +box dynamique 40
Afficher
Fri 24 Aug 2012 00:27 Dominique 39
Afficher
Fri 24 Aug 2012 00:26 Dominique 38
Afficher
Fri 24 Aug 2012 00:25 Dominique 37
Afficher
Thu 23 Aug 2012 23:54 Dominique 36
Afficher
Thu 23 Aug 2012 23:47 Dominique 35
Afficher
Thu 23 Aug 2012 19:27 Dominique 34
Afficher
Thu 23 Aug 2012 19:27 Dominique 33
Afficher
Tue 21 Feb 2012 17:31 pianolivier +lien interne carte par defaut alsa 32
Afficher
Mon 20 Feb 2012 04:24 Dominique typo lien 31
Afficher
Mon 20 Feb 2012 04:23 Dominique typo lien 30
Afficher
Mon 20 Feb 2012 04:22 Dominique 29
Afficher
Mon 20 Feb 2012 04:22 Dominique 28
Afficher
Mon 20 Feb 2012 04:20 Dominique ajout lien wiki 27
Afficher
  • «
  • 1 (en cours)
  • 2