Grabación en mp3 en tiempo real
Abstract:
Este artículo muestra cómo grabar música con Linux.
Al contrario que en el consejo LinuxFocus de Enero de 2001, no es el 'costoso'
formato WAV el utilizado. En cambio, grabamos directamente en el mucho
mas reducido formato mp3. Usando este formato se hacen realidad grabaciones
de 24 horas en calidad CD.
Introducción
Normalmente no se puede convertir directamente sonido wave a sonido mp3
en tiempo real. El procedimiento que se usaría es:
-
Primero, grabar un archivo wave con un programa de grabación.
-
Usar un compresor de mp3 (p.ej. 'Lame') para convertir el archivo wave
a un archivo mp3.
Grabar un archivo wave consume rápidamente gran cantidad de espacio
en disco (100 MB para 10 minutos de música estéreo en calidad
CD). Esto limita la capacidad de almacenamiento de música grabada
en este formato. Un compresor de mp3 es capaz de convertir el archivo wave
de 100 MB a 10 MB en la calidad estándar para mp3 (128 kbps, estéreo).
Esta cualidad permite la grabación digital de música durante
24 horas, ¡sin ninguna interrupción! 24 horas son 60*24=1440
minutos, ¡¡¡usándo sólo 1,4 GB (1440 MB)
de espacio en el disco duro!!! He utilizado esta característica
para grabar el top 300 de los años ochenta, transmitido por radio
Loostad (también disponibles algunas páginas en inglés).
La grabación sólo se interrumpió una vez: el programa
de grabación de mp3 se para automáticamente después
de 24 horas, y ésto no estaba documentado...; ¡la grabación
fue muy buena! Os mostraré qué software utilicé y
explicaré formas alternativas de hacer grabaciones mp3 en tiempo
real. También he puesto el software que se usa en el artículo
a disposición pública en mi página web (los enlaces
están más abajo en el artículo). |
El procedimiento
Aquí se discuten dos métodos para hacer grabaciones mp3 en
tiempo real, estéreo y con calidad CD:
-
Con el software 'mpegrec' (requiere el compresor
de mp3 'Lame').
-
Con un programa de grabación, p.ej. 'sox', donde
la salida se canaliza al compresor de mp3 ('sox | lame').
'Mpegrec' hace lo mismo que 'sox|lame', pero están definidas unas
opciones diferentes. No se necesita nada más. ¡Simplemente
instala 'Lame'! Te aconsejo usar 'mpegrec'. ¡¡¡No obstante,
ten en cuenta que este programa se para a las 24 horas!!! Más aún,
un molesto error en la emisión resulta en tiempos de grabación
erróneos: el tiempo de grabación según el usuario
lo fija no es usado correctamente. ¡Muchas veces, es mucho menor!
Cómo usar mpegrec
Es fácil usar 'mpegrec'. En un xterm, escribe 'mpegrec -b 128
-o ./prueba.mp3' ¡y ya está!
Explicación de las diferentes opciones:
-b |
Usar 128 kbps como bitrate del mp3. El valor estándar de 'mpegrec'
es 192, que es un valor extraño (y con mucho demasiado grande).
Casi todos los archivos mp3 tienen un bitrate constante de 128 kbps. |
-o |
Nombre del archivo de salida. En este ejemplo: ./prueba.mp3. Si no
se define un archivo de salida, todo se envía a la salida estándar
('stdout'). Normalmente, ésta es el xterm donde el programa es ejecutado.
Todos los códigos mp3 son impresos en la pantalla en vez de ser
almacenados en un archivo... |
Atención:
Por favor, ten cuidado de que los ajustes del mezclador
sean correctos. ¡Si no, no se grabará nada! Debes seleccionar
la fuente de grabación correcta y los controles de volumen apropiados
deben estar en su punto más alto.
Cómo usar 'sox | lame'
Escribe el siguiente comando en un xterm:
sox -t ossdsp -w -s -r 44100 -c 2 /dev/dsp
-t raw - | lame -x -m s - ./prueba.mp3
Explicación de las opciones suministradas:
sox |
El programa de grabación: el sonido se graba usando la 'entrada
de linea' de la tarjeta de sonido. |
-t ossdsp |
La entrada de sonido se origina desde los drivers de sonido OSS. Estos
drivers están incluidos en el kernel de Linux si está incluido
el soporte estándar de sonido. |
-w |
El tipo de bit de la muestra es palabra larga de 16 bits (si no entiendes
esto no te preocupes, no es importante). |
-s |
Los datos de la muestra son de tipo lineal con signo (idem). |
-r 44100 |
La frecuencia de muestreo es 44100 Hz (calidad CD). |
-c 2 |
Grabar desde 2 canales (estéreo). |
/dev/dsp |
Este es el dispositivo de muestreo del sonido: el dispositivo Linux
que provee los datos de la grabación. Todos los dispositivos, puertos,
discos, etc son accedidos usando el directorio '/dev'. El flujo de forma
de onda se accede en linux desde /dev/dsp. De hecho, es posible incluso
obtener tu fichero de audio usando el siguiente comando: 'cat /dev/dsp
>prueba.wav' (¡¡¡funciona sólo si los valores
del mezclador son correctos!!!). |
-t raw |
La salida son datos 'raw' (crudo) (sin cambios, directo desde la tarjeta
de sonido). |
- |
Usar la salida estándar, simbolizada por '-' |
lame |
El compresor de mp3: el sonido grabado se canaliza a 'lame' para la
conversión a mp3. |
-x |
'Forzar la permutación de bytes en la entrada'. No sé
la función concreta de esta opción, pero sin ella el procedimiento
simplemente no funciona (¡hasta que descubrí esto!). |
-m s |
Comprimir como archivo mp3 estéreo. Por defecto, 'lame' lo comprime
como 'joint-stereo': sólo las DIFERENCIAS entre ambos canales de
sonido se comprimen. Como resultado, se consigue una mayor compresión,
pero la calidad del mp3 es más pobre. |
- |
La entrada es 'stdin'. Esto es correcto para el ejemplo actual. |
./prueba.mp3 |
El nombre del archivo mp3 final. |
El mezclador
Un ajuste correcto del mezclador es muy importante. El mezclador determina
la fuente de grabación. Por defecto, el mezclador de KDE está
ajustado como sigue:
Figura 1: Los ajustes estándar del mezclador de KDE.
La Figura 1 muestra que el micrófono es la fuente de grabación
actual. Para nuestros propósitos, la fuente externa está
conectada al ordenador usando la entrada de línea (line-in) de la
tarjeta de sonido. Esta debería ser la fuente de grabación.
Si el puntero del ratón está posicionado en la entrada de
línea del mezclador de KDE, un click con el botón derecho
tiene como resultado el menu representado en la Figura 2.
Figura 2: Seleccionando la fuente correcta de grabación.
Por supuesto, se selecciona 'RecSource' para utilizar la entrada de
línea de la tarjeta de sonido como fuente de grabación. Usa
el mismo procedimiento para desactivar el micrófono como fuente
de grabación: ¡no queremos el ruido adicional!
Atención:
Si no se selecciona la entrada de línea como fuente de grabación,
no se obtiene sonido de ella (¡incluso si tu mism@ puedes oir el
sonido!) No olvides poner la 'entrada de linea' como 'no muda'. La Figura
2 muestra esto correctamente: puedes poner la entrada de línea en
'mute', por lo que ahora está como 'no muda'.
Figura 3: El mezclador de KDE está ajustado correctamente.
Precauciones para obtener buenas grabaciones
Es probable que trabajes normalmente en XWindows y que 'mpegrec' se ejecute
en XWindows. Ésto no es buena idea por los siguientes motivos:
-
XWindows consume una gran cantidad de recursos del sistema. Lo mismo se
puede decir de la grabación y compresión de sonido. En XWindows,
esto puede derivar en perturbaciones en la señal grabada.
-
Si usas tu equipo para grabaciones en tiempo real, no deberías usarlo
para otras tareas. Si es así, no deberías usar XWindows.
Las observaciones mencionadas indican que las grabaciones obtenidas son
mejores si no está presente ningún entorno gráfico.
Esto significa que se debe usar la shell Bash (una shell basada en texto).
Este enfoque tiene las siguientes consecuencias:
-
Necesitas soporte para sonido en la shell Bash. El soporte para sonido
se suele inicializar si se carga XWindows.
-
Necesitas un mezclador que pueda ser controlado desde Bash (en modo texto).
Estos dos problemas se pueden solucionar bastante fácilmente. El
primer problema, soporte para sonido, se soluciona como sigue:
'modprobe -k sb'
Este comando carga el módulo 'sb', que instala mi tarjeta de
sonido (una SoundBlaster AWE 64), si no sabes qué módulo
deberías instalar, mira en tu '/etc/conf.modules' (SuSE) o '/etc/modules.conf'
(depende de la distribución). En mi caso, la parte referente a la
tarjeta de sonido es la siguiente:
alias char-major-14 sb
pre-install sb /sbin/modprobe "-k" "adlib_card"
pre-install sb /sbin/modprobe "-k" "awe_wave"
options sb io=0x220 irq=5 dma=1 dma16=5 # mpu_io=0x330
options adlib_card io=0x388 # FM synthesizer
post-install sb /usr/bin/sfxload "/win98/Program Files/Creative/ctsnd/sfbank/synthgs.sbk"
La tarjeta de sonido se define siempre en 'alias char-major-14' (si usas
los drivers OSS estándar, que es lo más común). La
línea termina con 'sb', por lo que 'modprobe -k sb' inicializa los
servicios de la tarjeta de sonido.
El segundo problema es seleccionar la entrada de línea de tu
tarjeta de sonido con un mezclador en modo texto. Yo uso el programa 'aumix'.
Si se ejecuta el comando 'aumix' en Bash, el mezclador se inicia en modo
interactivo. En este modo, los ajustes se pueden comprobar y cambiar en
un abrir y cerrar de ojos (ver Figura 4).
Figura 4: El mezclador en modo texto 'aumix'.
Puedes seleccionar las diferentes fuentes de grabación con las
flechas. Las teclas '<' y '>' seleccionan el volumen (izda.) o el balance
(dcha.). Las teclas '+' y '-' aumentan y disminuyen el volumen de la fuente
seleccionada. 'm' enmudece la fuente actual . Si la fuente actual está
seleccionada como fuente de grabación, una 'R' roja aparece a la
izquierda del volumen de esta fuente. Si la fuente solo se puede usar para
reproducción, aparece una P. La tecla 's' graba los ajustes hechos
en '~/.aumixrc'. Estos ajustes se pueden activar muy fácilmente
en el siguiente arranque con el comando: 'aumix -L'.
Para automatizar el procedimiento anterior, he escrito un pequeño
guión: './mrec prueba.mp3'. Este guión contiene las siguientes
líneas:
#!/bin/sh
if [ -z "$1" ]; then
echo "Usage: mrec mp3-output-file"
exit 0
fi
modprobe -k sb
aumix -L
mpegrec -b 128 -o "$1"
Se inicializa el sonido, se selecciona la entrada de línea como
fuente de grabación, y 'mpegrec' comienza acto seguido la grabación.
Instalando mpegrec
He puesto 2 versiones de 'mpegrec' en mi página web: una para Windows
(win32) y una para Linux
. Se puede encontrar más información sobre 'mpegrec'
en http://www.netwaysglobal.com/mpegrec/.
Aqui se pueden encontrar únicamente las fuentes y la versión
compilada para win32. No existe una página con más información,
pero se puede encontrar algo más aquí.
Los archivos de 'lame' y consejos sobre la instalación se pueden
encontrar aquí.
Instalación bajo Linux
-
copia el archivo a, p.ej., el directorio /usr/local.
-
desempaqueta el archivo:
-
gunzip mpegrec-1.0.src.tar.gz
-
tar -xvf mpegrec-1.0.src.tar
-
escribe 'cd mpegrec-1.0'
-
escribe 'make'. El programa es compilado.
-
escribe 'make install'. El programa es instalado y está inmediatamente
disponible para uso posterior.
Nota: no se discutirá la instalación en windows, pero necesitarás
la versión para windows de 'lame'. La versión para windows
de 'mpegrec' está disponible solamente para aquellos que estén
interesados. En el archivo .tar.gz (winzip) está incluida una buena
documentación. El enlace a la página principal también
podría ser útil.
Instalación de lame
También están disponibles dos versiones de 'lame', una para
Windows
(win32) y una para
Linux . La página principal de 'lame' está en http://www.mp3dev.org/mp3/.
De nuevo, no explicaré la instalación de la versión
windows. La documentación incluida y el enlace a la página
principal son útiles para usuarios de windows.
Instalación bajo Linux
-
copiar el archivo empaquetado y comprimido a, p.ej. '/usr/local'.
-
desempaqueta el archivo:
-
gunzip lame3.70.tar.gz
-
tar -xvf lame3.70.tar
-
escribe 'cd lame-3.70'
-
Ajusta el 'Makefile' a tus necesidades. Probablemente deberás cambiar
las siguientes líneas:
# remove these lines if you dont have GTK,
or dont want the GTK frame analyzer
GTK = -DHAVEGTK `gtk-config --cflags`
GTKLIBS = `gtk-config --libs`
# Comment out next 2 lines if you want to remove VBR histogram capability
BRHIST_SWITCH = -DBRHIST
LIBTERMCAP = -lncurses
Las líneas que no tienen un '#' deberían tener uno. No
se necesitan estas opciones adicionales.
-
escribe 'make' para compilar 'lame'. Es probable que haya que crear un
enlace simbólico desde el directorio /bin a /usr/local/lame-3.70/lame
para poder ejecutar 'lame' desde cualquier sitio.
Instalar sox
'Sox' es un programa para grabar, convertir y editar sonido. Por ejemplo,
se puede añadir eco a un archivo de sonido. Lee las páginas
del manual de 'sox' ('man sox') para más información. Las
conversiones que sox puede hacer son: convertir un archivo wave a un archivo
.au (el formato estándar de audio de Sun) y viceversa. Ésta
posibilidad es a veces muy útil. La versión de 'sox' utilizada
en este artícula se puede encontrar aquí
y la página principal http://home.sprynet.com/~cbagwell/sox.html.
Instalación bajo Linux
-
copia el archivo empaquetado y comprimido a, p.ej., el directorio '/usr/local'.
-
desempaqueta el archivo:
-
gunzip sox-12.17.tar.gz
-
tar -xvf sox-12.17.tar
-
escribe 'cd sox-12.17'
-
escribe './configure'. Varias opciones son seleccionadas y se crea un 'Makefile'.
Éste es específico para tu sistema.
-
escribe 'make'. Esto compilará 'sox'.
-
escribe 'make install' para instalar 'sox'. 'Sox' está disponible
para su uso futuro.
Otros problemas
He encontrado otros dos problemas:
-
'cron' inicia un pesado proceso find que interfiere con la grabación
de mp3.
-
Los drivers estándar OSS de sonido del kernel daban problemas. Los
archivos mp3 tenían pequeños fragmentos de irritante ruido
(incluso doloroso para los oídos), Un vistazo más cercano
reveló que el archivo wave también tenía ese ruido
independientemente del grabador wave utilizado. Por lo tanto, no es problema
de la codificación de mp3 ('lame').
Cron
Este es un problema de SuSE en general. Un pesado proceso es ejecutado
para actualizar las páginas man y para borrar archivos antiguos
de log. Este proceso es muy útil, pero utiliza demasiada potencia
del procesador, destinada a la grabación de mp3. Cambié el
nombre de 'cron' durante la grabación, de forma que no pudo ser
encontrado y ejecutado. Despues de la grabación, se vuelve a renombrar
'cron'. utiliza el siguiente comando para cambiar el nombre de archivo
de 'cron':
mv /usr/sbin/cron /usr/sbin/cron.backup
Es probable que la ubicación de 'cron' difiera para otras distribuciones.
Puedes encontrar la ubicación de 'cron' con el siguiente comando:
which cron
Comprueba por favor si 'cron' es nacesario para otras tareas. en una
máquina Linux de escritorio, esto no debería ser un problema.
Problema con los drivers de sonido
Solucioné este problema usando los drivers de sonido alternativos
Alsa . En la documentación
de Alsa (no incluída en el paquete de los drivers y utilidades)
hay instrucciones sobre cómo instalar estos drivers. Es mejor no
usar estos drivers a no ser que surjan verdaderos problemas.
--%--multipart-mixed-boundary-1.1069.984580334--%--
Talkback form for this article
Every article has its own talkback page. On this page you can submit a comment or look at comments from other readers:
2001-03-16, generated by lfparser version 2.9