Modelo arquitectónico de ALSA
(Advanced Linux Sound Architecture)
Miscelánea

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.

Incorporando nuevos tipos de plugins

Se pueden incorporar nuevos tipos de plugins a ALSA dentro de un subsistema. Para ello hay que declarar el tipo en el fichero de configuración. Por ejemplo, para incorporar un nuevo tipo de plugin pcm definido por la librería /usr/local/lib/libmitipopcm.so:

pcm_type.mitipopcm
{
	# la libreria dinamica que implementa el plugin
	lib "/usr/local/lib/libmitipopcm.so"
	# la funcion que hay que usar para incorporar el tipo
	open "_snd_pcm_mitipopcm_open
}

De forma equivalente podemos incorporar nuevos plugins para otros subsistemas:

Contactando con hosts remotos

Todos los subsistemas tienen un tipo de plugin shm (shared memory). Este plugin es muy útil para establecer conexiones con dispositivos remotos dentro de una red o con dispositivos que estan en un nodo diferente dentro una arquitectura multicomputador. TODO: Enlace a pagina sobre clustering.

Para poder hacer este tipo de conexion, hay que seguir los siguientes pasos.

  1. Definir en el host remoto (otramaquina.upf.es) que tiene que escuchar como servidor en cierto puerto:
    server.localserver
    {
    	host = "localhost";
    	port = 32423; # TODO: Hay algun puerto estandard?
    }
    
    ALSA verá que la dirección es local, así que arrancara un deamon escuchando en ese puerto.
    TODO: No me lo creo, hay que probarlo.
  2. Definir en el host local (mimaquina.upf.es) la existencia del servidor remoto:
    server.otramaquina
    {
    	# al ser remoto estoy definiendo un servidor
    	host = "otramaquina.upf.es";
    	port = 32423; # TODO: Hay algun puerto estandard?
    }
    
    A pesar de ser igual la declaración, al ser una dirección remota se está definiendo un servidor al que conectarse.
  3. Definir en el host local un dispositivo de tipo shm que se relacione con un dispositivo en el host remoto:
    pcm.dispositivoremoto
    {
    	type shm
    	server otramaquina
    	pcm hw:1,1          # el nombre del dispositivo en la maquina remota
    }
    
    Lo podríamos hacer también con dispositivos de cualquier otro subsistema, por ejemplo:
    ctl.dispositivoremoto
    {
    	type shm
    	server otramaquina
    	ctl hw:1,1
    }
    

Modos de transferencia

Una operación de lectura o escritura a un dispositivo ALSA puede no poderse satisfacer, por ejemplo:

Para enfrentarse a este hecho hay diferentes estrategias:

TODO: Diferentes flujos se pueden sincronizar

Linea de comandos