Advanced Linux Sound Architecture ( ALSA ) es un marco de software y parte del kernel de Linux que proporciona una interfaz de programación de aplicaciones (API) para controladores de dispositivos de tarjetas de sonido .
Autor (es) original (es) | Jaroslav Kysela |
---|---|
Desarrollador (es) | Equipo ALSA [1] |
Versión inicial | 1998 |
Lanzamiento estable | 1.2.4 [2] / 20 de octubre de 2020 |
Escrito en | C [3] |
Sistema operativo | Linux |
Tipo | |
Licencia | |
Sitio web | alsa-project |
Algunos de los objetivos del proyecto ALSA en sus inicios fueron la configuración automática del hardware de la tarjeta de sonido y el manejo elegante de múltiples dispositivos de sonido en un sistema. ALSA se publica bajo la Licencia Pública General GNU (GPL) y la Licencia Pública General Reducida GNU (LGPL). [4]
Los servidores de sonido PulseAudio , JACK (edición y mezcla de audio de nivel profesional de baja latencia) y PipeWire , las API de abstracción de nivel superior OpenAL , audio SDL , etc. funcionan sobre ALSA e implementaron controladores de dispositivos de tarjetas de sonido. En los sistemas Linux, ALSA sucedió al antiguo Open Sound System (OSS).
Historia
El proyecto para desarrollar ALSA fue dirigido por Jaroslav Kysela y se basó en el controlador de dispositivo Linux para la tarjeta de sonido Gravis Ultrasound . Comenzó en 1998 y se desarrolló por separado del kernel de Linux hasta que se introdujo en la serie de desarrollo 2.5 en 2002 (2.5.4–2.5.5). [5]
En la versión 2.6, reemplazó al sistema anterior, Open Sound System (OSS), por defecto (aunque existe una capa de compatibilidad con versiones anteriores). [6]
ALSA tiene una API más grande y compleja que OSS, por lo que puede ser más difícil desarrollar una aplicación que utilice ALSA como tecnología de sonido. Si bien ALSA puede configurarse para proporcionar una capa de emulación OSS, dicha funcionalidad ya no está disponible o no está instalada de forma predeterminada en muchas distribuciones de Linux.
Características
ALSA fue diseñado con algunas características que, en el momento de su concepción, no eran compatibles con OSS:
- Síntesis MIDI basada en hardware .
- Mezcla de hardware de múltiples canales.
- Operación full-duplex .
- Controladores de dispositivos compatibles con multiprocesador y seguros para subprocesos .
Además de los controladores de dispositivos de sonido, ALSA incluye una biblioteca de espacio de usuario para desarrolladores de aplicaciones que desean utilizar las funciones del controlador a través de una interfaz de nivel superior a la interfaz proporcionada para la interacción directa con los controladores del kernel. A diferencia de la API del kernel, que intenta reflejar las capacidades del hardware directamente, la biblioteca de espacio de usuario de ALSA presenta una abstracción que permanece lo más estandarizada posible en distintos elementos de hardware subyacentes. Este objetivo se logra en parte mediante el uso de complementos de software ; por ejemplo, muchas tarjetas de sonido modernas o chips de sonido integrados no tienen un control de "volumen maestro". En cambio, para estos dispositivos, la biblioteca de espacio de usuario proporciona un control de volumen de software utilizando el complemento " softvol ", y el software de aplicación ordinario no necesita preocuparse si dicho control se implementa mediante la emulación de hardware o software subyacente de dicho hardware subyacente.
Aplicaciones
Adicional a la estructura de software interno para el núcleo de Linux, el proyecto ALSA también proporciona las utilidades de línea de comandos alsactl
, amixer
, arecord/aplay
y alsamixer
, una ncurses basados en la UIS .
También hay GUI programadas por desarrolladores de terceros, como gnome-alsamixer (usando GTK ), kmix, xfce4-mixer, lxpanel, qashctl, pavucontrol, alsamixergui (usando FLTK ) y probablemente incluso más.
Conceptos
Esta sección proporciona una descripción general de los conceptos básicos relacionados con ALSA. [7] [8] [9]
Normalmente, ALSA admite hasta ocho tarjetas , numeradas del 0 al 7; cada tarjeta es un dispositivo de núcleo físico o lógico capaz de entrada y salida. Además, cada tarjeta también puede ser identificada por su identificación , que es una cadena explicativa como " Auricular " o " ICH9 ".
Una tarjeta tiene dispositivos , numerados a partir de 0; un dispositivo puede ser del tipo de reproducción , lo que significa que emite sonido desde la computadora, o de algún otro tipo, como captura , control , temporizador o secuenciador ; [10] El número de dispositivo 0 se utiliza de forma predeterminada cuando no se especifica ningún dispositivo en particular.
Un dispositivo puede tener subdispositivos , numerados a partir de 0; un subdispositivo representa algún punto final de sonido relevante para el dispositivo, como un par de altavoces. Si no se especifica el subdispositivo, o si se especifica el número de subdispositivo -1, se utiliza cualquier subdispositivo disponible.
La interfaz de una tarjeta es una descripción de un protocolo ALSA para acceder a la tarjeta; las posibles interfaces incluyen: hw , plughw , default y plug: dmix . La interfaz hw proporciona acceso directo al dispositivo del kernel, pero no admite mezcla de software o adaptación de flujo. El plughw y el valor predeterminado habilitan la salida de sonido donde la interfaz hw produciría un error.
Una aplicación generalmente describe la salida de sonido combinando todas las especificaciones antes mencionadas en una cadena de dispositivo [ cita requerida ] , que tiene una de las siguientes formas (que distinguen entre mayúsculas y minúsculas ):
- interfaz: tarjeta, dispositivo, subdispositivo
- interfaz: CARD = 1, DEV = 3, SUBDEV = 2 .
Un flujo de ALSA es un flujo de datos que representa sonido; El formato de transmisión más común es PCM, que debe producirse de tal manera que coincida con las características o parámetros del hardware, que incluyen:
- frecuencia de muestreo : a menudo 44,1 kHz en equipos de sonido domésticos o 48 kHz en sistemas de cine en casa, pero hasta 88,2 kHz, 96 kHz o incluso 192 kHz para la producción o reproducción de audio de alta fidelidad.
- ancho de muestra : medido en una cierta cantidad de bits por muestra (como 8, 16, 24 o 32 bits / muestra)
- codificación de muestra : como endianness
- número de canales : 1 para mono, 2 para estéreo o 6 para AC-3 / IEC958
Implementaciones
La capa ALSA System on Chip (ASoC) tiene como objetivo proporcionar un mejor soporte para ALSA en sistemas integrados que utilizan un diseño de sistema en chip (SoC). [11]
Ver también
- Sistema de sonido abierto
- DSSI
- udev
- Kit de conexión de audio JACK
- KMid
- LADSPA
- PulseAudio
- Alsamixer
- PipeWire
Referencias
- ^ Alsa equipo , alsa-project.org, 2008-09-29 , recuperada 2012-01-08
- ^ https://www.alsa-project.org/wiki/Changes_v1.2.3.2_v1.2.4 ; fecha de publicación: 20 de octubre de 2020.
- ^ "ALSA" , Analysis Summary , Ohloh , consultado el 8 de enero de 2012
- ^ a b "Introducción" . alsa-project.org . Consultado el 8 de enero de 2012 .
- ^ Notas de la versión de Linux 2.5.5 , consultadas el 8 de enero de 2012
- ^ Emulación OSS , archivado desde el original el 5 de junio de 2012 , consultado el 7 de julio de 2012
- ^ Tranter, Jeff (octubre de 2004), "Introducción a la programación de sonido con ALSA" , Linux Journal , recuperada 2012-01-08
- ^ Phillips, Dave (junio de 2005), "Una guía del usuario a ALSA" , Linux Journal , Archivado desde el original en 2012-01-09 , recuperados 2012-01-08
- ^ Alsa biblioteca C documentación Doxygen , octubre de 2007 , recuperado 2012-01-08
- ^ "Proyecto ALSA - la referencia de la biblioteca C: interfaz del secuenciador" . www.alsa-project.org . Consultado el 30 de abril de 2019 .
- ^ ALSA SoC Layer , kernel.org , 2017-07-13
enlaces externos
- Página web oficial
Modo de usuario | Aplicaciones de usuario | bash , LibreOffice , GIMP , Blender , 0 AD , Mozilla Firefox , ... | ||||
---|---|---|---|---|---|---|
Componentes del sistema | Demonios : systemd , runit , udevd , polkitd , sshd , smbd ... | Administrador de ventanas : X11 , Wayland , SurfaceFlinger (Android) | Gráficos : Mesa , AMD Catalyst , ... | Otras bibliotecas: GTK , Qt , EFL , SDL , SFML , FLTK , GNUstep , ... | ||
Biblioteca estándar de C | fopen , execv , malloc , memcpy , localtime , pthread_create ... (hasta 2000 subrutinas ) glibc aspira a ser rápido, MUSL y uClibc sistemas de destino embebidos, biónicos escritas para Android , etc. Todo objetivo es ser POSIX / SUS compatible. | |||||
Modo kernel | Kernel de Linux | stat , splice , dup , read , open , ioctl , write , mmap , close , exit , Etc (alrededor de 380 llamadas al sistema) El núcleo de Linux Call Interface System (SCI, tiene como objetivo ser POSIX / SUS compatible) [ cita requerida ] | ||||
Subsistema de programación de procesos | Subsistema IPC | Subsistema de gestión de memoria | Subsistema de archivos virtuales | Subsistema de red | ||
Otros componentes: ALSA , DRI , evdev , LVM , mapeador de dispositivo , Linux programador de red , Netfilter Módulos de Seguridad de Linux : SELinux , Tomoyo , AppArmor , Smack | ||||||
Hardware ( CPU , memoria principal , dispositivos de almacenamiento de datos , etc.) |