Howto: Linux para grabar cintas.

Grabar la música.

Mezclador de Alsa.

Lo primero es ajustar el mezclador de manera que sólo capturemos sonidos que vengan del Line-In. Lo mejor es usar la aplicación “amixer” que viene en las “Alsa-Tools”. Mediante órdenes en la consola, podemos ajustar el mezclador a nuestro antojo.
Lo mejor es usar un “script” cuando se quiere grabar. Por ejemplo, el script que he creado realiza los siguientes ajustes en el mezclador:

# VOLUMENES DE DISPOSITIVOS DE GRABACIÓN:
#----------------------------------------------------------------------
# 1. Anular todos los dispositivos de grabación que sean prescindibles.
# Vemos todos los dispositivos de grabación:
#       "amixer controls | grep Capture"
#numid=8,iface=MIXER,name='PCM Capture Volume'
#numid=9,iface=MIXER,name='Music Capture Volume'
#numid=17,iface=MIXER,name='Line2 Capture Volume'
#numid=11,iface=MIXER,name='Mic Capture Volume'
#numid=21,iface=MIXER,name='Aux2 Capture Volume'
#numid=15,iface=MIXER,name='IEC958 Optical Capture Volume'
#numid=19,iface=MIXER,name='Analog Mix Capture Volume'
#numid=13,iface=MIXER,name='Audigy CD Capture Volume'
amixer -c 0 cset iface=MIXER,name='Line2 Capture Volume' 0%
amixer -c 0 cset iface=MIXER,name='Mic Capture Volume' 0%
amixer -c 0 cset iface=MIXER,name='Aux2 Capture Volume' 0%
amixer -c 0 cset iface=MIXER,name='IEC958 Optical Capture Volume' 0%
amixer -c 0 cset iface=MIXER,name='Audigy CD Capture Volume' 0%
# PCM: Es el dispositivo que reproduce los ".wav"
# - La siguiente línea, evita que el fichero ".wav" que se esté
#   reproduciendo, sea mezclado internamente. Es decir, si apagamos
#   los altavoces y NO está presente la siguiente línea, el fichero
#   se estaría grabando debido a que el MEZCLADOR está uniendo
#   internamente lo que le llega del micro y la señal .wav que se
#   procesa internamente.
amixer -c 0 cset iface=MIXER,name='PCM Capture Volume' 0%

# Ponemos al máximo el volumen del dispositivo que captura el sonido en
# nuestro caso.
amixer -c 0 cset iface=MIXER,name='Music Capture Volume' 100%
#amixer -c 0 cset iface=MIXER,name='Music Capture Volume' 0%    # Parece no ser
necesario.
# Ponemos al máximo el volumen del mezclador. Todos los dispositivos de
# grabación anteriores irían conectados a este mezclador.
amixer -c 0 cset iface=MIXER,name='Analog Mix Capture Volume' 100%
# LINE: Es el punto en el que tenemos conectado el micrófono.
# - La siguiente línea evita que lo que entra Line, sea reproducido
#   simultáneamente por los altavoces.
#amixer -c 0 cset iface=MIXER,name='Line Playback Switch' off
#amixer -c 0 cset iface=MIXER,name='Line Playback Volume' 0%
amixer -c 0 cset iface=MIXER,name='Analog Mix Playback Volume' 0%
amixer -c 0 sset Line,0 100%,100% unmute cap

#-------------------------------------------------------------------

amixer -c 0 cset iface=MIXER,name='Analog Mix Playback Volume' 100%

amixer -c 0 cset iface=MIXER,name='Line Playback Switch' on
#arecord -v -v -t wav -c 2 -f S32_LE -r 96000 -D cards.pcm.default --period-size=64 --buffer-size=128 foobar.wav
# arecord -v -v -t wav -c 2 -f S32_LE -r 96000 -D cards.pcm.default foobar.wav

# Con la siguiente línea se ajusta el nivel de grabación:
amixer -c 0 cset iface=MIXER,name='Analog Mix Capture Volume' 100%

Los ajustes anteriores dejan el mezclador de manera que sólo toma audio del Line-In dejando en “mute” el resto de los controles. Así, el resto de las entradas no introducen ruido.
Si no queremos oir la música que se está grabando podemos hacer:
amixer -c 0 cset iface=MIXER,name='Line Playback Switch' off

Grabando con alsa.

Para grabar usaremos herramientas de consola por ejemplo:

  • arecord: es la herramienta de grabación que incorpora ALSA. La orden para grabar en estéreo, a 16bits y 48000hz de muestreo sería:
arecord -v -t wav -c 2 -f S16_LE -r 48000 -D cards.pcm.default Musica.wav
  • ecasound: es una herramienta con unas pretensiones más elevadas. La orden para grabar sería:
ecasound -f:16,2,48000 -i:alsa,default -o Musica.wav

Durante la grabación hay dos posibles que nos pueden ocurrir: el clipping y los overrun.

Clipping.

Puede que el volumen al que grabamos sea tan alto que saturemos la grabación. Lo mejor es:

  1. Vamos a una zona en el que el volumen de la cinta sea muy elevado.
  2. Grabamos en esa zona con “arecord” o “ecasound”.
  3. Analizamos si se ha producido clipping en esa zona. Esto se puede comprobar mediante la herramienta “sox”. La orden sería:
sox musica.wav borrame.wav stat

Esta orden nos da los picos máximos y mínimos del fichero “musica.wav”. Si esos picos han alcanzado el valor “1.0”, se habrá producido clipping. También nos dice en qué cantidad podemos aumentar el volumen sin que se produzca clipping. Para que sólo nos aparezca esa cantidad, usaremos:
sox musica.wav borrame.wav stat -v

El fichero “borrame.wav” lo podemos borrar. (NOTA: probar si se puede usar /dev/null en lugar de borrame.wav)
Si se produce clipping reduciremos el volumen al que se produce la captura de sonido. Así, en lugar de usar:

amixer -c 0 cset iface=MIXER,name='Analog Mix Capture Volume' 100%

Podemos reducir el volumen por ejemplo en un 5\%:
amixer -c 0 cset iface=MIXER,name='Analog Mix Capture Volume' 95%

Overruns.

Los sistemas operativos actuales son multitarea. Eso significa que pueden ejecutarse varias aplicaciones simultáneamente; por ejemplo, el procesador de texto y la aplicación de grabación. Lo que hace el sistema operativo es asignar tiempos de procesador a cada aplicación.
La consecuencia de esto es que la aplicación de grabación no funciona continuamente. Esto se traduce en que hay momentos en los que no se graba. La solución consiste en el uso de “buffers”. Mientras la aplicación de grabación no funciona, el audio que nos llega de la pletina se va guardando en esa memoria temporal (buffer) y cuando la aplicación de grabación tiene disponible el procesador toma el audio de ese buffer.
El overrun (XRUN) ocurre cuando el tiempo en el que la aplicación no tiene en uso el procesador, supera la capacidad del buffer. Esto se traduce en que se pierde información del audio que se está grabando (la pletina “no espera”).
La solución pasa por:

  • Tener el núcleo (kernel) del sistema operativo compilado con la opción “preembtible”. Esto hace que el núcleo tenga baja latencia y este preparado para ejecutar aplicaciones en tiempo real (Real Time o RT).
  • Tener el menor número de aplicaciones que hagan uso del procesador. Yo suelo salirme de las X Windows. Para ello voy a una consola en modo superusuario y hago:
ps -A

Esto muestra todas las aplicaciones en ejecución. Yo eliminio: “gdm” y ‘`X'’. Para matar la aplicación se hace con la orden:
kill -9 <número de la aplicación>
  • Elimino la conexión a Internet. Yo uso un modem USB que hace uso del núcleo en su funcionamiento. En mi caso la orden es:
stopadsl

Bienaventurados los que disponen de un router.
  • Ejecutar la aplicación como superusuario. Las capacidades de tiempo real se tienen cuando se es superusuario.
  • Darle una gran prioridad al proceso de grabación. Eso se hace con la orden “nice -n” y asignando un número negativo. Por ejemplo:
nice -n -15  arecord -v -t wav -c 2 -f S16_LE -r 48000 -D cards.pcm.default Musica.wav

La aplicación “ecasound” tiene funciones más sofisticadas que “arecord” con el fin de que no se produzcan desbordamientos del buffer. Por ejemplo:
nice -n 15 ecasound -z:db,500000 -b:4096 -B:rt -f:16,2,48000 -i:alsa,default -o Musica.wav

En donde “-z:db,500000” genera un doblebuffer muy grande, “-b:4096” pone un tamaño de buffer grande y “-B:rt” dice que el funcionamiento va a ser Real Time. No obstante, yo tengo menos XRUN con “arecord” que con “ecasound”.
Podemos observar que la grabación la realizo a 48000hz de muestreo. Esto se debe a que la Audigy2 funciona internamente a esa freuencia de muestro. Si pedimos que muestree a otra frecuencia realiza un resample por hardware que es peor que los disponibles por software. La solución consiste en realizar la grabación a la frecuencia de muestreo nativa y posteriormente resamplear por software con una aplicación “especialista” en esa tarea. Hablaremos de esto posteriormente.
También hay que decir que actualmente los drivers ALSA no manejan bien el P16V de la Audigy2, por lo que no es posible grabara 24bits y 96khz. Si damos esos parámetros en “arecord” veremos que el fichero generado es realmente de 24bits y 96khz de muestreo, pero realmente la captura se está realizando a 16bits y 48khz. Ejecutar con “arecord -v” para ver información adicional en donde se aprecia este aspecto.
Por último, decir que yo tengo todo en un único script, de manera que cuando lo ejecuto se pone a grabar con el mezclador en las condiciones adecuadas.

Procesar el audio grabado.

En esta fase usaremos la aplicación “audacity”.

Normalizado.

Imaginemos que tenemos una cinta cuyas canciones han sido grabadas a distintos niveles. Lo que haremos será seleccionar la zona que queremos normalizar. Vamos al menú efectos y pulsamos “Amplificar”. Por defecto, amplifica una cantidad tal que no se produce clipping.

Reducción de ruido.

Abrimos el fichero de audio:

# audacity musica.wav

Vamos a una zona en la que sólo tengamos ruido de fondo. Seleccionamos sólo ruido de fondo. Vamos al menú “Efectos” y seleccionamos “Reducción de ruido…”. En la ventana que nos aparece, seleccionamos “Obtener perfil de ruido”. Finalmente seleccionamos toda la cadena de audio pulsando <Ctrl+A> y volvemos a hacer: “Reducción de ruido…”, pero ahora vamos al paso 2 y marcamos cuánto queremos reducir el ruido de fondo (cuanto más lo reducimos, más se extropea el audio paralelamente) y finalmente pulsamos el botón “Remover Ruido”.
Si la cinta tiene partes grabadas en distintas condiciones o de distintas fuentes, los ruidos de fondo pueden ser distintos. Puede ser necesario el tener que tomar distintos “perfiles de ruido” y aplicar la reducción de ruido por tramos.

Cortar las canciones.

Finalmente cortamos las canciones. La mejor forma de hacer esto es:

  1. Abrimos el “.wav” que contiene todas las canciones.
  2. Seleccionamos una canción (normalmente, tendremos que tomar un trocito de la anterior y un trocito de la siguiente).
  3. Vamos a “Archivo” y pulsamos “Exportar selección as wav…”.

Lo anterior se hace con todas las canciones.
Posteriormente, cerramos la pista que tenemos actualmente y en lugar de abrir un fichero WAV (esto nos abriría un nuevo proyecto), lo que hacemos es ir a “Proyecto” e “Importar audio…”.
Una vez que tenemos una canción aislada en el programa, cortamos lo que sobra al principio y al final. Para ello nos ayudamos de los zoom. Seleccionamos el principio y hacemos zoom en selección. Lo mismo con el final. Muchas veces el final acaba con un Fade-Out. Para no cortar partes de música que suenan a niveles muy bajos hacemos un zoom en el eje vertical. Para ello no vamos a la escala que aparece en la parte izquierda de la onda y pulsamos el botón izquierdo o el derecho (uno nos acerca y el otro nos aleja).

Una vez finalizada la limpieza del principio y final de pista, guardamos el fichero en “Archivo” y “Esportar como wav…”.

Resamplear.

Usando Sox.

Para resamplear, lo haremos por software (como se dijo en un principio). Para ello usamos el programa “sox”.

Como tenemos una frecuencia de muestreo de 48000hz (la de la Sound Blaster) y queremos una de 44100hz (la del CD), y queremos que el proceso se haga con la máxima calidad posible, usaremos la orden:

sox -r 48000 entrada.wav -r 44100 salida.wav resample -ql

Para no tener que aplicar esto a cada canción, lo mejor es hacerse un script. Yo tengo un script llamado “zzzSOX” con las siguientes líneas:
#!/bin/bash
for FICH in *.wav
    do
        sox -r 48000 "$FICH" -r 44100 "$FICH".44100.wav resample -ql
        #mv "$FICH".44100.wav "$FICH"
    done

Para hacer que ese script sea ejecutable, hacemos:
chmod +x zzzSOX

Finalmente, lo ejecutamos en el directorio en el que tenemos las canciones aisladas:
./zzzSOX

Lo último es copiarlo a CD.
Salvo que se diga otra cosa, el contenido de esta obra está bajo la licencia: Creative Commons Reconocimiento NoComercial CompartirIgual 2.5 España.