AbiertoAL
OpenAL (Open Audio Library) es una interfaz de programación de aplicaciones (API) de audio multiplataforma. Está diseñado para una representación eficiente de audio posicional tridimensional multicanal. Su estilo y convenciones de API se parecen deliberadamente a los de OpenGL. OpenAL es una biblioteca de audio ambiental 3D que puede agregar realismo a un juego simulando la atenuación (degradación del sonido a lo largo de la distancia), el efecto Doppler (cambio de frecuencia como resultado del movimiento) y densidades de materiales.
OpenAL pretendía originalmente ser un estándar abierto y un reemplazo de código abierto para las API de audio 3D propietarias (y generalmente incompatibles entre sí), como DirectSound y Core Audio, aunque en la práctica se ha implementado en gran medida en varias plataformas como un contenedor. dichas API propietarias o como una bifurcación propietaria y específica del proveedor. Si bien la implementación de referencia luego pasó a ser propietaria y no recibió mantenimiento, hay implementaciones de código abierto disponibles como OpenAL Soft.
Historia
OpenAL fue desarrollado originalmente en 2000 por Loki Software para ayudarlos en su negocio de portar juegos de Windows a Linux. Después de la desaparición de Loki, el proyecto fue mantenido durante un tiempo por la comunidad de software libre/código abierto y se implementó en tarjetas de sonido y placas base NVIDIA nForce. Fue alojado (y desarrollado en gran medida) por Creative Technology hasta alrededor de 2012.
Desde 1.1 (2009), la implementación de muestra de Creative se ha vuelto propietaria, y las últimas versiones en licencias gratuitas aún son accesibles a través del repositorio de código fuente Subversion del proyecto. Sin embargo, OpenAL Soft es una alternativa de código abierto ampliamente utilizada y se mantiene y amplía activamente.
Si bien los estatutos de OpenAL dicen que habrá una "Junta de Revisión de Arquitectura" (ARB) modelado sobre OpenGL ARB, nunca se ha formado tal organización y la especificación OpenAL generalmente se maneja y discute por correo electrónico en su lista de correo pública.
La lista de correo original, openal-devel alojada por Creative, funcionó desde marzo de 2003 hasta aproximadamente agosto de 2012. Ryan C. Gordon, un veterano de Loki que desarrolló Simple DirectMedia Layer, inició una nueva lista de correo y un sitio web en OpenAL..org en enero de 2014. En febrero de 2023, la lista sigue en uso.
Estructura y funcionalidad de API
La funcionalidad general de OpenAL está codificada en objetos fuente, buffers de audio y un único oyente. Un objeto fuente contiene un puntero a un búfer, la velocidad, posición y dirección del sonido, y la intensidad del sonido. El objeto del oyente contiene la velocidad, posición y dirección del oyente, y la ganancia general aplicada a todo el sonido. Los búferes contienen datos de audio en formato PCM, de 8 o 16 bits, en formato monoaural o estéreo. El motor de renderizado realiza todos los cálculos necesarios para la atenuación de la distancia, el efecto Doppler, etc.
El resultado neto de todo esto para el usuario final es que en una aplicación OpenAL escrita correctamente, los sonidos se comportan de forma bastante natural a medida que el usuario se mueve a través del espacio tridimensional del mundo virtual. Desde la perspectiva de un programador, se requiere muy poco trabajo adicional para que esto suceda en una aplicación gráfica 3D basada en OpenGL existente.
A diferencia de la especificación OpenGL, la especificación OpenAL incluye dos subsecciones de la API: el núcleo que consta de las llamadas a funciones OpenAL reales y la API ALC (Audio Library Context) que se utiliza para gestionar los contextos de representación, el uso de recursos y el bloqueo. una manera multiplataforma. También hay un 'ALUT' (Audio Library Utility Toolkit) biblioteca que proporciona 'conveniencia' funciones, exactamente análogas a 'GLUT' de OpenGL.
Para proporcionar funcionalidad adicional en el futuro, OpenAL utiliza un mecanismo de extensión. De este modo, los proveedores individuales pueden incluir sus propias extensiones en las distribuciones de OpenAL, comúnmente con el fin de exponer funcionalidad adicional en su hardware propietario. Las extensiones se pueden promover al estado ARB (Junta de Revisión de Arquitectura), lo que indica una extensión estándar que se mantendrá para compatibilidad con versiones anteriores. Las extensiones ARB tienen la posibilidad de agregarse a la API principal después de un período de tiempo.
Para el procesamiento avanzado de señales digitales y efectos de sonido acelerados por hardware, se pueden utilizar EFX (Extensión de efectos) o extensiones de audio ambiental (EAX).
Limitaciones
El modelo de oyente único en OpenAL está diseñado para un solo usuario humano y no es apto para inteligencia artificial o simulaciones robóticas o múltiples participantes humanos como en actuaciones musicales colaborativas. En estos casos se requiere un modelo de múltiples oyentes. OpenAL tampoco tiene en cuenta los retrasos en la propagación del sonido (la velocidad del sonido se utiliza únicamente para el efecto Doppler). La distancia a una fuente de sonido sólo se traduce en un efecto de amplitud (atenuación) y no en un retraso. Por lo tanto, OpenAL no se puede utilizar para calcular la diferencia horaria de llegada a menos que esa funcionalidad se agregue por separado.
Para aprovechar OpenAL a toda velocidad, se necesita una implementación específica de proveedor/hardware y rara vez se lanzan como código abierto. De hecho, muchas plataformas compatibles implementan OpenAL como un contenedor que simplemente traduce las llamadas a la API de audio nativa y, a menudo, propietaria, de la plataforma. En Windows, si no se detecta una implementación específica del proveedor, se recurrirá a la biblioteca contenedora wrap_oal.dll que traduce OpenAL a DirectSound (software genérico) o DirectSound3D (hardware genérico); la eliminación de este último desde Windows Vista en adelante ha roto efectivamente la aceleración de hardware genérica en las versiones modernas de Windows.
Plataformas compatibles
La API está disponible en las siguientes plataformas y sistemas operativos: Android (compatible con OpenSL ES), AmigaOS 3.x y 4.x, Bada, BlackBerry 10, BlackBerry PlayBook, BSD, iOS (compatible con Core Audio), IRIX, Linux (compatible con ALSA, OSS, PortAudio y PulseAudio), Mac OS 8, Mac OS 9 y Mac OS X (Core Audio), Microsoft Windows (compatible con DirectSound, Windows Multimedia API y Windows Multimedia Device (MMDevice) API), MorphOS, OpenBSD, Solaris, QNX y AROS.
Los dispositivos de juego compatibles son, por ejemplo: GameCube, PlayStation 2, PlayStation 3, Xbox, Xbox 360, Wii y PlayStation Portable.
Aplicaciones
Juegos
Se sabe que los siguientes videojuegos utilizan OpenAL:
- 0 A.D.
- Protocolo alfa
- Ejército de Estados Unidos: Operaciones
- Simulador de camión americano
- Amnesia: El descenso oscuro
- Agresión armada
- Baldur's Gate: Enhanced Edition
- Battlefield 2
- Battlefield 2142
- BioShock
- Bit.Trip
- Colin McRae: DiRT
- Doom 3
- Euro Truck Simulator 2
- VueloGear
- ioquake3
- Jedi Knight II: Jedi Outcast
- Jedi Knight: Jedi Academy
- Mari0
- Efecto de masa (video juego)
- Minecraft (por LWJGL)
- OpenArena
- Orbz
- Penumbra: Overture
- Postal 2
- Presión
- Psychonauts
- Quake 4
- Race Driver: Grid
- Regnum Online
- Corriendo con los rifles
- S.T.A.L.K.E.R.
- Disparo de sistema 2
- El mod oscuro
- Tremulous
- II: El despertar
- Torneo irreal 2003
- Torneo irreal 2004
- Torneo irreal 3
- War§ow
- Wurm Online
Otras aplicaciones
- Blender – herramienta de modelado y renderizado 3D utiliza OpenAL para su motor de juego incorporado
- 3DMark06 – La herramienta de referencia de Gamer
- Delfín (emulador) – GameCube y emulador Wii
- Vanda Engine – utiliza OpenAL 1.1 para simular sonidos 2D y 3D
- Croquet Project
- Bino - Software para reproductores de vídeo que tiene soporte para vídeo 3D estereoscópico y vídeo multidisplay
Implementaciones
- OpenAL SI
- La implementación de la muestra abierta es la aplicación original, de Loki, y no se mantiene actualmente.
- OpenAL Soft
- OpenAL Soft es una aplicación de software con licencia LGPL, multiplataforma. La biblioteca se entiende como una actualización/reemplazamiento gratuito compatible con la implementación de Muestra OpenAL ahora reconocida y patentada. OpenAL Soft soporta mono, estéreo (incluyendo HRTF y UHJ), 4 canales, 5.1, 6.1, 7.1, y salida B-Format. Se admiten activos ambisónicos.
- AeonWave-OpenAL
- AeonWave-OpenAL es un abierto con licencia LGPL capa de emulación AL que aprovecha la aceleración del hardware proporcionada por la biblioteca AeonWave 4D-audio no libre pero de bajo coste para Linux y Windows hecha por Adalin B.V. El autor afirma que la implementación de AeonWave-OpenAL hace que el audio 3D cinco (en un AMD Athlon 64 X2) a siete (en un Intel Atom N270) sea más rápido que tampoco OpenAL SI o OpenAL Soft en las mismas condiciones. Mediante el uso de la biblioteca AeonWave esta implementación soporta el sonido envolvente HRTF y espacializado para hasta ocho oradores.
- Rapture3D OpenAL Driver
- El Rapture3D OpenAL Driver es un no libre, comercial, Windows solamente, aplicación de software hecha por Blue Ripple Sound. La biblioteca se propone como un reemplazo de alto rendimiento para otras implementaciones. Cuenta con:
- Camino de audio punto flotante de 32 bits.
- Conversión de frecuencia de muestra de alta calidad (utilizada para diversos fines, incluido el cambio Doppler).
- Efectos y filtros de alta calidad.
- Soporte para fuentes de sonido multicanal (incluyendo activos codificados usando Ambisonics).
- El único límite en el número de fuentes o efectos es la potencia de la CPU, puede hacer cientos de fuentes de sonido y múltiples efectos en hardware relativamente viejo.
- Autobús Ambisonics de mayor orden (HOA) que corre hasta la cuarta orden.
- Apple OpenAL
- Apple envía una implementación de OpenAL en macOS e iOS. Es una capa muy delgada sobre la característica 3D Mixer (kAudioUnitSubType_3DMixer) en el sistema operativo. Esta implementación fue escrita originalmente por Ryan C. Gordon para sistemas Altivec Mac OS X.
- MojoAL
- Tiny (single-file), aplicación OpenAL 1.1 completa construida sobre SDL2 por Ryan C. Gordon.