Ajá, es cierto que no es tan fácil encontrar una explicación del gran esquema de las cosas. Hay una al principio del
artículo de Dave Philips en LJ (2006), pero está algo anticuada y tampoco llega muy a fondo.
En primer lugar está el
driver de audio, que es el software más dependiente del hardware, y se encarga de transferir datos entre la interfaz de audio y el equipo, así como de configurar los parámetros de funcionamiento (frecuencia de muestreo, tamaño de buffer, acceso a funciones como mezclador hardware, etc.) Hay varias familias de drivers: los más comunes son ALSA y FFADO (éste último para dispositivos Firewire). Serían en Linux el equivalente a ASIO.
Hay muchas aplicaciones que pueden usar directamente el driver ALSA para realizar operaciones de E/S de audio: por ejemplo, como mencionas, MuseScore. Pero esto tiene varios problemas:
- Como en ASIO, el acceso a ALSA es exclusivo y bloquea la interfaz de audio para otras aplicaciones (a no ser que se utilicen plugins ALSA como dmix, como se hacía hace unos años, pero ha quedado obsoleto por su dificultad conceptual para el usuario).
- Obliga a repetir la configuración del driver (frecuencia, buffers) en cada aplicación.
- Para un programador la API de ALSA es complicada. Además, acceder directamente al driver obliga a incluir código específico para cada familia de driver que se quiera utilizar, lo que se puede convertir en una pesadilla si además se quiere ser multiplataforma: ALSA, FFADO, ASIO, WDM, DirectSound, Core Audio, etc. La librería Portaudio, que también vemos mencionada en la interfaz de MuseScore, unifica varias de estas familias de drivers en una sola interfaz, facilitando el acceso directo a todas ellas.
Para evitar estos problemas y añadir una serie de funciones de gran utilidad, por encima de los drivers de audio se pone una capa que se denominada
servidor de audio.
Hay varios servidores de audio en el mundo Linux, hoy en día los más extendidos son Pulseaudio para aplicaciones de escritorio y Jack para aplicaciones de audio.
Pulseaudio es un intento de simplificar al máximo el uso del hardware de audio: se las entiende con el driver ALSA centralizando la configuración del hardware y proporcionando valores por defecto fiables, funciona como mezclador para que varias aplicaciones puedan sonar simultáneamente, intenta ocultar toda la complejidad de forma que el usuario no tenga que hacerse un cursillo de configuración a bajo nivel de su interfaz de audio, proporciona herramientas amigables para ajustar niveles, incluir efectos, etc.
Jack es un servidor orientado al trabajo específico de audio: también centraliza la configuración del hardware y el acceso al driver, y añade una serie de funciones útiles para enrutado sofisticado de canales de audio, trabajo en baja latencia, priorización de procesos para evitar cortes de audio, etc.
Pulseaudio y Jack pueden coexistir, típicamente Jack se hace con el control del driver y Pulseaudio se convierte en un cliente Jack que da servicio a las aplicaciones de escritorio (navegador web, audio chat, media player...) Al principio esta coexistencia dio bastantes problemas, pero hoy en día suelen estar bien resueltos en las distribuciones especializadas en audio.
Como has visto MuseScore ofrece varias opciones para hacer sonar las partituras. Podrías sacar datos MIDI y enrutarlos a tu sintetizador hardware o software preferido. O bien puedes usar su sintetizador interno basado en soundfonts.
En un intento de adaptarse a la mayor cantidad de entornos posibles MuseScore ofrece tres posibilidades para hacer sonar este sinte interno: Audio Jack, ALSA y Portaudio. La primera es la más recomendable porque evita conflictos con otras aplicaciones y ofrece garantías de baja latencia o ausencia de chasquidos. En un sistema Linux no hay diferencia entre la segunda y la tercera, ya que Portaudio funciona simplemente como un envoltorio sobre ALSA. En Windows o Mac no tendrías la opción de elegir ALSA.