Febrero
2007
Arquitecturas de sonido en terminales ligeros
Hasta no hace mucho tanto LTSP como PXES usaban dos arquitecturas de sonido muy semejantes (ESD o NASD), el sonido viajaba entre el servidor (donde se ejecutan los programas y se generan los sonidos) hasta el terminal de una manera más o menos sin comprimir.
Esto provoca que a partir de cierto número de terminales el sonido constante (escuchar música) consuma casi todo el ancho de banda de la red.
Con los desarrollos de nuevas soluciones, en LTSP se han dado cuenta de esto y están empezando a adoptar PulseAudio como servidor de sonido, el cual además de comprimir el «stream» también permite la compatibilidad con otros protocolos.
He preparado un pequeño diagrama, sobre cómo era, y como puede llegar a ser.
La línea naranja indica el cómo era antes, las aplicaciones usaban como plugin de salida «eSound» y a través de la red sin comprimir enviaban el audio que el terminal ligero recibía mediante un servidor de sonido escuchando en el puerto 16001 (normalmente).
ESD tiene varios problemas pero sin duda el más importante es que no es compatible a la vez con OSS y ALSA, de hecho en la mayoria de las distribuciones hay un paquete para OSS y otro para ALSA (en debian/ubuntu libesd0 y libesd0-alsa)
Con la llegada de PulseAudio nacen muchas opciones nuevas, y sobre todo mejor rendimiento ya que el audio va comprimido (pudiendo escoger entre varios algoritmos).
TCOS fue el primero en usar PulseAudio en terminales ligeros (allá por verano del 2006) y ha demostrado ser una de las opciones más viables. Los problemas vienen cuando intentamos que el montaje sea estandar para todos los equipos, mezclando OSS y ALSA en la misma red.
Con ALSA y PulseAudio (zona lateral derecha del esquema) es muy sencillo, el programa reproduce a través del plugin PulseAudio, y mediante un protocolo propio se envía por red el audio, el terminal que tiene un servidor de sonido recibe el «stream» y lo manda a la tarjeta de sonido.
Con OSS la cosa se complica. PulseAudio puede autodetectar tarjetas de sonido de cualquier tipo, pero hace cosas extrañas con las tarjetas antíguas, como por ejemplo empezar a reproducir y si alguien accede al dispositivo /dev/dsp se congela y hay que reiniciarlo.
Tenemos dos opciones:
Otra de las cosas que he descubierto con estas pruebas es que amixer, (mezclador de niveles de volumen en consola) es sólo compatible con ALSA, por lo que no disponemos de ninguna herramienta que suba el volumen de 0 para OSS, aunque creo que por defecto al cargar el módulo se ponen al 67%... Supongo que tendré que ir pensando en otro mezclador como aumix.
Todas estas pruebas de compatibilidad con OSS nacen de la necesidad de tener sonido en el ya famoso MicroClientJr que compramos hace tiempo y que en su día me dí por vencido para hacer funcionar. Ahora mismo lo tengo conectado como terminal ligero con TCOS y el audacious de mi portátil suena por sus altavoces ;)
El driver de sonido se llama sis7019, por lo visto funciona hasta el kernel 2.6.18, en el 2.6.19 habrá que volver a investigar como parchearlo. He subido las fuentes a mentors.debian.net por si algún DD quiere patrocinar la subida. El paquete deb crea un paquete nuevo llamado sis7019-sources y mediante module-assistant crea el módulo para el kernel que se necesite, lo que no acabo de entender es por qué cuando ejecuto algo como esto «m-a -t build sis7019» se compila dos veces, también me pasa con usbvision, otro paquete que tengo en mentors.debian.net (driver de mi capturadora USB de televisión).
Si alguien está interesado en esponsorizar la subida (en castellano suena bastante mal) los dos paquetes son lintian-limpios.
Esto provoca que a partir de cierto número de terminales el sonido constante (escuchar música) consuma casi todo el ancho de banda de la red.
Con los desarrollos de nuevas soluciones, en LTSP se han dado cuenta de esto y están empezando a adoptar PulseAudio como servidor de sonido, el cual además de comprimir el «stream» también permite la compatibilidad con otros protocolos.
He preparado un pequeño diagrama, sobre cómo era, y como puede llegar a ser.
La línea naranja indica el cómo era antes, las aplicaciones usaban como plugin de salida «eSound» y a través de la red sin comprimir enviaban el audio que el terminal ligero recibía mediante un servidor de sonido escuchando en el puerto 16001 (normalmente).ESD tiene varios problemas pero sin duda el más importante es que no es compatible a la vez con OSS y ALSA, de hecho en la mayoria de las distribuciones hay un paquete para OSS y otro para ALSA (en debian/ubuntu libesd0 y libesd0-alsa)
Con la llegada de PulseAudio nacen muchas opciones nuevas, y sobre todo mejor rendimiento ya que el audio va comprimido (pudiendo escoger entre varios algoritmos).
TCOS fue el primero en usar PulseAudio en terminales ligeros (allá por verano del 2006) y ha demostrado ser una de las opciones más viables. Los problemas vienen cuando intentamos que el montaje sea estandar para todos los equipos, mezclando OSS y ALSA en la misma red.
Con ALSA y PulseAudio (zona lateral derecha del esquema) es muy sencillo, el programa reproduce a través del plugin PulseAudio, y mediante un protocolo propio se envía por red el audio, el terminal que tiene un servidor de sonido recibe el «stream» y lo manda a la tarjeta de sonido.
Con OSS la cosa se complica. PulseAudio puede autodetectar tarjetas de sonido de cualquier tipo, pero hace cosas extrañas con las tarjetas antíguas, como por ejemplo empezar a reproducir y si alguien accede al dispositivo /dev/dsp se congela y hay que reiniciarlo.
Tenemos dos opciones:
- Cargamos el módulo oss y bloqueamos todo acceso al dispositivo /dev/dsp
- Arrancamos ESD sobre /dev/dsp y cargamos el modulo de redirección esound-sink, esto lo que hace es configurar la salida de PulseAudio como la entrada de ESD.
Otra de las cosas que he descubierto con estas pruebas es que amixer, (mezclador de niveles de volumen en consola) es sólo compatible con ALSA, por lo que no disponemos de ninguna herramienta que suba el volumen de 0 para OSS, aunque creo que por defecto al cargar el módulo se ponen al 67%... Supongo que tendré que ir pensando en otro mezclador como aumix.
Todas estas pruebas de compatibilidad con OSS nacen de la necesidad de tener sonido en el ya famoso MicroClientJr que compramos hace tiempo y que en su día me dí por vencido para hacer funcionar. Ahora mismo lo tengo conectado como terminal ligero con TCOS y el audacious de mi portátil suena por sus altavoces ;)El driver de sonido se llama sis7019, por lo visto funciona hasta el kernel 2.6.18, en el 2.6.19 habrá que volver a investigar como parchearlo. He subido las fuentes a mentors.debian.net por si algún DD quiere patrocinar la subida. El paquete deb crea un paquete nuevo llamado sis7019-sources y mediante module-assistant crea el módulo para el kernel que se necesite, lo que no acabo de entender es por qué cuando ejecuto algo como esto «m-a -t build sis7019» se compila dos veces, también me pasa con usbvision, otro paquete que tengo en mentors.debian.net (driver de mi capturadora USB de televisión).
Si alguien está interesado en esponsorizar la subida (en castellano suena bastante mal) los dos paquetes son lintian-limpios.
Enlace permanente ::
comentarios (0) ::
Versión para imprimir









