Alsa: audio loopbacks (o cómo capturar el audio que reproduzco)
Llevaba ya mucho tiempo sin escribir por aquí algo... y para desengrasarme un poco voy con una recetilla muy simple pero que puede ser de mucha utilidad: supongamos que entras en una página que reproduce audio mediante streaming y que quieres capturar ese audio. Si abres un programa de captura comprobarás que no se captura ese sonido... necesitamos algún tipo de tarjeta "virtual" que nos permita capturar lo que reproduce, esto es: audio loopback.
Instalando (quick'n'dirty)
Los señores de ALSA crearon hace tiempo un modulito que permitía justamente esto, el aloop, pero lamentáblemente no se compila por defecto, esto hace que distribuciones como Debian no lo traigan de serie, por tanto, nuestro primer paso es compilar el modulito. Empezamos descargándonos el archivo alsa-drivers de ALSA FTP (el link es FTP pero el drupal lo cambia a HTTP porque es muy listo). Lo suyo sería que fuese el de la misma versión que tengamos en nuestro sistema. Si no sabéis qué versión usáis, ejecutad lo siguiente:Instalando(Debian way)
[TO-DO]Usando aloop
Lo primero es cargar el módulo:pcm.aloop { type hw card 2 } ctl.aloop { type hw card 2 }Con esto ya tenemos listos dos canales PCM, que en este caso serían (en nomenclatura ALSA): hw2,0 y hw2,1. Lo que reproduzcamos por uno de ellos, lo podremos capturar por el otro, lo único que hay que tener en cuenta es que el formato de captura debe coincidir con el del audio que se está reproduciendo. Si queréis un ejemplo podéis hacer lo siguiente: capturamos uno de los extremos del loopback:
Rizando el rizo: múltiples tarjetas loopbacks
Bien, ya sabemos crear una tarjeta virtual con sus 8 subcanales PCM listos (si, no lo he comentado antes, pero mezcla hasta 8 canales), pero... ¿qué pasa si queremos más de una tarjeta loopback?. La solución es fácil: al cargar el módulo podemos especificar cuántas tarjetas virtuales queremos (hasta un máximo de ocho):- index: índices de las nuevas tarjetas a crear, esto es: las tarjetas loopback serán hw:2.x y hw:3.x.
- enable: tarjetas virtuales a habilitar. Un 0 la deja deshabilitada y un 1 la activa (realmente no se para que sirve esto ya que no entiendo porqué alguien va a crear una tarjeta virtual que no pueda usar. Simplemente poned tantos unos como tarjetas vayáis a añadir).
- pcm_substreams: número de subcanales que tendrá cada tarjeta virtual. En este caso serán 4 subcanales por tarjeta.
Enlaces
Aunque está un poco anticuada... la página de aloop module puede ser útil... [ show comments ]
blog comments powered by Disqus