![[Top bar]](../../common/images/Topbar-en.gif)
Convert to GutenPalm
or to PalmDoc |
![[Fotografía del Autor]](../../common/images/PhilipGroot.jpg)
by
About the author:
Pronto recibirá su doctorado en la Universidad de Nijmegen en la asignatura de Quimiometría. Le gusta trabajar con Linux y escribe sus experiencias de forma regular.
Content:
|
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ónNormalmente 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