Cette manipulation vise à lier deux cartes son (ou plus) supportées par ALSA pour qu'elles apparaissent comme une carte unique (carte virtuelle).
Ceci peut être bien pratique, en particulier avec un logiciel comme Jack, qui n'utilise (en duplex) qu'une carte son à la fois.
Il faut cependant bien comprendre que cela ne synchronisera PAS l'horloge des cartes, et que le son se décallera d'une carte à l'autre avec le temps. Ceci est problématique en particulier pour l'enregistrement, mais est moins grave pour l'écoute. Certaines cartes son plus haut de gamme proposent une connectique spéciale pour relier l'horloge interne, comme wordclock, ADAT...
Table des matières
Carte son multicanal virtuelle
Recopié et traduit de ?Virtual multi channel devices.Copiez et collez le code suivant dans votre fichier asoundrc.
Copy to clipboard
# Créé une carte son virtuelle de quatre canaux avec deux # cartes son réelles. # Il s'agit en fait de deux flux stéréo entrelaçés dans # différentes adresses mémoire, donc Jack devrai se plaindre # qu'il n'a pas un accès mmap. Voir plus bas. pcm.multi { type multi; slaves.a.pcm "hw:0,0"; slaves.a.channels 2; slaves.b.pcm "hw:1,0"; slaves.b.channels 2; bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1; } # Jack ne sera pas content s'il n'a pas de mixeur logiciel à # qui parler, donc nous utiliserons celui de la carte son # numéro 0. Il pourrai s'agir de n'importe quelle carte. ctl.multi { type hw; card 0; } # Ceci créé un flux pcm entrelacé de 4 canaux basé sur # la carte 'multi'. Jack fonctionnera avec celui-ci. pcm.ttable { type route; slave.pcm "multi"; slave.channels 4; ttable.0.0 1; ttable.1.1 1; ttable.2.2 1; ttable.3.3 1; } # Voir plus haut ctl.ttable { type hw; card 0; }
Ceci produira des xruns, mais ça convient pour des essais. Pour tester on peut enregistrer puis lire un signal audio :
Copy to clipboard
arecord -f S16_LE -r 44100 -c 4 -D multi | aplay -f S16_LE -r 44100 -c 4 -D multi
Pour démarrer Jack avec la nouvelle carte son virtuelle :
Copy to clipboard
jackd -d alsa -d ttable
pcm_multi, ttable, mmap
pianolivier : j'écris ce paragraphe d'après ce que j'ai pu comprendre sur cette page, mais n'ayant pas essayé ces manipulations moi-même il se peut qu'il soit biaisé. Dans ce cas merci de corriger (et d'effacer cette phrase).Comme on peut le voir dans le fichier de configuration, le programme qui permet de lier/fusionner plusieurs cartes son est donc pcm_multi, il fait partie d'ALSA.
Le programme de routage pcm_ttable permet de relier les blocs ou canaux pour faire fonctionner Jack sans qu'il soit nécessaire que celui-ci ai le support MMAP_COMPLEX. Cependant les ressources supplémentaires nécessitées par ce plugin augmenteraient le temps de latence (en fait cela comprimerait complètement toute opération de basse latence) et les versions de Jack actuelles supportent maintenant MMAP_COMPLEX par défaut.
Le fichier de configuration pourrai donc être simplifié ainsi, à tester :
Copy to clipboard
# Créé une carte son virtuelle de quatre canaux avec deux # cartes son réelles. pcm.multi { type multi; slaves.a.pcm "hw:0,0"; slaves.a.channels 2; slaves.b.pcm "hw:1,0"; slaves.b.channels 2; bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1; bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1; } # Jack ne sera pas content s'il n'a pas de mixeur logiciel à # qui parler, donc nous utiliserons celui de la carte son # numéro 0. Il pourrai s'agir de n'importe quelle carte. ctl.multi { type hw; card 0; }
Puis démarrer Jack avec :
Copy to clipboard
jackd -d alsa -d multi
Synchronisation de l'horloge interne
Comme expliqué dans l'intro, si les horloges des cartes son ne sont pas synchronisées, des erreurs apparaîtront fatalement, surtout lors de l'enregistrement, avec des messages du type :- snd_pcm_mmap_commit: Assertion `frames <= snd_pcm_mmap_avail(pcm)' failed,
- des Xruns,
- etc...
Liens
Le document ayant servi de base à cette page + exemple de configuration avec deux RME Hammerfall + des explications sur la syntaxe :Virtual multi channel devices sur alsa-project.org (anglais)
Le document ayant servit de base au document précedent (je pense) :
http://alsa.opensrc.org/TwoCardsAsOne (anglais)
Description technique de la bibliothèque de programmation derrière pcm_multi :
http://alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html (anglais, si on peut dire ça)
Un tuto d'un type dingue pour synchroniser ses deux cartes son à coup de fer à souder dans le cas ou ça n'est pas prévu :
http://quicktoots.linux-audio.com/toots/el-cheapo/ (anglais)
Un tuto sur linuxmao pour fusionner et synchroniser les cartes son pro basées sur la puce ICE1712, en particulier deux m-audio delta 1010 :
exemple de configuration avec deux m-audio delta 1010
Une méthode alternative plus récente et qui agit directement au niveau de Jack :
Jack_alsa_io
[+] Licence
La licence de cet article est la Creative Commons suivante :
http://creativecommons.org/licenses/by-sa/2.5/deed.fr
Extrait :
Paternité - Partage des Conditions Initiales à l'Identique 2.5
Vous êtes libres :
Selon les conditions suivantes :
À notez que :
Ce qui précède n'affecte en rien vos droits en tant qu'utilisateur (exceptions au droit d'auteur : copies réservées à l'usage privé du copiste, courtes citations, parodie...)
Vous êtes libres :
- de reproduire, distribuer et communiquer cette création au public
- de modifier cette création
- d'utiliser cette création à des fins commerciales
Selon les conditions suivantes :
- by: Paternité. Vous devez citer le nom de l'auteur original.
- sa: Partage des Conditions Initiales à l'identique. Si vous modifiez, transformez ou adaptez cette création, vous n'avez le droit de distribuer la création qui en résulte que sous un contrat identique à celui-ci.
À notez que :
- À chaque réutilisation ou distribution, vous devez faire apparaître clairement aux autres les conditions contractuelles de mise à disposition de cette création.
- Chacune de ces conditions peut être levée si vous obtenez l'autorisation du titulaire des droits.
Ce qui précède n'affecte en rien vos droits en tant qu'utilisateur (exceptions au droit d'auteur : copies réservées à l'usage privé du copiste, courtes citations, parodie...)
voir la version intégrale de la licence