Formatos de audio

Vicente González Ruiz

October 13, 2014

Contents

1 Algoritmos de codificación
 1.1 PCM (Pulse Code Modulation)
 1.2 DPCM (Differential Pulse Code Modulation)
 1.3 ADPCM (Adaptive Differential Pulse Code Modulation)
 1.4 LPC (Linear Predictive Coder)
 1.5 1.5 CELP (Code Excited Linear Prediction)
 1.6 PAC (Perceptual Audio Coding)
2 Audio codecs
 2.1 G.7xx
 2.2 Speex
 2.3 ATRAC (Adaptive TRansform Acoustic Coding)
 2.4 MPEG (Motion Pictures Experts Group) Audio
  2.4.1 MP1: MPEG Audio Layer I
  2.4.2 MP2: MPEG Audio Layer II
  2.4.3 MP3: MPEG Audio Layer III
  2.4.4 ACC: Advanced Audio Coding
 2.5 Dolby Digital (AC-3)
 2.6 DTS (Digital Theatre System) Coherent Acoustics
 2.7 WMA (Windows Media Audio)
 2.8 Vorbis
 2.9 FLAC (Free Lossless Audio Codec)
3 Streaming de audio
 3.1 ASF (Active Straming Format)
 3.2 QuickTime
 3.3 RealAudio
 3.4 SHOUTcast
 3.5 Icecast
4 Formatos de audio
 4.1 RAW (”.raw”)
 4.2 Sun AU (”.au”)
 4.3 Creative VOC (”.voc”)
 4.4 Amiga IFF (”.iff”)
 4.5 Macintosh AIFF (”.aif” — ”.aiff”)
 4.6 Microsoft WAVE (”.wav”)
 4.7 MPEG MP3 (”.mp3”)
 4.8 Windows WMA (”.wma”)
 4.9 OGG (”.ogg”)
5 Y ahora qu’e, ... despu’es de tanto rollo

En general, un fichero de audio es una colección de una o m’as cabeceras que se multiplexan en el tiempo con los datos de audio puros. Las cabeceras se utilizan para aportar al reproductor toda la información necesaria para la reproducción del audio.

Dependiendo del formato seleccionado, dispondremos de un conjunto determinado de posibilidades que dependen fundamentalmente de los siguientes factores: (1) el algoritmo de codificación, (2) la implementación del codec (coder/decoder = codificador/descodificador) y (3) del formato de encapsulamiento de los datos con el audio.

Comenzaremos describiendo los algoritmos de codificación (que buscan sobre todo una compresión) m’as usados.

1 Algoritmos de codificación

Actualmente existen muchos algoritmos específicamente diseñados para codificar audio digital. Algunos permiten comprimir cualquier fuente de sonido PCM, mientras que otros son específicos (sobre todo para el habla humana).

1.1 PCM (Pulse Code Modulation)

Es el modelo de codificación b’asico en el que no existe compresión. Codifica cada muestra usando un número constante de bits (un código de longitud fija).

1.2 DPCM (Differential Pulse Code Modulation)

Es una mejora de la codificación PCM donde la siguiente muestra se codifica como una diferencia con la anterior (que es en realidad una predicción), usando un código de longitud fija. La ventaja radica en que como las muestras vecinas tienden a tener valores parecidos, sus diferencias (errores de predicción) suelen ser valores pequeños y por tanto se puede reducir el número de bits para representarlos.

1.3 ADPCM (Adaptive Differential Pulse Code Modulation)

Es una variación de DPCM donde el predictor y/o el cuantificador son adaptativos. El predictor se adapta a las características de la señal de audio tratando de minimizar las diferencias entre las muestras y las predicciones. En el caso de usar un cuantificador adaptativo, lo que varía es el número de bits por muestra (en realidad, el número de bits por error de predicción).

1.4 LPC (Linear Predictive Coder)

LPC es una t’ecnica de codificación diferencial (como ADPCM) en la que el predictor es muy sofisticado y especializado (al menos en sus versiones m’as iniciales) en la síntesis de la voz humana.

1.5 1.5 CELP (Code Excited Linear Prediction)

Es una mejora de LPC en la que se utiliza un cuantificador vectorial para codificar los residuos (errores de predicción).

1.6 PAC (Perceptual Audio Coding)

Los seres humanos no captamos toda la información que transporta una señal de audio de la misma forma. Una parte de ella es muy importante mientras que otra es m’as irrevelante (y en ocasiones, imperceptible). Los codificadores perceptuales dedican m’as bits de datos a representar aquella información perceptualmente m’as significativa. Este algoritmo es siempre irreversible (lossy), es decir, nunca se recupera la representación PCM original de la señal.

El formato MP3 de audio implementa un algoritmo PAC.

2 Audio codecs

Un codec de audio es generalmente un programa de computadora (o un sistema digital) que implementa alguno de los algoritmos de codificación anteriormente presentados. Ve’amos los m’as usados:

