Control de audio inteligente en Linux con Ear Candy

Las distribuciones de Linux más populares se están estandarizando respecto al manejo de audio a través de un componente llamado PulseAudio.  Se trata de la última encarnación de una funcionalidad muy antigua para soportar que múltiples aplicaciones compartieran un único dispositivo de audio, los famosos servidores de audio.

Si bien estos servidores antes se centraban sólo en compartir el dispositivo de audio entre varias aplicaciones, hoy en día existen muchas formas de usar el audio y con la avalancha de dispositivos enchufables como parlantes USB o audífonos bluetooth, estas soluciones se quedaban cortas.

Con Ear Candy se comienzan a ver los primeros frutos de usar como base un servidor de audio moderno como PulseAudio. Su principal característica es manejar en forma inteligente lo que el usuario está escuchando.  Por ejemplo si estás viendo un video y recibes una llamada por Skype, el audio del video se reducirá para que pongas atención en la llamada.  O bien si estás escuchando música y abres un video en Youtube, la música se detendrá automáticamente para darle prioridad al video que quieres ver.

Favoreciendo la usabilidad, Ear Candy no es un programa con millones de opciones para modificar, sino que simplemente lo ejecutas y te olvidas de él.  Sólamente lo recordarás cuando automáticamente aparezca para hacer su trabajo, antes de que por hábito muevas el mouse para detener esa canción de fondo.

En su última versión incluso no es necesario indicarle cómo debe manejar las aplicaciones, gracias a la estandarización que existe en Linux para entregar información acerca de las aplicaciones al entorno de escritorio – qué es la misma que se usa para construir el menú organizado por categorías – EarCandy es capaz de analizar la descripción de cada aplicación para detectar qué hace y actuar en consecuencia.

Si bien ya es usable y estable, EarCandy aún se considera en estado Alpha y no hay paquetes para usuarios finales.  Aquellos con alma de pionero pueden descargarlo directamente desde el repositorio bzr de EarCandy.

Bonus track : Audio en Linux, dejando atrás el caos

El manejo de audio en Linux siempre ha sido un tema bastante conflctivo, el estado actual es notablemente superior a lo que existía hace un par de años atrás, pero aún a veces aparecen pesadillas del pasado.

Existen al menos dos capas de abstracción para exponer el audio a las aplicaciones.  La primera capa corresponde a los drivers, y la segunda es el servidor de audio, un proceso que ayuda a eliminar las restricciones de los dispositivos de audio tradicionales en sistemas operativos multitarea.

Los drivers de audio en Linux se manejan como un componente especial del kernel, con su propio set de drivers y aplicaciones para administrar los dispositivos.  Originalmente se usaba Open Sound System (OSS) y más tarde fue reemplazado por ALSA que era capaz de manejar hardware con nuevas capacidades.

En la década de los noventa, en los tiempos de OSS, los dispositivos de audio eran muy sencillos y salvo destacadas excepciones, todos usaban una arquitectura basada en SoundBlaster.  Básicamente se trataba de un dispositivo con varias entradas, un mezclador, un canal de audio en estéreo y un sintetizador, ya sea un clásico FM (Yamaha OPL3) o en sus versiones más modernas, uno basado en wavetables.

Con esta arquitectura, y considerando que en esos años los sistemas eran monotarea, con un canal de audio era suficiente.  En paralelo aparecían dispositivos como Gravis Ultrasound que permitían hasta 32 canales de audio independiente, pero eran orientados a música, no a compartir canales entre aplicaciones.

La solución que adoptó Linux para poder usar un sólo canal para múltiples aplicaciones en forma simultánea fue agregar un componente central que tenía control sobre ese canal y las aplicaciones le enviaban el sonido a ese componente, se conoció como sound server o servidor de sonido.  No se realizó un esfuerzo de estandarización y aparecieron dos implementaciones, una asociada al gestor de ventanas Enlightenment llamada Enlightenment Sound Daemon o ESD, y otra de KDE llamada Analog Realtime Synthesizer o aRts.

Dadas estas condiciones, las aplicaciones tenían que decidir entre usar el dispositivo en forma directa via OSS (o ALSA), mediante ESD o mediante aRts.  Y para ello comenzaban a depender de bibliotecas específicas de ESD o aRts.

Si eso parece un problema, donde las cosas se ponían complicadas era cuando una aplicación sólo implementaba acceso directo a OSS y se apropiaba del dispositivo de audio, dejando sin audio a todas las aplicaciones que lo quisieran utilizar, incluyendo a los servidores de sonido.   Otro escenario posible era tener una aplicacion que gentilmente compartía el sonido por ESD, pero este dejaría fuera las aplicaciones con aRts.

Estos servidores comenzaron a perder relevancia cuando apareció ALSA, ya que en caso de disponer de hardware con más de un canal de audio se puede entregar a cada aplicación su propio canal, o bien emular esta capacidad por software de una forma transparente a la aplicación, aunque obviamente consumiendo más recursos del procesador.

Las cosas se pusieron más entretenidas aún con la aparición de dispositivos de audio enchufables, desde tarjetas de audio profesionales (Digidesign, M-Audio, etc) a unos simples audífonos bluetooth.  Esto cambia totalmente el modelo que antes se tenía de dispositivos fijos, que siempre estaban disponibles.

PulseAudio surge como una solución diseñada bajo criterios acorde a los requerimientos actuales de audio, es una capa de abstracción que reemplaza a los servidores de audio tradicionales, pero que evita los errores cometidos en el pasado, como es la dependencia de un entorno de escritorio o el deficiente manejo de la latencia que tenían los servidores tradicionales.

PulseAudio es una abstracción completa del sistema de audio subyacente, puede combinar múltiples dispositivos de audio como uno solo, manejar niveles de volumen por aplicación, sincronizar múltiples flujos de audio, etc.

Si bien algunos usuarios aun experimentan problemas con PulseAudio, se trata de una solución que vino para quedarse y sentar las bases de una nueva era del manejo de audio en Linux.

Link : EarCandy is a smart PulseAudio Volume Manager (Web Upd8)