| 원저자 | 로키 소프트웨어(Loki Software) |
|---|---|
| 개발자 | 크리에이티브 테크놀로지 |
| 안정화 버전 | 1.1 (설치 프로그램 2.1.0.0)
/ 2009년 11월 |
| 프로그래밍 언어 | C |
| 운영 체제 | 15개 운영체제 참조: 지원 플랫폼 |
| 종류 | 애플리케이션 프로그래밍 인터페이스 |
| 라이선스 | |
| 웹사이트 | www |
OpenAL(Open Audio Library, 오픈 오디오 라이브러리)은 크로스 플랫폼 오디오 애플리케이션 프로그래밍 인터페이스(API)이다. 다채널 3차원 위치 오디오의 효율적인 렌더링을 위해 설계되었다. API 스타일과 관례는 OpenGL의 것을 의도적으로 닮게 만들었다. OpenAL은 환경 3D 오디오 라이브러리로, 음향 감쇠(거리에 따른 소리의 감소), 도플러 효과(움직임에 따른 주파수 변화), 물질의 밀도 등을 시뮬레이션하여 게임의 사실감을 더해준다.
OpenAL은 원래 다이렉트사운드나 코어 오디오와 같이 사유이며(일반적으로 서로 호환되지 않는) 3D 오디오 API를 대체할 개방형 표준 및 오픈 소스 소프트웨어를 목표로 했으나, 실제로는 여러 플랫폼에서 해당 사유 API를 감싸는 래퍼 라이브러리나 벤더 특정적인 사유 포크 형태로 주로 구현되었다. 이후 참조 구현은 사유화되고 유지보수가 중단되었지만, OpenAL Soft와 같은 오픈 소스 구현체를 사용할 수 있다.
OpenAL은 2000년에 마이크로소프트 윈도우 게임을 리눅스로 이식하는 사업을 돕기 위해 로키 소프트웨어에 의해 처음 개발되었다. 로키(Loki)가 폐업한 후, 이 프로젝트는 한동안 자유 소프트웨어 공동체/오픈 소스 공동체에 의해 유지되었으며, 엔비디아 nForce 사운드 카드 및 메인보드에 구현되었다. 2012년경까지 크리에이티브 테크놀로지에 의해 호스팅되고 주로 개발되었다.
1.1(2009년) 버전 이후 크리에이티브의 샘플 구현은 사유로 전환되었으며, 자유 라이선스의 마지막 릴리스는 프로젝트의 아파치 서브버전 소스 코드 저장소를 통해 여전히 접근할 수 있다. 그러나 OpenAL Soft는 널리 사용되는 오픈 소스 대안이며 활발하게 유지보수 및 확장되고 있다.
OpenAL 규약에는 OpenGL ARB를 모델로 한 "아키텍처 검토 위원회"(Architecture Review Board, ARB)가 있을 것이라고 명시되어 있지만, 실제로는 그러한 조직이 형성된 적이 없으며 OpenAL 사양은 일반적으로 공개 메일링 리스트의 이메일을 통해 처리되고 논의된다.
크리에이티브에서 호스팅한 원래 메일링 리스트인 openal-devel은 2003년 3월부터 2012년 8월경까지 운영되었다. 심플 다이렉트미디어 레이어를 개발한 로키 출신의 라이언 C. 고든은 2014년 1월에 OpenAL.org에서 새로운 메일링 리스트와 웹사이트를 시작했다. 2023년 2월 현재 리스트는 계속 사용 중이다.
OpenAL의 일반적인 기능은 소스 객체, 오디오 버퍼 및 단일 리스너(listener)로 인코딩된다. 소스 객체는 버퍼에 대한 포인터, 소리의 속도, 위치, 방향 및 소리의 강도를 포함한다. 리스너 객체는 리스너의 속도, 위치, 방향 및 모든 소리에 적용되는 일반 게인(gain)을 포함한다. 버퍼는 8비트 또는 16비트의 모노럴 또는 스테레오 형식의 펄스 부호 변조(PCM) 데이터를 포함한다. 렌더링 엔진은 거리 감쇠, 도플러 효과 등에 필요한 모든 계산을 수행한다.
최종 사용자의 입장에서 이 모든 것의 결과는, 올바르게 작성된 OpenAL 애플리케이션에서 사용자가 가상 세계의 3차원 공간을 이동할 때 소리가 매우 자연스럽게 작동한다는 것이다. 프로그래머의 관점에서는 기존 OpenGL 기반 3D 그래픽 애플리케이션에서 이를 구현하기 위해 추가적인 작업이 거의 필요하지 않다.
OpenGL 사양과 달리 OpenAL 사양은 두 가지 서브섹션 API를 포함한다. 실제 OpenAL 함수 호출로 구성된 코어와, 크로스 플랫폼 방식으로 렌더링 컨텍스트, 리소스 사용 및 잠금을 관리하는 데 사용되는 ALC(Audio Library Context) API이다. 또한 OpenGL의 'GLUT'과 유사하게 상위 수준의 편의 기능을 제공하는 'ALUT'(Audio Library Utility Toolkit) 라이브러리도 있다.
향후 추가적인 기능을 제공하기 위해 OpenAL은 확장 메커니즘을 활용한다. 따라서 개별 벤더는 사유 하드웨어의 추가 기능을 노출하기 위해 자체 확장을 OpenAL 배포판에 포함할 수 있다. 확장은 ARB(Architecture Review Board) 상태로 승격될 수 있으며, 이는 하위 호환성을 위해 유지될 표준 확장을 의미한다. ARB 확장은 일정 기간이 지난 후 코어 API에 추가될 가능성이 있다.
고급 디지털 신호 처리 및 하드웨어 가속 사운드 효과를 위해 EFX(Effects Extension) 또는 환경 음향 확장(EAX)을 사용할 수 있다.
OpenAL의 단일 리스너 모델은 단일 인간 사용자에 맞춰져 있으며, 인공지능이나 로봇 시뮬레이션 또는 협업 음악 공연과 같은 다수의 인간 참여자에게는 적합하지 않다. 이러한 경우에는 다중 리스너 모델이 필요하다. OpenAL은 소리 전파 지연도 고려하지 않는다(음속은 도플러 효과에만 사용됨). 음원까지의 거리는 진폭 효과(감쇠)로만 변환될 뿐 지연으로 변환되지는 않는다. 따라서 해당 기능이 별도로 추가되지 않는 한 OpenAL을 도달 시간 차이 계산에 사용할 수 없다.
OpenAL의 풀 스피드 이점을 누리려면 벤더/하드웨어 전용 구현이 필요하지만, 이는 오픈 소스로 공개되는 경우가 드물다. 지원되는 많은 플랫폼은 사실 OpenAL을 플랫폼의 네이티브(종종 사유인) 오디오 API로 호출을 변환하는 래퍼 라이브러리로 구현한다. 윈도우에서 벤더 전용 구현이 감지되지 않으면 OpenAL을 다이렉트사운드(제네릭 소프트웨어) 또는 다이렉트사운드3D(제네릭 하드웨어)로 변환하는 wrap_oal.dll 래퍼 라이브러리로 대체된다. 윈도우 비스타 이후 다이렉트사운드3D가 제거됨에 따라 최신 버전의 윈도우에서는 제네릭 하드웨어 가속이 사실상 중단되었다.
이 API는 다음 컴퓨팅 플랫폼 및 운영체제에서 사용할 수 있다: 안드로이드 (OpenSL ES 지원), 아미가OS 3.x 및 4.x, 바다, 블랙베리 10, 블랙베리 플레이북, BSD, iOS (코어 오디오 지원), IRIX, 리눅스 (ALSA, OSS, PortAudio 및 펄스오디오 지원), 맥 OS 8, 맥 OS 9 및 맥 OS X (코어 오디오), 마이크로소프트 윈도우 (다이렉트사운드, Windows Multimedia API 및 Windows Multimedia Device (MMDevice) API 지원), 모르프OS, OpenBSD, 솔라리스, QNX, AROS.
지원되는 게임 장치는 예를 들어 게임큐브, 플레이스테이션 2, 플레이스테이션 3, 엑스박스, 엑스박스 360, Wii, 플레이스테이션 포터블 등이 있다.
다음 비디오 게임들은 OpenAL을 사용하는 것으로 알려져 있다:
Test have shown that AeonWave-OpenAL renders audio five times faster (on an AMD Athlon-64 X2 processor) and up to seven times faster (on an Intel Atom-N270 processor) than both OpenAL-Soft and OpenAL-Sample. Rendering 32 sounds on the Atom-N270 (the maximum for OpenAL-Soft) saves 1 Watt of continuous power consumption according to powertop.