J'ai eu récemment besoin d'enregistrer sous forme de fichier audio une visio-conférence (ça aurait pu être un fichier vidéo également). Je voulais donc à la fois capturer le son qui entre (mon micro) et celui qui sort (mon casque).
J'utilisais le serveur public de visioconférence d'IndieHosters, qui propose l'enregistrement… Mais pas de récupérer les fichiers. On peut aussi souhaiter ne pas se reposer sur l'enregistrement du logiciel/plateforme, pour des raisons de confidentialité par exemple.
Enfin, cette méthode peut avoir d'autres applications, par exemple pour enregistrer un podcast/émission de radio et y passer de la musique/sons.
C'est dommage que ça ne soit pas plus simple mais en tout cas ça fonctionne. C'est parti 🎶, petite musique, tourne la page…
A. Contexte et pré-requis
Je vous explique comment j'ai procédé, pour ma part j'utilise :
- La distribution GNU/Linux Debian 11 Bullseye
- L'environnement de bureau gnome
- le logiciel Enregistreur de sons (gnome-sound-recorder)
… La procédure devrait être la même sur toutes les distributions/bureaux/ Linux1 et fonctionner avec tous les logiciels capables de capturer du son.
Il est nécessaire d'être familier avec la ligne de commande.
Il est nécessaire d'installer le logiciel pavucontrol. Sous Debian/Ubuntu/Mint, ça se fait avec :
$ sudo apt install pavucontrol
B. Logique générale
Sous GNU/Linux, avec des logiciels comme l'Enregistreur de sons gnome, on enregistre une seule source audio à la fois.
Nous allons donc créer une source audio virtuelle qui « fusionnera » une entrée et une sortie pour les présenter au logiciel comme une source unique.
C. Préparation
Repérer les sources audio qui m'intéressent
La commande suivante va nous permettre d'afficher toutes les sources audio disponibles :
$ pactl list
Beaucoup d'infos sont affichées, on peut filtrer l'affichage pour aller à l'essentiel avec la commande suivante :
$ LANG=C pactl list sources |grep 'Name' -A1
Chez moi, avec un kit mains libres bluetooth connecté, ça affiche ceci (ça sera subtilement différent chez toi) :
Name: alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
Description: Monitor of Audio interne Stéréo analogique
--
Name: alsa_input.pci-0000_00_1b.0.analog-stereo
Description: Audio interne Stéréo analogique
--
Name: bluez_sink.90_7A_XX_XX_XX_XX.headset_head_unit.monitor
Description: Monitor of WI-C310
--
Name: bluez_source.90_7A_XX_XX_XX_XX.headset_head_unit
Description: WI-C310
NB: si une source audio est « mutée » (volume à zéro), elle n'apparaîtra pas dans la liste.
Détaillons les 4 sources audio proposées :
Identifiant | Appareil concerné | Permet de capturer |
---|---|---|
alsa_output.pci-0000_00_1b.0.analog-stereo.monitor |
carte son interne à l'ordi portable | hauts parleurs intégrés (ou prise casque) |
alsa_input.pci-0000_00_1b.0.analog-stereo |
carte son interne à l'ordi portable | micro intégré (ou prise micro) |
bluez_sink.90_7A_XX_XX_XX_XX.headset_head_unit.monitor |
kit main libre bluetooth | oreillettes du kit main libre |
bluez_source.90_7A_XX_XX_XX_XX.headset_head_unit |
kit main libre bluetooth | micro du kit main libre |
Comment s'y repérer et trouver les sources audio qui m'intéressent ?
Le champ description est assez aidant, par ailleurs, quelques mots-clefs :
bluez
désigne un périphérique bluetoothalsa
etpci
désignent des cartes son internesmonitor
output
ousink
désignent une sortie (ex: hauts parleurs)source
ouinput
désignent une entrée (ex: microphone)
Puisque c'est le son géré par mon kit mains libres que je souhaite capturer, je
repère les deux sources que je souhaite mixer :
bluez_sink.90_7A_XX_XX_XX_XX.headset_head_unit.monitor
et
bluez_source.90_7A_XX_XX_XX_XX.headset_head_unit
.
Créer la sortie virtuelle « in_out_mix ».
Je crée une entrée virtuelle que je choisis de nommer in_out_mix.
$ pactl load-module module-null-sink sink_name=in_out_mix sink_properties=device.description=Mixage-entrée-et-sortie
Puis j'y ajoute les deux entrée réelles qui m'intéressent (commande à adapter avec les bons noms de sortie) :
$ pactl load-module module-loopback source=bluez_sink.90_7A_XX_XX_XX_XX.headset_head_unit.monitor sink=in_out_mix
$ pactl load-module module-loopback source=bluez_source.90_7A_XX_XX_XX_XX.headset_head_unit sink=in_out_mix
D. Utilisation : enregistrons !
Si ton logiciel d'enregistrement propose de choisir une source, sélectionner « Mixage entrée et sortie » ou « Moniteur mixage entrée et sortie » et c'est parti ! C'est le cas par exemple de Easy Screencast.
Si ça n'est pas le cas (comme pour l'Enregistreur de sons gnome) :
- Ouvrir pavucontrol
- Dans l'onglet Entrées, cliquer sur la coche verte sur la ligne « Monitor of Mixage entrée et sortie »
- Lancer l'enregistrement normalement depuis l'Enregistreur de sons gnome.
E. Aller plus loin
Volumes
pavucontrol permet de visualiser et régler les volumes de tes deux sources, quelques tests/ajustements sont probablement nécessaires pour obtenir un bon équilibre entre les deux sources.
Autres manières de faire ?
Il est probablement possible d'arriver au même résultat en utilisant le logiciel OBS qui est supposé pouvoir combiner plusieurs sources audio.
Péréniser
Pour éviter de refaire la manip à chaque fois, il t'es possible de mettre les 3 lignes suivantes, reprenant les trois commandes (sans le « pactl » dans le fichier ~/.pulse/default.pa :
load-module module-null-sink sink_name=in_out_mix sink_properties=device.description=Mixage-entrée-et-sortie
load-module module-loopback source=bluez_sink.90_7A_XX_XX_XX_XX.headset_head_unit.monitor sink=in_out_mix
load-module module-loopback source=bluez_source.90_7A_XX_XX_XX_XX.headset_head_unit sink=in_out_mix
Source et inspiration
- How to mix two input sources in Pulseaudio (for recording mic and speakers with SimpleScreenRecorder) par jakweg sur Unix & Linux Stackexchange.
- Pulseaudio-Record-Output-and-Input par thenorili sur GitHub.
-
tant qu'elles utilisent le gestionnaire de son pulseaudio, ce qui est le choix par défaut des principales distributions. ↩