2.1 G.7xx

Son codecs especializados en la codificación de la voz humana y se basan en t’ecnicas de codificación diferencial (DPCM, ADPCM, LPC, etc.). Se usan sobre todo en telefonía. Las tasas de bits usadas son muy variables, aunque generalmente bajas.

2.2 Speex

Es un codec desarrollado por fundación Xiph.Org para codificar voz humana. Se basa en CELP y trabaja a una tasa de bits típica entre 2k y 44k bps.

2.3 ATRAC (Adaptive TRansform Acoustic Coding)

Es un codec creado por Sony para el MiniDisc. Se basa en un algoritmo PAC y la tasa de compresión típica es de 32k a 256k bps.

2.4 MPEG (Motion Pictures Experts Group) Audio

El MPEG ha diseñado un montón de codecs est’andares basados en t’ecnicas PAC. Estos codecs no son propietarios, aunque muchos est’an patentados y la mayoría de ellos por el Instituto Fraunhofer (por lo que habría que pagar si te dedicas a ganar dinero con ellos). Se usan para codificar el audio en las películas MPEG-1 (Video CD), MPEG-2 (DVD) y MPEG-4 (DivX). Las tasas de bits típicas van desde 32k bps hasta 320k bps.

2.4.1 MP1: MPEG Audio Layer I

Es la versión m’as simple del codec de audio usado en las secuencias MPEG. Requiere una cantidad de recursos mínima aunque la calidad es baja.

2.4.2 MP2: MPEG Audio Layer II

Versión intermedia del codec, tanto en calidad como en complejidad.

2.4.3 MP3: MPEG Audio Layer III

Este es el codec m’as usado hasta la fecha (se utiliza por ejemplo en los DivX’s). Permite representar las señales de audio est’ereo con una alta calidad a una tasa de bits de 128k bps.

2.4.4 ACC: Advanced Audio Coding

Se utiliza principalmente en los DVD’s y en los DivX’s. Se utiliza a tasas de 320 kbps para ofrecer una alta calidad en audio multicanal.

2.5 Dolby Digital (AC-3)

Este es uno de los codecs de la clase PAC m’as usados en los DVD’s, donde se utiliza a una tasa de bits típica de 448k bps. Es propietario de Dolby Laboratories.

2.6 DTS (Digital Theatre System) Coherent Acoustics

Fue creado por DTS Incorporated para usarlo en los DVD’s. La tasa de bits típica es de 768k bps. Es un codec basado en PAC.

2.7 WMA (Windows Media Audio)

Microsoft desarrolló este codec propietario como un competidor del MP3, fundamentalmente para no tener que pagar a los que poseen las correspondientes patentes. Se trata de un codec del tipo PAC que es ligeramente superior en relación calidad/bit-rate al MP3.

2.8 Vorbis

Es un codec basado en PAC desarrollado por la fundación Xiph.Org. Se utiliza para codificar audio a una alta calidad utilizando una tasa de bits típica que va entre 32k y 500k bps. Vorbis tiene una calidad comparable a WMA pero con la ventaja de ser totalmente libre.

2.9 FLAC (Free Lossless Audio Codec)

Finalmente, la fundación Xiph.Org ha creado un codec totalmente reversible para codificar audio. Su principal desventaja es que genera una tasa de bits bastante alta (aproximadamente la mitad de la tasa generada con PCM) y variable (dependiendo de la complejidad del sonido). Se basa en LPC.

3 Streaming de audio

Todos los formatos de audio que existen pueden utilizarse, a priori, para hacer streaming de audio, es decir, reproducir a la vez que descargamos el fichero desde una fuente que no puede garantizar la tasa de descarga (transmisión), como ocurre casi siempre en Internet. Los sistemas de streaming deben soportar las siguientes posibilidades:

Reproducción a partir desde cualquier punto del stream:

Cuando se hace streaming de un evento en directo, por ejemplo, los oyentes (clientes) se conectan al servidor de audio en cualquier instante y a partir de dicho momento es cuando comienzan a recibir el audio, no desde el comienzo.

Acomodación del jitter:

Cuando se hace streaming en redes de comuntación de paquetes (como Internet), la variación de la latencia (jitter) no es cero. Esto significa que el tiempo que necesitan los paquetes para llegar desde el servidor hasta los clientes (latencia de la red) no es constante a lo largo del tiempo.

Recuperación de los errores:

Cuando Internet se congestiona se retrasan demasiado y a veces se pierden los paquetes de datos. Los algoritmos de codificación de audio deben recuperarse de la p’erdida de un número definido de paquetes.

