Acoustic passion

Acoustic passion

Configurer ALSA pour fusionner 2 cartes sons

Bonjour;

 

Je vais dans cet article tenter de vous expliquer comment fusionner 2 cartes sons avec ALSA en créant un périphérique virtuel lié aux 2 cartes sons.

 

Pour cela, vous devez évidemment disposer de 2 cartes sons et éventuellement quelques connaissances dans la configuration du .asoundrc : google est votre ami ! ;)

 

Voici mon .asoundrc, fusionnant 2 cartes M-Audio DELTA 1010 LT (12 entrées / 10 sorties par carte) en un périphérique virtuel composé de 6 entrées et 16 sorties :

 

 


# Le périphérique par défaut utilisé par ALSA. Ceci est nécessaire afin de "wrapper" les applications ALSA afin qu'elles envoient le flux audio sous jack
pcm.!default {
type plug
slave.pcm "jack"
}

# Le contrôle par défaut. Il faut le définir pour que jack ne renvoie pas d'erreur. N'importe quelle carte peut-être définie ca n'a aucune importance....
ctl.!default {
type hw
card 0
}

# Un plugin "plug" afin de renvoyer le flux ALSA vers JACK en convertissant le flux automatiquement (upsampling ou downsampling, conversion dans le bon format, etc.)
pcm.jackplug {
type plug
slave { pcm "jack" }
}

# Définition du périphérique virtuel jack transférant les données au serveur jack
pcm.jack {
type jack
playback_ports {
0 alsa_pcm:playback_1
1 alsa_pcm:playback_2
}
capture_ports {
0 alsa_pcm:capture_1
1 alsa_pcm:capture_2
}
}

# Définition de la carte DELTA n°1
pcm.Delta1 {
type hw
card M1010LT # L'utilisation du nom de la carte plutôt que "hw:0" ou "hw:1" permet de garantir que la bonne carte est utilisée (les cartes peuvent parfois êtres interverties dans les index...)
}

# Définition de la carte DELTA n°2
pcm.Delta2 {
type hw
card M1010LT_1
}

# Définition du périphérique virtuel "multi_playback". Lorsque nous lancerons jack, nous penserons a utiliser ce périphérique en périphérique de sortie !
pcm.multi_playback {
type multi
slaves.a.pcm "Delta1"
slaves.a.channels 10 # Attention !!!!! Vous devez utiliser autant de canaux qu'en dispose la carte (si vous mettez 6 canaux alors que la carte en dispose 10 cela ne marchera jamais !)
slaves.b.pcm "Delta2"
slaves.b.channels 10 # Idem
bindings.0.slave a # On connecte le canal 0 a la carte "a"
bindings.0.channel 0 # On connectre le canal 0 (de multi_playback) a la sortie 0 (de la carte a)
bindings.1.slave a
bindings.1.channel 1 # vous avez compris...
bindings.2.slave a
bindings.2.channel 2
bindings.3.slave a
bindings.3.channel 3
bindings.4.slave a
bindings.4.channel 4
bindings.5.slave a
bindings.5.channel 5
bindings.6.slave a
bindings.6.channel 6
bindings.7.slave a
bindings.7.channel 7
bindings.8.slave b
bindings.8.channel 0 # On connecte le canal 8 (de multi_playback) a la sortie 0 (de la carte b : ligne ci-dessus !)
bindings.9.slave b
bindings.9.channel 1
bindings.10.slave b
bindings.10.channel 2
bindings.11.slave b
bindings.11.channel 3
bindings.12.slave b
bindings.12.channel 4
bindings.13.slave b
bindings.13.channel 5
bindings.14.slave b
bindings.14.channel 6
bindings.15.slave b
bindings.15.channel 7 # Et le canal 15 = 16ème canal (il faut compter le 0)
}

# Idem mais en configurant cette fois les entrées
pcm.multi_capture {
type multi
slaves.a.pcm "Delta1"
slaves.a.channels 12 # Encore une fois un mauvais nombre de canaux entraîne l'échec de création du périphérique virtuel (argument invalide...)
slaves.b.pcm "Delta2"
slaves.b.channels 12
bindings.0.slave a
bindings.0.channel 2
bindings.1.slave a
bindings.1.channel 3
bindings.2.slave a
bindings.2.channel 4
bindings.3.slave a
bindings.3.channel 5
bindings.4.slave a
bindings.4.channel 6
bindings.5.slave a
bindings.5.channel 7
}

# Contrôle de multi_playback pour que jackd soit content, encore une fois aucune importance... Dans le doute j'ai quand même mis une des 2 cartes utilisées ;)
ctl.multi_playback {
type hw
card M1010LT
}

ctl.multi_capture {
type hw
card M1010LT
}
 

Voilà. Le fichier .asoundrc est bien évidemment a sauvegarder dans votre /home/nomd'utilisateur/
Relançons ALSA : pour cela ouvrez une console, puis entrez en mode administrateur (ex: sudo su)
Une fois en root, entrez alsa-utils force-reload.
Deux lignes doivent s'afficher en indiquant "SUCCESS", si ce n'est pas le cas, vérifiez que vous avez bien les packages alsa-utils, sinon essayez d'interpréter les messages d'erreurs ;)
 
Vous pouvez a présent utiliser ces 2 périphériques virtuels sous jackd : avec qjackctl il suffit de choisir duplex et de rentrer "multi_playback" dans le nom du périphérique de sortie et "multi_capture" dans le périphérique d'entrée.... Avec le daemon jackd, il suffit d'utiliser ces noms de périphériques dans les bons arguments (jackd --help)
 
Voilà, si les cartes sons synchros (les miennes sont en worldclock) vous n'aurez pas de problème, si les cartes ne sont pas synchros, jackd plantera par timeout (lorsqu'un périphérique sera trop en retard par rapport a l'autre). Jackd affichera des xsyncs du flux stderr (les xsync entre parenthèses) : ces xsyncs n'existent pas et ne sont d'ailleur pas audible ! Désactivez donc la capture des xsyncs sur ces flux (sous Qjackctl dans setup/options/statistics : décocher capture standard output)
 
Pour toute question n'hésitez pas !


13/10/2011
0 Poster un commentaire

Inscrivez-vous au blog

Soyez prévenu par email des prochaines mises à jour

Rejoignez les 20 autres membres