Modelo arquitectónico de ALSA
(Advanced Linux Sound Architecture)
Subsistema pcm

por David García Garzón (Vokimon), david punto garcia en upf punto edu

Nota: Este manual está en construcción y es muy posible que haya erratas y secciones incompletas. Si quieres ayudar, puedes ver algunos temas a resolver activando la hoja de estilo Default with TODO's. Normalmente en el menu Ver o Visualizar de tu navegador.

Subsistema pcm

Características

Los datos que circulan por un flujo pcm representan audio digital muestra a muestra (Pulse Code Modulation) aunque también se soportan otros formatos basados en representación espectral como mp3. Aún con esta limitación, hay muchas formas de representar el audio digital, por lo que la representación que se use es una característica de cada flujo. Ello incluye:

Dispositivos predefinidos

ALSA establece algunos nombres de conveniencia para dispositivos pcm. De esta manera nos evitamos montarlos a mano a base de plugins.

Cuando especificamos un dispositivo fuente o sumidero de audio, ALSA permite especificar dispositivos alternativos, no solo las tarjetas de áudio. La lista de dispositivos que podemos hacer servir es:

Plugins pcm

Conocer los plugins te permitirá crear tus propios dispositivos, explotar a fondo las posibilidades de ALSA o simplemente, entender como funciona ALSA por dentro. Si quieres puedes obviar esta sección y usar directamente los dispositivos predefinidos que se explican en la siguiente sección.

Plugins finales

Plugins lineales

Estos plugins modifican el flujo de un dispositivo slave, normalmente para adaptar el formato.

Notas:

Otros plugins

Definición Slave

TODO: Definición slave

Monitorización

El plugin pcm meter de ALSA permite crear dispositivos que monitorizan el flujo de audio sin modificarlo. Normalmente, se usan para implementar osciloscopios o otros elementos de visualización. Para ello, hay que declarar en la configuración un pcm_scope_type.

Por ejemplo, para definir el tipo de scope spectrogram como el que implementa la hipotética librería /usr/local/lib/libspectrogram.so deberíamos añadir a la configuración la linea:

pcm_scope_type.spectrogram.lib = "/usr/local/lib/libspectrogram.so";

Para crear un dispositivo que añada esa monitorización al dispositivo midispositivo, simplemente tenemos que hacer servir el plugin meter.

pcm.monitorizado {
	type = meter;
	slave.pcm = midispositivo;
	frequency = 50; # actualizaciones por segundo
	scopes.0.type = spectrogram;
}
scopes es un atributo de tipo array, por lo que podriamos especificar varios elementos de monitorización.

Integración con LADSPA

Aviso: La palabra plugin se usa tanto en ALSA como en LADSPA. Solo dentro de esta sección, especificaré, para reducir confusiones, plugin ALSA o plugin LADSPA según sea el caso.

LADSPA es una arquitectura de plugins que permite a diferentes aplicaciones compartir un conjunto de algoritmos de procesado de audio (efectos de sonido, para entendernos) instalados en el sistema.

Principios de funcionamiento:

Propiedades de los plugins LADSPA:

Como usar LADSPA dentro de ALSA?

Para hacer compresion en la grabación podemos usar el siguiente dispositivo.

pcm.compressor
{
	@arg
	type ladspa;
	slave.pcm hw;
	# La politica duplicar indica que hay que aplicar el mismo plugin
	# que se aplica en el canal 0, a todos los canales.
	policy duplicate;
	plugins.0
	{
		# Podemos usar 'id' o 'file' como alternativas
		# a 'label'
		label compress_rms
		bindings
		{
		}
		TODO: Complete this
	{
}
TODO: Utilidades que vienen con el SDK
TODO: Otras utilidades genericas como el dummy tester

Integración con JACK

TODO: Explicación de la arquitectura JACK
TODO: Como hacer que las aplicaciones JACK se puedan conectar a un dispositivo ALSA?
TODO: Como hacer que las aplicaciones ALSA se puedan conectar a un puerto JACK?
pcm.jackplug {
	type plug
	slave { pcm "jack" }
}

pcm.jack {
	type jack
	playback_ports {
		0 alsa_pcm:playback_1
		1 alsa_pcm:playback_2
	}
	capture_ports {
		0 alsa_pcm:capture_1
		1 alsa_pcm:capture_2
	}
}
TODO: Dispositivos y plugins en otros subsistemas