El acceso aleatorio al stream se consigue haciendo que al menos por zonas, el stream de audio sea descodificable de forma independiente. Esto tambi’en ayuda a ”solucionar” los errores. Para acomodar el jitter se utiliza la t’ecnica del buffering, es decir, almacenar unos cuantos segundos antes de comenzar la reproducción. Si adem’as la latencia de la red es suficientemente baja, el buffering puede ayudar a solucionar los errores mediante retransmisiones.

Para conseguir hacer streaming, en la pr’actica cada formato de audio puede llegar a soportar un nivel m’as de encapsulamiento (wrapping), es decir, se le añanden m’as cabeceras. Los diferentes “fabricantes” han construído distintos formatos de encapsulamiento para hacer streaming. Entre los m’as usados destacamos:

3.1 ASF (Active Straming Format)

Propietario de Microsoft Corporation. Cambia la extensión al fichero encapsulado a ”.asf”.

3.2 QuickTime

Propietario de Apple Computer. La extensión típica del fichero ”encapsulante” es ”.mov”.

3.3 RealAudio

Propietario de RealNetworks Incorporated. Las extensiones típicas de los ficheros son ”.ra” y ”.ram”.

3.4 SHOUTcast

Propietario de Nullsoft. Se utiliza para transmitir ficheros MP3. Se utiliza el HTTP (HyperText Transfer Protocol) como protocolo de transporte.

3.5 Icecast

Creado por Xiph.Org (y por tanto, es libre). Transmite ficheros MP3 y OGG. Utiliza el HTTP (HyperText Transfer Protocol) como protocolo de transporte.

4 Formatos de audio

Bien. Despu’es de esta larga introducción vamos a ver qu’e formatos de audio son los m’as corrientes.

4.1 RAW (”.raw”)

RAW = Read And Write. Cuando seleccionamos esta forma de representación lo único que podemos asegurar es que no existen cabeceras. Todos los datos del fichero son muestras o datos que sirven para extraer las muestras. El codec m’as usado es PCM, aunque no es infrecuente usar DPCM y ADPCM (est’andares ITU G.72x). El formato RAW es tambi’en el formato elegido para los CD’s de audio.

4.2 Sun AU (”.au”)

AU = Audio for Unix. Es el formato original de las estaciones de trabajo Sun y Next. Generalmente utiliza PCM.

4.3 Creative VOC (”.voc”)

Es el formato de audio creado por Creative para las tarjetas de sonido Sound Blaster. Se usa PCM.

4.4 Amiga IFF (”.iff”)

IFF = Interchange File Format. Creado por Electronic Arts y utilizado en los maravillosos ordenadores Commodore Amiga. Generalmente usa PCM aunque tambi’en puede trabajar con otros codificadores. Finalmente, podía almacenar secuencias MIDI (Musical Instrument Digital Interface) y MOD (MODule files).

4.5 Macintosh AIFF (”.aif” — ”.aiff”)

AIFF = Audio Interchange File Format. Es el formato est’andar en las m’aquinas Applet Macintosh, aunque tambi’en es común entre las Silicon Graphics. AIFF es una mejora del IFF.

4.6 Microsoft WAVE (”.wav”)

El formato WAVE es un caso particular del formato RIFF (Rich Interchange File Format). WAVE es el formato de los ficheros de audio en las m’aquinas con Windows. Generamente transporta muestras en formato PCM aunque puede contener otros tipos de codificaciones.

4.7 MPEG MP3 (”.mp3”)

Almacena secuencias MP3.

4.8 Windows WMA (”.wma”)

Almacena secuencias WMA.

4.9 OGG (”.ogg”)

Almacena secuencias Speex, FLAC o Vorbis.

5 Y ahora qu’e, ... despu’es de tanto rollo

Vamos a comprobar cómo afecta el bit-rate a la calidad del audio usando Vorbis (instalar el paquete ”vorbis-tools”) y MP3 (instalar el paquete ”lame”). Tambi’en tendremos que instalar el programa mplayer. Este último programa puede ser instalado como un paquete o compilado directamente desde el repositorio, dependiendo de la distribución de Linux. Excepto en la Gentoo (que ya lo hace por defecto), se recomienda compilar los fuentes.

arecord -f cd > f.wav              # Capturamos unos segundos de audio  
aplay < f.wav                      # Reproducimos a la m’axima calidad  
 
oggenc -b 128 - -o - < f.wav | mplayer -   # Reproducimos Vorbis a 128 Kbps  
 
oggenc -b  64 - -o - < f.wav | mplayer -   # Reproducimos Vorbis a 64 Kbps  
 
oggenc -b  32 - -o - < f.wav | mplayer -   # Reproducimos Vorbis a 32 Kbps  
 
lame -b 128 - - < f.wav | mpg123 - # Reproducimos MP3 a 128 Kbps  
 
lame -b  64 - - < f.wav | mpg123 - # Reproducimos MP3 a 64 Kbps  
 
lame -b  32 - - < f.wav | mpg123 - # Reproducimos MP3 a 32 Kbps