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 alrededor de dichas API propietarias. o como una bifurcación patentada 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.
OpenAL fue desarrollado originalmente en 2000 por Loki Software para ayudarlos en su negocio de portar juegos de Windows a Linux . [3] 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, [ cita necesaria ] 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) inspirada en OpenGL ARB, [ cita necesaria ] nunca se ha formado tal organización y la especificación OpenAL generalmente se maneja y discute por correo electrónico en su correo público. lista.
La lista de correo original, openal-devel alojada por Creative, se desarrolló desde marzo de 2003 hasta alrededor de agosto de 2012. [4] 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. [5] En febrero de 2023, la lista sigue en uso.
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 , ya sea 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 contextos de representación, uso de recursos y bloqueo en una plataforma cruzada. manera. También hay una biblioteca 'ALUT' (Audio Library Utility Toolkit) que proporciona funciones de 'conveniencia' de nivel superior, 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 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).
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. [6] 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. [7]
Para aprovechar OpenAL a toda velocidad , se necesita una implementación específica de proveedor/hardware y rara vez se publican 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. [8] [9]
La API está disponible en las siguientes plataformas y sistemas operativos : [10] Android (compatible con OpenSL ES ), AmigaOS 3.x y 4.x, [11] Bada , BlackBerry 10 , [12] BlackBerry PlayBook , BSD , iOS (compatible 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 , [13] Solaris , QNX y AROS . [14]
Los dispositivos de juego compatibles son, por ejemplo: GameCube , PlayStation 2 , PlayStation 3 , Xbox , Xbox 360 , Wii y PlayStation Portable .
Se sabe que los siguientes videojuegos utilizan OpenAL:
{{cite web}}
: Mantenimiento CS1: copia archivada como título ( enlace )Las pruebas han demostrado que AeonWave-OpenAL reproduce audio cinco veces más rápido (en un procesador AMD Athlon-64 X2) y hasta siete veces más rápido (en un procesador Intel Atom-N270) que OpenAL-Soft y OpenAL-Sample.
Renderizar 32 sonidos en el Atom-N270 (el máximo para OpenAL-Soft) ahorra 1 vatio de consumo continuo de energía según powertop.
Implementaciones:
Recursos para desarrolladores: