Grabación y reproducción de audio

Vicente González Ruiz

October 25, 2014

Contents

1 El Teorema del Muestreo
2 La frecuencia de muestreo
3 El modelo de cuantificación
4 La precisión de las muestras
5 El número de canales
6 La aplicación ¨arecord¨
7 La aplicación ¨aplay¨
8 Cómo infuye la frecuencia de muestreo en la calidad del audio?
9 Cómo influye el modelo de cuantificación en la calidad del audio?
10 Cómo influye la precisión de las muestras en la calidad del audio?
11 La aplicación ¨alsamixer¨

Una señal de audio, o sonido, es una señal física de carácter unidimensional. Esto significa que puede ser descrita a lo largo del tiempo utilizando una variable contínua (una función matemática) con una única dimensión.

En esta clase práctica aprenderemos a digitalizar sonido utilizando las aplicaciones ”arecord” y ”aplay” que pertenecen al paquete ”alsa-utils” de Linux. Recuerdese que este paquete se ha debido cargar ya si se ha realizado la práctica anterior.

1 El Teorema del Muestreo

En una computadora digital no hay posibilidad de representar una función contínua, ni tan siquiera a lo largo de un intervalo de tiempo finito si ésta no está limitada en banda, ya que sería necesario un número infinito de muestras. Esto es lo que nos dice el Teorema del Muestreo.

2 La frecuencia de muestreo

La frecuencia de muestreo (o el número de muestras por segundo) determina la máxima componente de frecuencia que estamos registrando en el proceso de digitalización. Por supuesto, también condiciona la cantidad de muestras recogidas por unidad de tiempo.

Siguiendo con el Teorema del Muestreo, si queremos registrar una señal de audio que tiene una componente de frecuencia máxima de W Hz, entonces deberemos usar una frecuencia de muestreo mínima de 2W muestras por segundo. Sea f = 2W la frecuencia de muestreo seleccionada para el resto de esta discusión.

Qué ocurre si no se cumple esto, es decir, qué pasaría si f < 2W? Tal y como se explica en la teoría de la asignatura, se produce el efecto del aliasing o solapamiento espectral. En el dominio del tiempo, las frecuencias superiores a f2 provocarían que las muestras no fueran las correctas para reconstuir la señal sonora ni tan siquiera hasta f2 Hz de ancho de banda. El resultado sería una señal sonora que no suena igual que la señal original limitada a f2 Hz.

Los diseñadores de las tarjetas de sonido conocen este problema y para evitarlo colocan un filtro paso-bajo a la entrada del módulo de muestreo (el que registra el valor analógico de la señal de audio cada cierto intervalo de tiempo). La frecuencia de corte de dicho filtro se situa a f2 Hz.

3 El modelo de cuantificación

El otro aspecto clave del sistema de digitalización es el tipo de cuantificador utilizado para cuantificar las muestras analógicas generadas por el módulo de muestreo (llamado también sampler). En audio se utilizan dos modelos diferentes: (1) el lineal y (2) el logarítmico.

En el modelo lineal, el número de niveles de representación es constante a lo largo del rango dinámico de la señal de audio. Esto significa que se comete el mismo error de cuantificación independientemente de la amplitud de las muestras.

En el modelo logarítmico, existen una mayor concentración de niveles en la zona del rango dinámico donde la señal es más débil. El sentido físico de este modelo responde a que el sistema auditivo humano es más sensible a los sonidos de baja amplitud que a los estridentes.

4 La precisión de las muestras

Independientemente de la frecuencia de muestreo y del modelo de cuantificación usado, en la práctica el sistema de digitalización asigna un número de bits por muestra que suele ser constante durante el proceso de muestreo.

Las inmensa mayoría tarjetas de audio actuales permiten utilizar 8 y 16, y las profesionales hasta 24 bits/muestra. Evidéntemente, cuanto mayor es el número de bits, más niveles de representación existen y por tanto, el error de cuantficación es menor. Lo ideal sería usar siempre el máximo, pero ésto aumenta los requerimientos de memoria de la señal digitalizada en formato PCM (Pulse Code Modulation). Este formato es el que devuelven la inmensa mayoría de las tarjetas de sonido.

Además, dependiendo del tipo de cuantificador usado, el número de bits/muestra puede estar limitado. La mayoría de los sistemas sólo permiten 8 bps (bits per sample) cuando el cuantificador es logarítmico. Debe saberse también que el error de cuantificación percibido por un humano es significativamente menor si se utiliza un cuantficador logarítmico. Esto provoca que usar una cuantificación lineal a 16 bps puede ”sonar” lo mismo que usar una cuantificación logarítmica a 8 bps.

5 El número de canales

Por último, a la hora de digitalizar una señal de audio tendremos que decidir el número de canales utilizados. Generalmente existen 1 (audio ”mono”) o 2 canales (audio ”estéreo”). La decisión correcta va a depender de la entrada de audio usada de la tarjeta de sonido. Generalemente existen dos: (1) la de micrófono y (2) la de ”entrada”. Bien. La de micro suele ser mono (aunque esto deberíamos consultarlo en el manual de especificaciones de la tarjeta de sonido). La ”línea de entrada” casi siempre es estéreo.

6 La aplicación ¨arecord¨

arecord” es la aplicación que permite digitalizar una señal sonora cuando hemos instalado ALSA. Vamos a a ver cómo se utiliza.

arecord” es una utilidad del tipo command-line. Esto significa que necesitamos un shell para ejecutarla.

arecord” captura una secuencia de audio digital de la tarjeta de sonido y escribe la secuencia de muestras en la salida estándard (stdout). Por tanto, si escribimos:

arecord

llenaremos el terminal de caracteres extraños que no otra cosa que la reprentación ASCII de cada una de las muestras. Cuando no se establece ningún parámetro extra se utiliza una frecuencia de muestreo de 8K Hz (K=1000).

Para enviar la salida estándar a un fichero escribiremos:

arecord > fichero.wav

Como puede observarse se ha seleccionado la extensión ”wav” para el fichero de salida. Este es el formato por defecto usado por ”arecord”. Si queremos alterar este comportamiento:

arecord -t raw > fichero.raw # Formato "Read And Write"  
arecord -t voc > fichero.voc # Formato "SoundBlaster"  
arecord -t au > fichero.au   # Formato "Sun"  
arecord -t wav > fichero.wav # Formato "Windows" (el usado por defecto)

Bueno. Todos estos formatos son de tipo PCM, donde cada muestra se representa con un número de bits constante a lo largo del fichero de audio (en todos estos ejemplos estamos utilizando 8 bps). El formato RAW no tiene cabecera alguna: el primer bit del fichero pertenece a la primera muestra. En el resto de formatos existe una cabecera con una determinada longitud. El formato VOC es el diseñado para el software de audio que viene con las tarjetas de sonido SoundBlaster. El formato AU es el usado por las estaciones de trabajo Sun y Next. Finalmente, el formato WAVE es el diseñado por Microsoft para su sistema Windows.

Bien. Veamos ahora cómo seleccionar la frecuencia de muestreo, el tipo de cuantificador, el número de bits por muestra y el número de canales. En el resto de ejemplos usaremos el formato WAVE (el que se selecciona por defecto).

Determinando el número de canales:
arecord > f.wav        # 1 canal (mono)  
arecord -c 1 > f.wav   # 1 canal  
arecord -c 2 > f.wav   # 2 canales (est\’ereo)  
arecord -c 4 > f.wav   # 4 canales (cuadraf\’onico), I.A. (if available)

Determinado la frecuencia de muestreo:
(Aquí sólo se presentan los casos más frecuentes.)
arecord > f.wav              # 8K muestras/segundo  
arecord -r 8000 > f.wav      # 8K muestras/segundo  
arecord -r 22050 > f.wav     # 22.05K muestras/segundo  
arecord -r 44100 > f.wav     # Calidad CD  
arecord -r 48000 > f.wav     # Calidad DAT (Digital Audio Tape)

Determinando el cuantificador:
arecord -t raw > f.raw            # Lineal (por defecto), 8 bps.  
arecord -t raw -f MU_LAW > f.raw  # Logar\’{\i}tmico telefon\’{\i}a americana, 8 bps  
arecord -t raw -f A_LAW > f.raw   # Logar\’{\i}tmico telefon\’{\i}a europea, 8 bps

Determinando el número de bits por muestra:
arecord -t raw > f.raw           # Lineal, 8 bps, enteros con signo  
arecord -t raw -f S8 > f.raw     # Lineal, 8 bps, enteros con signo  
arecord -t raw -f U8 > f.raw     # Lineal, 8 bps, enteros sin signo  
arecord -t raw -f S16_LE > f.raw # Lineal, 16 bps, con signo, little endian  
arecord -t raw -f U16_LE > f.raw # Lineal, 16 bps, sin signo, LE  
arecord -t raw -f S16_BE > f.raw # Lineal, 16 bps, signed, big endian  
arecord -t raw -f U16_BE > f.raw # Lineal, 16 bps, unsigned, BE, I.A.  
arecord -t raw -f S24_LE > f.raw # Lineal, 24 bps, con signo, LE, I.A.  
arecord -t raw -f U24_LE > f.raw # Lineal, 24 bps, sin signo, LE, I.A.  
arecord -t raw -f S24_BE > f.raw # Lineal, 24 bps, signed, BE, I.A.  
arecord -t raw -f U24_BE > f.raw # Lineal, 24 bps, unsigned, BE, I.A.  
arecord -t raw -f S32_LE > f.raw # Lineal, 32 bps, con signo, LE, I.A.  
arecord -t raw -f U32_LE > f.raw # Lineal, 32 bps, sin signo, LE, I.A.  
arecord -t raw -f S32_BE > f.raw # Lineal, 32 bps, signed, BE, I.A.  
arecord -t raw -f U32_BE > f.raw # Lineal, 32 bps, unsigned, BE, I.A.

Muestreo calidad CD (Compact Disc):]
arecord -f cd > f.wav        # Equivalente a "-f S16_LE -c 2 -r 44100"

Muestreo calidad DAT (Digital Audio Tape):
arecord -f dat > f.wav       # Equivalente a "-f S16_LE -c 2 -r 48000"

Por supuesto, usando el manual on-line, podemos acceder al resto de información sobre ”arecord”.

man arecord

7 La aplicación ¨aplay¨

aplay” permite reproducir una señal de audio capturada por ”arecord” o por cualquier otra aplicación de digitalización de audio. ”aplay” contempla exáctamente las mismas opciones que ”arecord”, aunque su uso dependerá de si el fichero reproducido posee cabecera o no. Si la posee, toda la información necesaria para su reproducción figura en ella y por tanto, no hay que especificársela a ”aplay”. Así, si el fichero de audio es de tipo WAVE, reproducir consiste en:

aplay f.wav                  # Reproduce f.wav

aplay” acepta cualquier número de ficheros de entrada. Si no se especifica ninguno, se reproduce la entrada estándar (stdin). Si se especifican más de uno, se reproducen uno detrás de otro.

Puesto que ”arecord” envía por defecto el audio capturado a la salida estándar y ”aplay” reproduce por defecto la entrada estándar, podemos construir un pipe de Unix con ambas aplicaciones con el objetivo de escuchar lo que estamos digitalizando en ese momento, sin necesidad de crear ningún fichero:

arecord -f cd | aplay         # Captura y reproducci\’on con calidad CD

8 Cómo infuye la frecuencia de muestreo en la calidad del audio?

La mayoría de las tarjetas de sonido actuales permiten utilizar una frecuencia de muestreo comprendida entre 8K sps (samples per second) y 48K sps. Utilizando estos extremos podemos cuantificar fácilmente desde un punto de vista estríctamente perceptivo la calidad de la digitalización:

# 4K Hz de ancho de banda  
arecord -f S16_LE -c 2 -r 8000 -D hw:0,0 | aplay -D hw:0,0  
 
# 24K Hz de andho de banda  
arecord -f S16_LE -c 2 -r 48000 -D hw:0,0 | aplay -D hw:0,0

Estos ejemplos contienen un parámetro nuevo que es importante explicar: el parámetro que indica el dispositivo de sonido utilizado. ALSA puede usar el hardware de sonido de muchas formas. Cuando indicamos ”hw” estamos espeficicando a ALSA que use el hardware directamente, sin capas de software intermedias. Esto se ha hecho así porque es importante saber si los formatos seleccionados se están usando realmente.

Bueno, y qué significa esto? Cuando no espeficicamos el dispositivo ”hw”, ALSA usa (por defecto) un dispositivo virtual llamado ”plughw” que acepta cualquier formato. Usando el dispositivo virtual (como ha ocurrido en todos los ejemplos anteriores excepto en los dos últimos), no tenemos que preocuparnos de si nuestro hardware lo soporta realmente.

Finalmente, los dos números enteros que figuran después de los dos puntos indican la tarjeta de sonido y el puerto de entrada o salida. Para saber cuántas tarjetas de sonido tenemos instaladas y cuántos puertos poseen cada una de ellas, podemos ejecutar:

arecord -l

9 Cómo influye el modelo de cuantificación en la calidad del audio?

# Usando el cuantificador A_LAW, I.A.  
arecord -t raw -f A_LAW -c 2 -r 8000 -D hw:0,0 | aplay -t raw -D hw:0,0

En este caso se ha seleccionado el formato de salida RAW porque el formato WAVE no soporta cuantificación logarítmica. Además, es bastante probable que tu hardware de sonido tampoco soporte dicha cuantificación. En este caso podemos usar el dispositivo virtual ”plughw”.

Pruebe con otros modelos de cuantificación para apreciar su influencia.

10 Cómo influye la precisión de las muestras en la calidad del audio?

# Usando el cuantificador de 8 bits, I.A.  
arecord -t raw -f S8 -c 2 -r 48000 -D hw:0,0 | \  
  aplay -t raw -f S8 -c 2 -r 48000 -D hw:0,0

Igual que antes, si el hardware no permite esta configuración, úsese el hardware virtual.

Pruebe con otras precisiones para apreciar la influencia de este parámetro.

11 La aplicación ¨alsamixer¨

Cuando registramos sonido desde nuestra tarjeta hay que tener en cuenta que ésta tiene varias entradas y que la tarjeta posee un mezclador. Si queremos sólo capturar el sonido que entra por la entrada del micrófono, dicha entrada debe estár activada y el resto desactivadas. Para controlar todo esto podemos usar el programa ”alsamixer”.