Advanced Linux Sound Architecture (ALSA)

Alsa son las siglas de Advanced Linux Sound Architecture y es una arquitectura/herramienta extremadamente potente cuando se trata de Linux y de música o audio. Encontrar información al respecto es una auténtica pesadilla, sobretodo a medida que se van complicando las cosas. Es por eso que trataré de poner por escrito lo que voy aprendiendo.

No soy ningún experto en sonido ni en ALSA, sin embargo, lo dejaré todo por escrito, no solo para ser de ayuda a quien lo pueda necesitar, si no por si algún día necesitase de nuevo esta información.

Antes de seguir, puede ser interesante consultar los siguientes recursos (ingles)

https://www.linuxjournal.com/article/6735

http://www.alsa-project.org/main/index.php/Documentation

http://www.alsa-project.org/~valentyn/Alsa-sound-mini-HOWTO.html

 

Siguiente artículo

 

-> ALSA: Advanced Linux Sound Architecture

ALSA: PCM

ALSA: xrun

ALSA: Ficheros de configuración

ALSA: /proc/asound

ALSA: asound.conf

ALSA:plugins

ALSA: programming API

ALSA: Loopback virtual card

HOWTO: añadir control de volumen a un tarjeta de sonido

ALSA: Olvidándolo todo

Alsa: PCM

Las siglas PCM vienen del inglés Pulse-code modulation que es un método de representar digitalmente un conjunto de valores analógicos. Esta es la manera estándar de representar sonidos o ficheros de audio en los ordenadores y por tanto en los sistemas linux.

Si se tiene una señal analógica, una onda sonora por ejemplo, la manera de representarla en un ordenador es mediante el muestreo de esta señal. El muestreo consiste en tomar n valores discretos de una misma señal. Cada valor digital de la onda sonora se conoce como muestra (sample).  La cantidad de muestras por segundo que se representan en una honda se conoce como frecuencia de muestreo (sampling rate).

La frecuencia habitual para una canción o para una grabación de voz es de 44,1KHz o lo que es lo mismo: 44100 muestras por segundo.

La definición de la onda viene dada ademas por el numero de canales que tiene. Este es un concepto que probablemente nos suene. Todos hemos oído hablar de sistemas mono o estero, aunque el numero de opciones es bastante mas amplios, considerar estos dos nos vale. Si tenemos un archivo de sonido en mono tendremos un solo canal, mientras que si tenemos un sonido en stereo tendremos, dos canal es. Un frame se corresponde con una muestra (sample) en cada uno de los canales disponibles.

El tamaño de frame (frame_size) sera entonces el numero de bytes que ocupa cada Frame. Dependiendo de la calidad del sonido este puede variar. Si tenemos un audio mono con 8 bits por sample, el tamaño de frame será de 1byte, mientras que si tenemos un sonido stereo (2 canales) con 8 bits por sample, el tamaño de frame sera de 2 bytes.

El ratio (Rate) de una PCM define cuantas veces el frame actual es remplazado, o dicho de otra manera, define cuantos frames deben sonar en un segundo. Al igual que la frecuencia de muestro se define en Hz o KHz. A partir de este parámetro sabremos cual es el numero de bytes que deben ser grabados o escritos en una tarjeta de sonido. Por ejemplo, en un audio mono con un ratio de 44KHz y 8 bits por muestra tendremos 44000(samples)*1(canal)*1(byte) = 44Kb/s. Así pues, nuestro radio de datos o data rate sera de 44Kb/s o bien 352Kbits/s.

todavía nos faltan un par de parámetros importantes antes de poder jugar con ALSA y las PCM, el periodo y el tamaño del periodo. (period y period size). El primero define cuanto tiempo pasa entre que cada grupo de frames es procesado y enviado a la tarjeta de sonido. El period size, en contra de lo que pueda parecer, se expresa en Hz y define cuantos Frames debe contener cada lectura o escritura. Esto significa que si especificamos un valor de 1Hz cada escritura o lectura a la tarjeta gráfica esperara tener exactamente un frame.

 

Anterior artículo      Siguiente artículo

 

ALSA: Advanced Linux Sound Architecture

-> ALSA: PCM

ALSA: xrun

ALSA: Ficheros de configuración

ALSA: /proc/asound

ALSA: asound.conf

ALSA:plugins

ALSA: programming API

ALSA: Loopback virtual card

HOWTO: añadir control de volumen a un tarjeta de sonido

ALSA: Olvidándolo todo

Alsa: xrun

Estrechamente relacionado con el periodo y el tamaño del periodo (period & period size) aparece el concepto de xrun. La x viene a substituir una de las dos situaciones a las que hace referencia este concepto.

Si la aplicación que reproduce o captura el audio no es capaz de ofrecer o leer de la tarjeta de sonido suficientes datos cuando es requerido. Si la aplicación no es capaz de procesar todos los datos que la tarjeta provee se produce una situación de overrun. Mientras que si la tarjeta espera mas datos de los que la aplicación es capaz de aportar se produce una situación de underrun.

Ambas situaciones se traducen en ruido similar a nieve o a cortes y crepitar. Para no caer en estos problemas es importante ajustar correctamente los valores que hacen referencia a las medidas de los buffers y los parámetros period y period size.
 

Anterior artículo      Siguiente artículo

 

ALSA: Advanced Linux Sound Architecture

ALSA: PCM

-> ALSA: xrun

ALSA: Ficheros de configuración

ALSA: /proc/asound

ALSA: asound.conf

ALSA:plugins

ALSA: programming API

ALSA: Loopback virtual card

HOWTO: añadir control de volumen a un tarjeta de sonido

ALSA: Olvidándolo todo