• Lefinnois.net

  • Multiples sources d’enregistrement audio sous GNU/Linux avec ALSA

16 mai 2007

Multiples sources d’enregistrement audio sous GNU/Linux avec ALSA

Tags : ,

posté dans Outils Unix |

Configurer une petit solution de streaming audio lorsqu'on dispose d'un serveur dédié est l'affaire de peu de temps. L'installation d'Icecast2 est aisée, tout comme celle du streamer Darkice. Ensuite... on passe du temps à comprendre pourquoi le son du tuner ou du lecteur CD connecté à l'entrée Ligne de la carte son ne peut être enregistré alors qu'on l'entend bien dans les haut-parleurs du PC.

Pire encore que le fait d'enregistrer du silence, l'utilisation d'un bitrate variable pour l'encodage du stream par Darkice ou Ices2 donne des résultats très étranges. Le bitrate variable, comme son nom l'indique n'est pas fixe. Or lorsque le signal à encoder est plat, le calcul du bitrate semble devenir impossible et le lecteur (XMMS par exemple) ne fait que bufferiser sans jamais lire le flux.

Mais le problème n'est pas là. Pourquoi ne puis-je pas enregistrer ce que j'entends dans mes beau haut-parleurs Altec Lansing ? La réponse est simple : ALSA est en mesure de prendre en charge un grand nombre d'entrées et de sorties pour une carte son classique (Ensoniq 5880 AudioPCI). Cependant, encore faut-il préciser quelle entrée doit servir de source d'enregistrement.

Pour cela deux solutions :

  • alsamixer, le mixeur graphique en mode console
  • amixer, le mixeur en ligne de commandes (mieux)

Sur ma configuration, le mixer control concerné est Line :

% amixer sget Line,0
Simple mixer control 'Line',0
  Capabilities: pvolume pswitch pswitch-joined cswitch cswitch-exclusive
  Capture exclusive group: 0
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Front Left: Playback 0 [0%] [off] Capture [off]
  Front Right: Playback 0 [0%] [off] Capture [off]
% amixer sset Line,0 0%,0% cap

Ici, c'est l'argument cap (comme capture) qui sélectionne ce contrôle comme source d'enregistrement. Dès lors, plus de problème avec Darkice qu'il suffit de configurer pour une source ALSA :

[input]
device          = hwplug:0,0
sampleRate      = 11025
bitsPerSample   = 16
channel         = 2

J'en profite ici pour préciser une petite astuce. Plutôt que de spécifier, comme ici, le périphérique ALSA source, utilisez plutôt plug:dsnoop (plugin dsnoop). Celui-ci permet de partager une source d'enregistrement. Autrement dit, vous pouvez non seulement utiliser Darkice pour streamer le son mais utiliser, en plus, un autre outil comme arecord pour enregistrer cette source. Le tout sans utiliser des choses lourdes comme Jackit. Que du bonheur...

Article posté on Mercredi, 16 mai 2007 à 14:20 dans Outils Unix. Vous pouvez suivre les commentaires sur cet article via un feed RSS 2.0. Vous pouvez laisser un commentaire. Le Ping n'est actuellement pas autorisé.

Il y a actuellement 2 réponses pour “Multiples sources d’enregistrement audio sous GNU/Linux avec ALSA”

  1. 1 Le 12 juin 2007, toots à écrit :

    Il peut être important de penser à ajouter ça au démarra et éventuellement régulièrement.

    En effet ce reglage a la sale habitude de disparaitre au reboot ou autre, et lancer une émission dans le vide est assez frustrant…

    Pour moi j’ai en crontab du root:
    @reboot amixer sset Line cap > /dev/null
    @hourly amixer sset Line cap > /dev/null

    Comme ça on est tranquille… :)

  2. 2 Le 12 juin 2007, toots à écrit :

    J’oublais..
    Sauf cas spécial, le périphérique ‘default’ d’alsa est défini pour avoir tout ce qu’il manque au hardware, càd mixage logiciel des flux sortant (plugin ‘dmix’) et/ou partage du flux entrant (le ‘dsnoop’), ainsi que changement d’échantillonage ou de format PCM (plug in ‘plug’)..

    Donc à part cas particuliers, utiliser default est recommandé à mon avis…

Laisser un commentaire

*
Pour prouver que vous n'êtes pas un bot, recopiez le code ci-dessous
Anti-Spam Image