OpenAL

**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월 현재 리스트는 계속 사용 중이다.

## API 구조 및 기능
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을 사용하는 것으로 알려져 있다:

* 0 A.D.
* 알파 프로토콜
* America's Army: Operations
* 아메리칸 트럭 시뮬레이터
* 암네시아: 더 다크 디센트
* Armed Assault
* 발더스 게이트: 인핸스드 에디션
* 배틀필드 2
* 배틀필드 2142
* 바이오쇼크
* Bit.trip
* Colin McRae: DiRT
* 둠 3
* 유로 트럭 시뮬레이터 2
* 플라이트기어
* ioquake3
* Jedi Knight II: Jedi Outcast
* Jedi Knight: Jedi Academy
* Mari0
* 매스 이펙트 (비디오 게임)
* 마인크래프트 (LWJGL을 통해)
* 오픈아레나
* 
* 포스탈 2
* 프레이
* 사이코너츠
* 퀘이크 4
* Race Driver: Grid
* Regnum Online
* Running With Rifles
* S.T.A.L.K.E.R.
* 시스템 쇼크 2
* The Dark Mod
* TrackMania Forever
* TrackMania 2
* Trackmania Turbo
* 트레뮬러스
* Unreal II: The Awakening
* Unreal Tournament 2003
* Unreal Tournament 2004
* 언리얼 토너먼트 3
* War§ow
* 뷔름 온라인

### 기타 애플리케이션
* 블렌더 – 비디오 에디터에 OpenAL을 사용
* 3DMark06 – 게이머용 벤치마킹 도구
* 돌핀 (에뮬레이터) – 게임큐브 및 Wii 에뮬레이터
* Vanda Engine – 2D 및 3D 사운드 시뮬레이션을 위해 OpenAL 1.1 사용
* Croquet Project
* Bino - 입체 3D 비디오 및 다중 디스플레이 비디오를 지원하는 비디오 플레이어 소프트웨어

## 구현체
; OpenAL SI
: OpenAL Sample Implementation은 로키가 만든 원래 구현체이며 현재는 유지보수되지 않는다.
; OpenAL Soft
: OpenAL Soft는 LGPL 라이선스의 크로스 플랫폼 소프트웨어 구현체이다. 이 라이브러리는 현재 사용되지 않고 사유화된 OpenAL Sample Implementation을 대체할 자유 호환 업데이트로 제작되었다. OpenAL Soft는 모노, 스테레오(HRTF 및 UHJ 포함), 4채널, 5.1, 6.1, 7.1 및 B-Format 출력을 지원한다. 앰비소닉 자산이 지원된다.
; AeonWave-OpenAL
: AeonWave-OpenAL은 LGPL 라이선스의 OpenAL 에뮬레이션 레이어로, Adalin B.V.가 제작한 리눅스 및 윈도우용 저비용 비자유 4D 오디오 라이브러리인 AeonWave의 하드웨어 가속 기능을 활용한다. 저자는 AeonWave-OpenAL 구현이 동일한 조건에서 OpenAL SI 또는 OpenAL Soft보다 5배(AMD 애슬론 64 X2에서)에서 7배(인텔 아톰 N270에서) 더 빠르게 3D 오디오를 렌더링한다고 주장한다. AeonWave 라이브러리를 사용하여 이 구현은 HRTF뿐만 아니라 최대 8개 스피커까지의 공간화된 서라운드 사운드를 지원한다.
; Rapture3D OpenAL Driver
: Rapture3D OpenAL Driver는 Blue Ripple Sound가 제작한 비자유 상용 윈도우 전용 소프트웨어 구현체이다. 이 라이브러리는 다른 구현체를 대체할 고성능 드롭인 교체용으로 의도되었다. 주요 기능은 다음과 같다:
:* 32비트 부동 소수점 오디오 경로.
:* 고품질 샘플 레이트 변환(도플러 이동을 포함한 다양한 용도로 사용).
:* 고품질 효과 및 필터.
:* 다채널 음원 지원(앰비소닉(Ambisonics)을 사용하여 인코딩된 자산 포함).
:* 소스나 효과의 수에 제한이 없으며 CPU 성능에만 달려 있고, 비교적 오래된 하드웨어에서도 수백 개의 음원과 다중 효과를 렌더링할 수 있다.
:* 최대 4차(fourth order)까지 실행되는 고차 앰비소닉(HOA) 버스.
; Apple OpenAL
: 애플은 macOS와 iOS에서 OpenAL 구현체를 제공한다. 이는 운영체제의 3D Mixer(kAudioUnitSubType_3DMixer) 기능 위에 얹혀진 매우 얇은 레이어이다. 이 구현은 원래 Altivec 맥 OS X 시스템을 위해 라이언 C. 고든이 작성했다.
; MojoAL
: 라이언 C. 고든이 SDL2 위에 구축한 초소형(단일 파일) 전체 OpenAL 1.1 구현체이다.

## 같이 보기
* OpenGL
* OpenCL
* GLUT
* 환경 음향 확장

## 각주

## 외부 링크
*  공식 웹사이트

분류:비디오 게임 개발
분류:API
분류:라이브러리
분류:리눅스 API