WASAPI 정보

WASAPI(Windows 오디오 세션 API)를 사용하면 클라이언트 애플리케이션이 애플리케이션과 오디오 엔드포인트 디바이스 간의 오디오 데이터 흐름을 관리할 수 있습니다.

헤더 파일 Audioclient.h 및 Audiopolicy.h는 WASAPI 인터페이스를 정의합니다.

모든 오디오 스트림은 오디오 세션의 멤버입니다. 세션 추상화 를 통해 WASAPI 클라이언트는 오디오 스트림을 관련 오디오 스트림 그룹의 구성원으로 식별할 수 있습니다. 시스템은 세션의 모든 스트림을 단일 단위로 관리할 수 있습니다.

오디오 엔진은 애플리케이션이 오디오 엔드포인트 디바이스에 대한 액세스를 공유하는 사용자 모드 오디오 구성 요소 입니다. 오디오 엔진은 엔드포인트 버퍼와 엔드포인트 디바이스 간에 오디오 데이터를 전송합니다. 렌더링 엔드포인트 디바이스를 통해 오디오 스트림을 재생하기 위해 애플리케이션은 렌더링 엔드포인트 버퍼에 오디오 데이터를 주기적으로 씁니다. 오디오 엔진은 다양한 애플리케이션의 스트림을 혼합합니다. 캡처 엔드포인트 디바이스에서 오디오 스트림을 기록하기 위해 애플리케이션은 캡처 엔드포인트 버퍼에서 오디오 데이터를 주기적으로 읽습니다.

WASAPI는 여러 인터페이스로 구성됩니다. 이 중 첫 번째는 IAudioClient 인터페이스입니다. WASAPI 인터페이스에 액세스하기 위해 클라이언트는 먼저 매개 변수 iidREFIID IID_IAudioClient 설정된 IMMDevice::Activate 메서드를 호출하여 오디오 엔드포인트 디바이스의 IAudioClient 인터페이스에 대한 참조를 가져옵니다. 클라이언트는 IAudioClient::Initialize 메서드를 호출하여 엔드포인트 디바이스에서 스트림을 초기화합니다. 스트림을 초기화한 후 클라이언트는 IAudioClient::GetService 메서드를 호출하여 다른 WASAPI 인터페이스에 대한 참조를 가져올 수 있습니다.

WASAPI의 많은 메서드는 클라이언트 애플리케이션에서 사용하는 오디오 엔드포인트 디바이스가 유효하지 않은 경우 오류 코드를 반환하는 AUDCLNT_E_DEVICE_INVALIDATED. 애플리케이션이 이 오류에서 복구할 수 있는 경우가 자주 있습니다. 자세한 내용은 Invalid-Device 오류에서 복구를 참조하세요.

WASAPI는 다음 인터페이스를 구현합니다.

인터페이스 설명
IAudioCaptureClient 클라이언트가 캡처 엔드포인트 버퍼에서 입력 데이터를 읽을 수 있도록 합니다.
IAudioClient 클라이언트가 오디오 애플리케이션과 오디오 엔진 또는 오디오 엔드포인트 디바이스의 하드웨어 버퍼 간에 오디오 스트림을 만들고 초기화할 수 있도록 합니다.
IAudioClock 클라이언트가 스트림의 데이터 속도 및 스트림의 현재 위치를 모니터링할 수 있도록 합니다.
IAudioRenderClient 클라이언트가 렌더링 엔드포인트 버퍼에 출력 데이터를 쓸 수 있도록 합니다.
IAudioSessionControl 클라이언트가 오디오 세션에 대한 컨트롤 매개 변수를 구성하고 세션의 이벤트를 모니터링할 수 있도록 합니다.
IAudioSessionManager 클라이언트가 크로스 프로세스 및 프로세스별 오디오 세션 모두에 대한 세션 컨트롤 및 볼륨 컨트롤에 액세스할 수 있도록 합니다.
IAudioStreamVolume 클라이언트가 오디오 스트림의 모든 채널에 대한 볼륨 수준을 제어하고 모니터링할 수 있도록 합니다.
IChannelAudioVolume 클라이언트가 스트림이 속한 오디오 세션의 모든 채널에 대한 볼륨 수준을 제어할 수 있도록 합니다.
ISimpleAudioVolume 클라이언트가 오디오 세션의 master 볼륨 수준을 제어할 수 있도록 합니다.

 

세션 관련 이벤트에 대한 알림이 필요한 WASAPI 클라이언트는 다음 인터페이스를 구현해야 합니다.

인터페이스 설명
IAudioSessionEvents 볼륨 수준 변경, 표시 이름 및 세션 상태와 같은 세션 관련 이벤트에 대한 알림을 제공합니다.

 

스트림 관리

프로그래밍 참조