©Wikimedia
Enregistrer en ligne de commande n'est pas une mince affaire...
Mais comprendre les arcanes d'alsa permet entre autres de pouvoir sauvegarder tout ce qui passe par la carte son, et donc de récupérer des enregistrements diffusés en streaming dans des formats destinés à contrecarrer le téléchargement, comme le Realaudio. Ça peut aussi servir à capturer le son d'une vidéo, d'un jeu, etc.1
Il faut disposer de sox[1], et veiller à ce qu'il soit installé avec les librairies appropriées; pour capturer le format du périphérique /dev/dsp, il faut installer libsox-fmt-oss. Tant qu'à faire, installer aussi libsox-fmt-mp3, qui permettra à sox de lire (mais pas d'écrire) au format mp3.
L'important est de configurer le périphérique 'Capture Source' dont on peut vérifier l'état par la commande
$ amixer contents (...) numid=24,iface=MIXER,name='Capture Source' ; type=ENUMERATED,access=rw------,values=2,items=8 ; Item #0 'Mic' ; Item #1 'CD' ; Item #2 'Video' ; Item #3 'Aux' ; Item #4 'Line' ; Item #5 'Mix' ; Item #6 'Mix Mono' ; Item #7 'Phone' : values=5,5 numid=25,iface=MIXER,name='Capture Switch' ; type=BOOLEAN,access=rw------,values=1 : values=on numid=26,iface=MIXER,name='Capture Volume' ; type=INTEGER,access=rw---R--,values=2,min=0,max=15,step=0 : values=15,15 | dBscale-min=0.00dB,step=1.50dB,mute=0 (etc.)
Les valeurs de numid varient évidemment d'un système à l'autre.
Ceci bascule le Capture Switch (une valeur booléenne, 0 ou 1):
$ amixer cset numid=25,iface=MIXER 1
Ceci règle le volume d'enregistrement au maximum:
$ amixer cset numid=26,iface=MIXER 15
Ceci détermine quel sera le «canal» enregistré, en l'occurrence le micro:
$ amixer cset numid=24,iface=MIXER 0
Si on choisit le mixer, 'Mix', (ici 5), tout sera enregistré.
Une fois Alsa ainsi configuré, la commande "rec" (un alias pour sox) devrait fonctionner:
$ rec -c 2 test.wav
Il existe un script bash qui rend convivial l'usage de lame et sox, et permet d'enregistrer directement au format mp3 :
http://sourceforge.net/projects/mp3record/
Mes premières tentatives pour le faire fonctionner ont d'abord été infructueuses et résultaient d'incompatibilités avec les fonctionnalités des versions des programmes sollicités.
La commande au coeur de mp3record est la suivante:
(sox -r $strFreqRate -t ossdsp -w -s /dev/dsp -t raw -c 2 - \ | lame -s 44.1 -x -b $strBitRate -m s - $strFileName)
Elle transmet donc, avec les paramètres spécifiés par les variables, le son converti au format raw sur la sortie standard (noter les '-'), qui sera récupérée par lame pour l'encoder au format mp3.
Après quelques essais, il s'est avéré que le format raw n'était pas pris en charge par la version de lame (14.0.1-2+b1) présente sur la Debian lenny, et que des options de lame posaient problème.
En fin de compte, la combinaison suivante en ligne de commande a donné satisfaction:
$ sox -r 44100 -t ossdsp -w -s /dev/dsp -t wav -c 2 - | lame -s 44.1 -b 128 - outputfile.mp3
Une fois les modifications similaires apportées au script mp3record
#Subprocess record #The heart of this script, records mp3 file with specified params # (sox -r $strFreqRate -t ossdsp -w -s /dev/dsp -t wav -c 2 - \ | lame -s 44.1 -b $strBitRate - $strFileName) &
...il donne entière satisfaction:
gv@fantasio:~$ mp3record mp3record v. 1.4 Written by Tony McCallie http://www.bluedogtek.com Filename? [/home/gv/recorded_20101029_1811.mp3]: Time Limit? (Minutes) [0 = No Limit]: Frequency? [44100]: BitRate? (128 is CD quality) [128]: Would you like to run a command when finished?[N/y] Recording of /home/gv/recorded_20101029_1811.mp3 will begin when you hit enter.
Hit ENTER to begin recording, hit ENTER again to stop recording [...]
Voir aussi la page de man de arecord, comme mentionné sur http://drsjlazar.blogspot.com/2009/02/tidbit-recording-soundcard-output.html