Windows Audio Session API
1. 개요
Windows에서 오디오 장치와의 연결을 위한 API.WASAPI 이전의 윈도우 오디오 아키텍처는 하드웨어 추상화 계층을 지날 때 커널 드라이버인 Kernel Wave Audio Mixer(이하 KMixer)를 통과하도록 설계되었다. DirectX를 통하더라도 이를 우회하는 것은 불가능하였다.[1] 문제는 KMixer를 통과할 때 음질 열화 및 큰 레이턴시[2]가 일어났기 때문에, Vista에서는 이를 해결하는 새로운 오디오 아키텍처인 WASAPI를 만들게 되었고, Vista를 시작으로 이후 버전의 Windows에서 KMixer는 사용되지 않는다.
이름에서도 알 수 있듯이 KMixer는 커널에 붙어 있어 커널 모드에서 동작하였지만, WASAPI부터는 공유모드의 믹서, 볼륨 등의 오디오 아키텍처의 상당부분이 사용자 모드에서 동작하도록 변경되었으며, 오디오 드라이버만이 커널 모드에서 동작하고 있다.
2. 반응속도 개선
레이턴시가 매우 크게 개선되어, 디지털 오디오 녹음 작업 및 음악 게임 등과 같이 음악의 지연에 민감한 프로그램에서는 DirectSound를 빠르게 대체하고 있다.해외포럼의 반응들 가운데에는 70ms → 4ms 라는 보고도 있다. 이는 ASIO를 사용했을 때와 거의 비슷한 결과이다. ASIO는 사운드카드가 전용 드라이버를 제공하거나 유저가 ASIO4ALL을 별도로 설치해야 하는 문제가 있는 반면, WASAPI는 Windows Vista 이상 운영 체제만 설치되어 있으면 바로 동작하므로 ASIO보다 편리하다. 지금은 대부분의 DAW가 WASAPI를 지원하므로 옛날 이야기가 되었지만 macOS가 성공적으로 모든 소프트웨어가 Core Audio로 이식된 것에 반해 Windows의 메이저 DAW와 같은 소프트웨어들이 ASIO와 같은 독자 프로토콜이나 멀티미디어 확장(Multimedia Extension, MME)/DirectSound 와 같은 레거시 인터페이스만 지원하고 WASAPI를 네이티브로 지원하는 경우가 극히 적다보니 FlexASIO와 같은 WASAPI-ASIO 레이어를 별도로 사용해야 하는 문제들이 있었다. 이 경우 하단의 서술처럼 ASIO 없이도 Shared 모드 기준 10ms의 레이턴시 달성이 가능하고 ASIO와 같은 Exclusive 모드에서는 2ms대의 레이턴시 달성이 가능하다. 다만 실제로 코딩을 해보면, Exclusive 모드 기준으로도 대부분 (Realtek ASIO, OTG DAC 등) 환경에서 최소 지연시간이 144샘플 (48kHz 환경에서 3.0ms) 까지만 나오므로 유의. ASIO 장치에서 설정할 수 있는 64/32 버퍼사이즈는 실제로 WASAPI에선 잘 안 얻어지는것으로 보인다.
Windows 10 부터 추가된 WASAPI 동작 모드중 하나인 Low Latency 모드를 사용할 경우 WASAPI 스택 자체에 걸리는 처리 시간은 Shared 상태에서도 1.3ms에 불과하다. Windows 10 이전의 엔진 자체만 12ms의 처리 시간이 걸리던 것에 비해 엄청나게 개선된 성능이다.
아래 문단에서 설명하는 Exclusive모드의 경우 ASIO와 같이 한 프로그램만이 독점적으로만 사용이 가능해서 DAW를 사용하면 다른 프로그램은 소리를 출력하는 것이 불가능 한 문제가 있는데 WASAPI Low latency mode의 경우 Shared 모드를 지원하면서 Exclusive에서 보이는 레이턴시를 사용하는 것이 가능하다는 큰 장점이 있다.
다만 많은 수의 DAW를 포함한 프로그램들이 WASAPI를 지원해도 이 Low Latency 모드를 지원하는 DAW는 많지 않은데 이 모드를 지원하는 경우 일반 내장 리얼텍 사운드 카드만 가지고도 2.7ms (128 Samples/48kHz) 의 출력 레이턴시를 사용하는것이 가능하다.
3. 동작 모드
WASAPI에는 공유 모드와 단독 모드, 그리고 저지연 모드가 있다.3.1. 공유 모드
상시 동작하는 기본 모드다. 기본적으로 48kHz 480샘플로, 최소 10ms 정도의 지연 시간을 가지며 프로그램이 특별이 뭔가를 더 하지 않는 이상 이 모드에서 출력된다. 10ms 기본값이라는 점에서 알 수 있듯이 DAW와 같은 실시간, 저지연이 필요한 환경에서는 다소 부적합하다.Windows 10 이전에서는 무조건 10ms 고정이었다.
3.2. 단독 모드
단독 모드로 동작 시에는 공유 모드에서 사용되는 샘플레이트 컨버터, 믹서와 음향 효과를 통과하지 않고, 비트 퍼펙트로 사운드 드라이버에 데이터를 전송할 수 있다. 컴퓨터 내부의 처리구간[3]에서는 음원 데이터의 변화가 없고, 지연시간도 줄어든다. 그러나 단독 모드라는 이름으로도 알 수 있듯이 어떤 응용 프로그램이 단독 모드를 사용하면 다른 응용 프로그램에서 해당 오디오 장치에 접근할 수 없다. 예를 들어, 단독 모드로 노래 들으면서 게임을 하면 게임 사운드가 나오지 않는다. 리듬 게임 등 5ms같은 짧은 지연시간도 더하고 싶지 않을 때, 또는 음악을 비트퍼펙트(음원 무변환)로 듣고자 할 때 사용한다.3.3. 저지연 모드
Low Latency ModeWindows 10 부터 추가된 동작 모드. 소프트웨어와 하드웨어 모두 지원해야 해당 모드에서 효과를 볼 수 있다.
저지연 모드를 지원하지 않는 하드웨어도 해당 모드에서 사용은 가능하나 이 경우 실제로는 일반 공유 모드로 Fallback 된 상태로 레이턴시가 48kHz @ 10ms 로 고정되어 저지연 모드의 효과를 전혀 볼 수 없다.
Windows 10 이전에서 저지연 오디오를 사용하기 위해서는 ASIO나 WASAPI 단독 모드를 사용하는 것 말고는 별 방법이 없었으나 저지연 모드는 단독 모드보다도 낮은 지연시간을 제공하지만 공유 모드와 같이 여러 프로그램과 동시 스트림 재생이 가능하며 가상 악기와 같이 실시간 반응이 필요한 환경에서도 별도의 하드웨어 없이도 충분히 괜찮은 지연시간을 제공한다.
온보드 Realtek 오디오 코덱의 각 WASAPI 동작 모드와 최소 동작 가능한 버퍼 크기에 따른 라운드 트립 레이턴시 |
4. 하위 호환성
응용 프로그램이 멀티미디어 확장이나 DirectSound를 사용하려고 하면, 호환성 레이어를 통해 WASAPI 공유 모드로 출력된다. 그러나 EAX와 같은 하드웨어 가속 기능은 정상적으로 사용할 수 없게 되었다. 그러나 하드웨어 가속 기능이 없는 사운드 카드를 사용하는 경우에는 오히려 성능이 향상되는 효과를 보았다. WASAPI에서의 처리 방식이 개선되고 우선순위를 정할 수 있게 되어서 실제 성능이 향상되기 때문이다.5. 문제점
Windows Vista와 Windows 7에서는 멀티미디어 확장 WaveIn/WaveOut API를 사용하는 프로그램에서 샘플 레이트 변환을 요구할 때 품질이 저하되는 버그가 있었다. WASAPI의 멀티미디어 확장 에뮬레이션 계층에 문제가 있었기 때문인데, 이 문제는 Windows 7 SP1 및 Windows Server 2008 R2 SP1 한정으로 핫픽스를 설치하면 해결된다. 마이크로소프트에서 핫픽스 제공을 중단했기 때문에 다른 사이트에서 구해야 한다. 64비트 32비트 Windows 8부터는 해결되어서 따로 적용할 필요가 없다.6. 플레이어 세팅법
기본 형식 설정 방법은 다음과 같다.- 제어판 - 소리 - 스피커나 헤드폰 등 자신이 사용하는 장치 더블 클릭 - 고급에서 기본형식을 변경
반디캠, 골드웨이브, 곰녹음기(2.0 이후) 등에서는 WASAPI를 이용해서 녹음하는 것도 가능하다. 출력되는 소리를 Loopback 방식으로 녹음하는 것이기 때문에 음질이 손상되지 않으며, 시스템 마스터 볼륨의 영향을 받지 않는다. 또한 스테레오 믹스가 없는 사운드 카드에서도 녹음을 할 수 있다는 장점이 있다.