Enregistrer la carte son

http://upload.wikimedia.org/wikipedia/commons/6/69/Gray1207.png ©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

Mp3record

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

Footnotes:

1. Noter qu'enregistrer ainsi des flux mp3 entraînera un décodage et un réencodage, donc une perte de qualité. En, ce cas, il vaut mieux essayer de sauvegarder le flux directement.