Historique: TUTO : ALSA vers JACK
Aperçu de cette version: 58
Router ALSA vers Jack
Certains producteurs / musiciens / etc utilisent linux pour leur travail. Il se peut qu'ils aient construit un PC entirement ddi leur production, o le serveur Jack Audio Connection Kit tourne de faon permanente. En tant que musicien-producteur moi-mme, je ne dsire pas d'autres couches son intermdiaires entre JACK et le niveau matriel (pilot par ALSA dans mon cas) du genre PulseAudioou autre. En effet, je possde 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 gnrique qu'ALSA fournit pour la majorit des cartes du genre interne (Intel HDA, etc). D'une part, seul le logiciel spcial de mixage TotalMix (ou hdspmixer en linuxien) alli Jack me permet d'utiliser cette carte sous toutes ces coutures. Cela a comme inconvnient que les logiciels ou applications non "jackifis" ne peuvent rejoindre l' environnent trs flexible et fiable fournit par le graphe audio de Jack. D'autre part, je ne souhaite pas recourir ma carte son interne (l' "infme" 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 jackifies ? 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'apparat dans le graphe jack que lorsque l'application ALSA joue quelque chose et disparat aussitt aprs
- ce plugin n'a pas t mis jour depuis longtemps et est trs instable.
En bref, il n'est pas la hauteur des proprits dsires (permanence du pont, etc).
Ce n'est que rcemment, alors que je faisais "mumuse" avec la carte virtuelle ALSA-Loopback que l'ide d'un pont permanent ALSA-vers-Jack m'est revenue. Une sorte de flash, en quelque sorte 😀
Cette page est une adaptation franaise de Jack and Loopback device as Alsa-to-Jack bridge avec quelques ajouts propres un wiki gnral sur l'audio professionnelle.
GROS AVERTISSEMENT
noter que le chargement de ce module peut s'avrer difficile aprs compilation manuelle mme lorsque le paquet 'linux-headers' est install et la compilation sans problme !
Voir la discussion (en anglais) sur le forum linuxmusicians.
EDIT: J'ai rgl le problme! Voir la mise--jour juste aprs cette section.
vrifier au pralable que le module 'snd-aloop' n'est pas connu du noyau:
Si 'modinfo' ne reporte rien, alors va falloir compiler la bte. Il faut choper le code source 'alsa-driver' correspondant la version d'ALSA install par dfaut. 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, dcompress et dsarchiv quelque part sur le disque dur, aller dans le rpertoire principal (cd alsa-driver-xxxx) et configurer pour la compilation (ne pas installer le rsultat, on fera a " la main"):
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 ( rgle les problmes lis 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:
Maintenant, copier le module compiler vers l'installation noyau et enregistrer ses dpendances :
Vrifier que le noyau est maintenant jour:
Charger le module:
Si a foire, forcer la main au noyau:
Ensuite, v?rifier:
On garde les options par dfaut du module (mais on peut modifier au chargement si on veut, sauf que c'est pas la peine).
Pour savoir de quels pilotes le systme a besoin, on peut inspecter le fichier suivant:
et aussi voir quoi a correspond pour la compilation:
La dernire commande va reporter toutes les cartes possibles, y en a un paquet 😀
OK, une fois compil et install, il va falloir faire repartir ALSA:
sans oublier de charger snd-aloop bien sr!
Par dfaut, cette carte virtuelle est compose de 2 parties, elles-mmes composes de 8 sous-parties. Par exemple, on peut constater aprs le chargement du module les choses suivantes:
Les Loopback devices 0 et 1 sont symmtriques, dans le sens o si 0 est utlis pour la sortie, 1 est automatiquement une entre et vice-versa.
Les labels ALSA pour ces "devices" sont:
Le principe est assez simple: si un signal est envoy vers le "sub-device" hw:Loopback,i,n alors ce mme signal se retrouve en entre 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]
Autre avantage, nous pourrons mme nous passer compltement de pulseaudio. C'est souvent mme ncessaire car ce programme a la sale manie de dmarrer de faon intempestive. De plus, il semble obsd de vouloir tre la carte son par dfaut, et ceci va perturber notre configuration. Pour dsinstaller pulseaudio, cela est une autre histoire, trs simple sous gentoo, plus complique avec les distributions base sur debian ou rpm qui ont gnome comme bureau par dfaut. Rcemment, gnome-settings-daemon et gdm se sont mis dpendre de pulseaudio. Le plus simple est donc de dactiver pulseaudio. Pour cela, dsactivez autospawn dans le fichier /etc/pulse/client.conf :
Exemple de configuration (vous pourrez trouver une description plus dtaille du rglage de "carte par dfaut" sur cette page) :
Fichier /etc/modprobe.d/alsa.conf
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:
et de relancer ALSA:
Une autre exemple: avec les kernels rcents (hum, tout kernel depuis 2 ou 3 ans), une syntaxe plus succincte donne le mme rsultat:
Fichier /etc/modprobe.d/alsa.conf
TODO: finir de dcrire ces paramtres:
Ces paramtres peuvent tre spcifis dans le fichier de configuration d'ALSA (/etc/modprobe.d/alsa.conf avec une ligne options comme dans les exemples ci-dessous.
* index: obligatoire, dtermine l'ordre des cartes sons.
* id: facultatif, un nom.
* enable: facultatif
* pcm_substreams: faclutatif, dtermine le nombre de priphriques pcm virtuels de la carte
* pcm_notify: facultatif, ???
J'ai jamais vraiment lu quoi que ce soit ce sujet mais j'ai du srieusement 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 crer un dfaut ALSA bas sur la carte virtuelle Loopback. Comme a, toutes les applications ALSA utiliseront ce dfaut. 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 entres Jack dans des applications ALSA.
Voici le fichier .asoundrc dans toute sa gloire :
En rsum, on a dfini 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)
Sauver ce fichier dans '$HOME/.asoundrc_loop' et le copier dans $HOME/.asoundrc
A vrifier qu'il ne se trouve pas de fichier .asoundrc existant et dj utilis l'insu de son plein gr 😉
Maintenant, jouer par ex. un fichier audio avec mplayer:
On peut aussi utliser lmms avec ALSA pour tester notre dfaut.
Evidemment , on entendra rien encore via Jack!
Alors, comme subdevice 0,0 est le PCM ALSA de sortie, le signal sera disponible en entre vers le PCM 'cloop' dfini 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'entre (subdevice 0,1) collectera le signal de sortie du subdevice 1,1 ou 'ploop' qu'on a dfini 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
et
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 complte!), dans skype, configurer l'audio en slectionnant "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 paramtres, par exemple:
Noter les paramtres -q 1. Cette option rgle la qualit de r-chantillonage. Dans l'exemple, la configuration est adapte 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
Dans Qjackctl, allers dans "Options -> Executer aprs dpart du serveur" et ajouter cette ligne
Sauver la config, faire repartir jack. Loop2jack doit executer la cration de 'c/ploop' et connecter vers les ports jacks choisis.
Maintenant, essayer la chose en lanant 'skype', ou 'smasher' ou 'lmms', ou juste 'aplay' ou 'arecord'. Alors, a marche ? 😀
Bien sr, il y a de la latence vu qu'on a choisi le dfaut 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 aperues de quoi que ce soit. Y a qu' refaire partir jack via Qjackctl, et le son revient 😀
Certaines cartes son ncessitent de rajouter des paramtres lis leur infrastructure matrielle. Ainsi, pour une RME Multiface II nous pourrons avoir le fichier ~/,asoundrc suivant:
Thorgal, l'auteur de l'article original en anglais, utilise en plus d'une carte RME, une carte sur la carte mre (Intel HDA) et aussi une webcam USB avec son propre micro. Cela serait un comble de ne pas pouvoir utiliser leurs capacits d'enregistrement d'une faon ou d'une autre, ceci surtout en tenant compte du fait qu'il utilise beaucoup skype.
Notez que la mme chose peut tre faite avec la carte Intel HDA ("intel" pcm capture dfini dans l'asoundrc prcdent) condition de brancher un micro son entre 😊.
Lecture seule
D'abord, j'ai lanc jackd et alsa_in sur "cloop" (comme ci-dessus). Ensuite, j'ai utilis ecasound comme intermdiaire pour tre capable de mesurer un dlai 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 trs simple :
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 mme port de capture, et une piste stro connecte au client "cloop". En fait, comme la sortie d'ecasound se fait sur le priphrique par dfaut 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 donnes qui viennent de la source sonore. J'ai compar les ondes rsultantes et j'ai observ un dlai de 120 ms quand les paramtres de dmix sont rgl sur "default".
Une autre faon 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'entre d'ecasound, et ce port "click" une des pistes d'ardour, la deuxime doit toujours recevoir les donnes du client cloop. Si vous changez les paramtres de dmix dans le .asoundrc, vous observerez que vous allez obtenir des dlais diffrents. C'est vous de dcider des rglages des paramtres period_size et buffer_size.
Un dlai de 120 ms n'est pas mauvais du tout en tenant compte du grand tampon de donnes que dmix utilise par dfaut. Mais souvenez-vous que dmix est rellement mauvais avec des petits tampons et que vous devez donc choisir une taille qui soit suffisament grande. J'ai termin avec les valeurs suivantes :
Ce rglage me donne une latence finale du Loopback d'environ 35ms, tandis que dmix fait un bon travail sans disparition du son.
Lecture et enregistrement
Si vous utilis la solution logicielle complte (lecture et enregistrement ALSA avec cloop et ploop), vous pouvez toujours utiliser ecasound comme outil intermdiaire. Il faut juste le lancer de cette faon :
Dans qjackctl, connectez les ports "click" d'ardour sur les ports "ploop". Ceci va permettre ecasound d'enregistrer les clicks d'ardour travers l'audio de ploop et loopback. Ensuite, ecasound va sortir sur le priphrique PCM ALSA par dfaut qu'alsa_in collecte travers le client cloop.
Dans ardour, comme dans le setup prcdent, crer deux pistes, une qui reoit les clics internes d'ardour directement, l'autre connecte sur le port cloop. Armez la piste pour l'enregistrement, lancez le clic, et activez le transport. Vous allez voir (ce que vous allez voir ❗) les donnes audio sur les deux pistes, celle qui est branche sur cloop est retarde. Avec mon .asoundrc customis, j'obitient une latence globale en dessous de 100ms (approximativement 75ms). Ce n'est pas mal du tout compte tenu du but du pont de bouclage Loopback.
Si une faible latence est une ncessit, n'utilisez que des applications compatibles avec JACK 😀
Thorgal - 3 mai 2010
Un peu de asoundercien pour finir. Un contrle de volume pour le Loopback peut tre facilement rajout. Editez ~/.asoundrc, et rajouter une section softvol:
Puis dans pcm.aduplex, remplacez playback.pcm "amix" par playback.pcm "asoftvol":
Et l, alors que nous avons dfini un seul contrle de volume pour la lecture, miracle! nous nous retrouvons dans alsamixer avec deux contrles de volumes pour la carte Loopback, un pour la lecture, le deuxime pour la capture. Le asoudercien est dcidment une langue bien mystrieuse.
Alllinux 😀
Lecture audio et video HTML5 dans Firefox
Attention, avec cette configuration, la lecture audio HTML5 dans Firefox ne fonctionnera pas.
Il faut apporter une modification dans le menu "about:config"
Crer un boolen "media.use_cubeb" et le mettre "false"
Ainsi firefox enverra le flux en 16 bits et non 32bits flottants.
Introduction
Certains producteurs / musiciens / etc utilisent linux pour leur travail. Il se peut qu'ils aient construit un PC entirement ddi leur production, o le serveur Jack Audio Connection Kit tourne de faon permanente. En tant que musicien-producteur moi-mme, je ne dsire pas d'autres couches son intermdiaires entre JACK et le niveau matriel (pilot par ALSA dans mon cas) du genre PulseAudioou autre. En effet, je possde 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 gnrique qu'ALSA fournit pour la majorit des cartes du genre interne (Intel HDA, etc). D'une part, seul le logiciel spcial de mixage TotalMix (ou hdspmixer en linuxien) alli Jack me permet d'utiliser cette carte sous toutes ces coutures. Cela a comme inconvnient que les logiciels ou applications non "jackifis" ne peuvent rejoindre l' environnent trs flexible et fiable fournit par le graphe audio de Jack. D'autre part, je ne souhaite pas recourir ma carte son interne (l' "infme" 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 jackifies ? 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'apparat dans le graphe jack que lorsque l'application ALSA joue quelque chose et disparat aussitt aprs
- ce plugin n'a pas t mis jour depuis longtemps et est trs instable.
En bref, il n'est pas la hauteur des proprits dsires (permanence du pont, etc).
Ce n'est que rcemment, alors que je faisais "mumuse" avec la carte virtuelle ALSA-Loopback que l'ide d'un pont permanent ALSA-vers-Jack m'est revenue. Une sorte de flash, en quelque sorte 😀
Cette page est une adaptation franaise de Jack and Loopback device as Alsa-to-Jack bridge avec quelques ajouts propres un wiki gnral sur l'audio professionnelle.
La carte son virtuelle ALSA-Loopback
La carte virtuelle ALSA-Loopback est comme son nom l'indique un matriel compltement virtuel, une mulation d'une vraie carte son. Elle apparat dans la liste des cartes son ALSA ds que le module noyau 'snd-aloop' est charg.Il se peut fortement que le noyau install par la distro ne contienne pas ce module par dfaut. On peut y remdier par la compilation "manuelle" de ce module.
noter que le chargement de ce module peut s'avrer difficile aprs compilation manuelle mme lorsque le paquet 'linux-headers' est install et la compilation sans problme !
Voir la discussion (en anglais) sur le forum linuxmusicians.
EDIT: J'ai rgl le problme! Voir la mise--jour juste aprs cette section.
vrifier au pralable 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 bte. Il faut choper le code source 'alsa-driver' correspondant la version d'ALSA install par dfaut. 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, dcompress et dsarchiv quelque part sur le disque dur, aller dans le rpertoire principal (cd alsa-driver-xxxx) et configurer pour la compilation (ne pas installer le rsultat, 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 ( rgle les problmes lis 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 dpendances :
Copy to clipboard
sudo cp ./modules/snd-aloop.ko /lib/modules/`uname -r`/kernel/sound/drivers/ sudo depmod -a
Vrifier 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 dfaut du module (mais on peut modifier au chargement si on veut, sauf que c'est pas la peine).
OK, si la mthode douce a foir, on va passer des choses plus drastiques. On va rinstaller la totalit du pilote ALSA. Alors bien sr, il va falloir dans ce cas ajouter toutes les cartes sons du systme 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 systme 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 dernire 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 sr!
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 entre. On peut donc collecter le signal d'une application ALSA qui envoie son signal vers la sortie de cette carte l'entre de cette mme carte 😀 et vice-versa.Par dfaut, cette carte virtuelle est compose de 2 parties, elles-mmes composes de 8 sous-parties. Par exemple, on peut constater aprs 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 symmtriques, dans le sens o si 0 est utlis pour la sortie, 1 est automatiquement une entre 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 mme signal se retrouve en entre 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 lancs sans paramtre particulier, les programmes ALSA (comme flash dans firefox) utilisent la carte son par dfaut qui correspond gnralement la premire carte son. Si celle-ci est utlise par JACK, elle ne sera pas disponible pour ALSA. Il est donc ncessaire de configurer ALSA pour que la permire carte son soit la loopback. JACK utilisera alors la deuxime carte (ou celle approprie votre configuration).Autre avantage, nous pourrons mme nous passer compltement de pulseaudio. C'est souvent mme ncessaire car ce programme a la sale manie de dmarrer de faon intempestive. De plus, il semble obsd de vouloir tre la carte son par dfaut, et ceci va perturber notre configuration. Pour dsinstaller pulseaudio, cela est une autre histoire, trs simple sous gentoo, plus complique avec les distributions base sur debian ou rpm qui ont gnome comme bureau par dfaut. Rcemment, gnome-settings-daemon et gdm se sont mis dpendre de pulseaudio. Le plus simple est donc de dactiver pulseaudio. Pour cela, dsactivez autospawn dans le fichier /etc/pulse/client.conf :
Copy to clipboard
autospawn = no
Exemple de configuration (vous pourrez trouver une description plus dtaille du rglage de "carte par dfaut" 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 rcents (hum, tout kernel depuis 2 ou 3 ans), une syntaxe plus succincte donne le mme rsultat:
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 dcrire ces paramtres:
Ces paramtres peuvent tre spcifis dans le fichier de configuration d'ALSA (/etc/modprobe.d/alsa.conf avec une ligne options comme dans les exemples ci-dessous.
* index: obligatoire, dtermine l'ordre des cartes sons.
* id: facultatif, un nom.
* enable: facultatif
* pcm_substreams: faclutatif, dtermine le nombre de priphriques 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 srieusement 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 crer un dfaut ALSA bas sur la carte virtuelle Loopback. Comme a, toutes les applications ALSA utiliseront ce dfaut. 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 entres 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 rsum, on a dfini 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)
Sauver ce fichier dans '$HOME/.asoundrc_loop' et le copier dans $HOME/.asoundrc
A vrifier qu'il ne se trouve pas de fichier .asoundrc existant et dj 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 dfaut.
Evidemment , on entendra rien encore via Jack!
Le Pont vers Jack
Alors, comme subdevice 0,0 est le PCM ALSA de sortie, le signal sera disponible en entre vers le PCM 'cloop' dfini 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'entre (subdevice 0,1) collectera le signal de sortie du subdevice 1,1 ou 'ploop' qu'on a dfini 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 complte!), dans skype, configurer l'audio en slectionnant "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 paramtres, par exemple:
Copy to clipboard
alsa_in -j cloop -dcloop -n 2 -p 256 -r 96000
Les clients jack 'cloop' et 'ploop' et leur connection aux ports jack selon les besoins peuvent tre crs et initialiss par Qjackctl si on met tout a dans un script shell, par exemple /usr/local/bin/loop2jack
Copy to clipboard
Noter les paramtres -q 1. Cette option rgle la qualit de r-chantillonage. Dans l'exemple, la configuration est adapte 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 aprs dpart du serveur" et ajouter cette ligne
Copy to clipboard
/usr/local/bin/loop2jack
Sauver la config, faire repartir jack. Loop2jack doit executer la cration de 'c/ploop' et connecter vers les ports jacks choisis.
Maintenant, essayer la chose en lanant 'skype', ou 'smasher' ou 'lmms', ou juste 'aplay' ou 'arecord'. Alors, a marche ? 😀
Bien sr, il y a de la latence vu qu'on a choisi le dfaut 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 aperues 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 IICertaines cartes son ncessitent de rajouter des paramtres lis leur infrastructure matrielle. Ainsi, pour une RME Multiface II nous pourrons avoir le fichier ~/,asoundrc suivant:
Copy to clipboard
Setup alternatif
Setup alternatif : solution matrielle et logicielleThorgal, l'auteur de l'article original en anglais, utilise en plus d'une carte RME, une carte sur la carte mre (Intel HDA) et aussi une webcam USB avec son propre micro. Cela serait un comble de ne pas pouvoir utiliser leurs capacits d'enregistrement d'une faon ou d'une autre, ceci surtout en tenant compte du fait qu'il utilise beaucoup skype.
A la place d'utiliser le priphrique loopback pour la capture ALSA capture (toutes les entres relatives "ploop" dans les asoundrc prcdents), nous pouvons dclarer simplement les entres matrielles dans asoundrc. Donc, nous enlevons toutes les entres ploop (y compris les sous-priphriques utiliss pour la capture ALSA et alsa_out, ils sont maintenant inutiles, et nous rajoutons les priphriques matriels PCM de la carte son Intel et de la webcam USB.
Copy to clipboard
Ceci fut facile tester. Nous devons tre sur que la carte par dfaut dans asoundrc utilise pcm capture "usb" comme ci-dessus. Ensuite, nous dmarrons skype et le rglons pour qu'il utilise le priphrique "Default" pour tout. Ensuite avec QasMixer ou votre mixeur prfr, nous contrlons le niveau de capture de la webcam (pourquoi laisser kype le rgler?). Ansuite, nous essayons le test d'appel de skype et nous assurons qu'il a bien enregistr votre voix.
Notez que la mme chose peut tre faite avec la carte Intel HDA ("intel" pcm capture dfini dans l'asoundrc prcdent) condition de brancher un micro son entre 😊.
latence
Pour mesurer et rgler 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 intermdiaire pour tre capable de mesurer un dlai 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 trs 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 mme port de capture, et une piste stro connecte au client "cloop". En fait, comme la sortie d'ecasound se fait sur le priphrique par dfaut 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 donnes qui viennent de la source sonore. J'ai compar les ondes rsultantes et j'ai observ un dlai de 120 ms quand les paramtres de dmix sont rgl sur "default".
Une autre faon 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'entre d'ecasound, et ce port "click" une des pistes d'ardour, la deuxime doit toujours recevoir les donnes du client cloop. Si vous changez les paramtres de dmix dans le .asoundrc, vous observerez que vous allez obtenir des dlais diffrents. C'est vous de dcider des rglages des paramtres period_size et buffer_size.
Un dlai de 120 ms n'est pas mauvais du tout en tenant compte du grand tampon de donnes que dmix utilise par dfaut. Mais souvenez-vous que dmix est rellement 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 rglage me donne une latence finale du Loopback d'environ 35ms, tandis que dmix fait un bon travail sans disparition du son.
Lecture et enregistrement
Si vous utilis la solution logicielle complte (lecture et enregistrement ALSA avec cloop et ploop), vous pouvez toujours utiliser ecasound comme outil intermdiaire. Il faut juste le lancer de cette faon :
Copy to clipboard
ecasound -i alsa -o alsa
Dans qjackctl, connectez les ports "click" d'ardour sur les ports "ploop". Ceci va permettre ecasound d'enregistrer les clicks d'ardour travers l'audio de ploop et loopback. Ensuite, ecasound va sortir sur le priphrique PCM ALSA par dfaut qu'alsa_in collecte travers le client cloop.
Dans ardour, comme dans le setup prcdent, crer deux pistes, une qui reoit les clics internes d'ardour directement, l'autre connecte sur le port cloop. Armez la piste pour l'enregistrement, lancez le clic, et activez le transport. Vous allez voir (ce que vous allez voir ❗) les donnes audio sur les deux pistes, celle qui est branche sur cloop est retarde. Avec mon .asoundrc customis, j'obitient une latence globale en dessous de 100ms (approximativement 75ms). Ce n'est pas mal du tout compte tenu du but du pont de bouclage Loopback.
Si une faible latence est une ncessit, n'utilisez que des applications compatibles avec JACK 😀
Conclusion
J'espre que tout cela est assez clair. L'ide derrire ceci tait d'utiliser un priphrique de capture matriel au lieu du priphrique Loopback. Cela rduit le rle du priphrique Loopback la seule lecture ALSA, et supprime le besoin d'alsa_out, ce qui conomise un peu le CPU ainsi que des cycles d'activit dans jack. Pour le moment, j'utilise ma webcam USB en capture car je n'ai besoin de la capture ALSA que pour skype. L'Intel HDA est aussi disponible bien que je n'en ait pas rellement besoin. Il est cependant connect mon panneau de connexions, comme cela je peux toujours l'utiliser si besoin est (improbable).Thorgal - 3 mai 2010
Note
Contrle de volume pour le LoopbackUn peu de asoundercien pour finir. Un contrle de volume pour le Loopback peut tre facilement rajout. Editez ~/.asoundrc, et rajouter une section softvol:
Copy to clipboard
# soft volume pcm.asoftvol { type softvol slave.pcm "amix" control { name PCM } min_dB -51.0 max_dB 0.0 }
Puis dans pcm.aduplex, remplacez playback.pcm "amix" par playback.pcm "asoftvol":
Copy to clipboard
pcm.aduplex { type asym playback.pcm "asoftvol" # playback.pcm "amix" capture.pcm "asnoop" }
Et l, alors que nous avons dfini un seul contrle de volume pour la lecture, miracle! nous nous retrouvons dans alsamixer avec deux contrles de volumes pour la carte Loopback, un pour la lecture, le deuxime pour la capture. Le asoudercien est dcidment une langue bien mystrieuse.
Alllinux 😀
Lecture audio et video HTML5 dans Firefox
Attention, avec cette configuration, la lecture audio HTML5 dans Firefox ne fonctionnera pas.
Il faut apporter une modification dans le menu "about:config"
Crer un boolen "media.use_cubeb" et le mettre "false"
Ainsi firefox enverra le flux en 16 bits et non 32bits flottants.