스트림 관리
시스템에서 오디오 엔드포인트 디바이스 를 열거하고 적절한 렌더링 또는 캡처 디바이스를 식별한 후 오디오 클라이언트 애플리케이션의 다음 작업은 엔드포인트 디바이스와의 연결을 열고 해당 연결을 통해 오디오 데이터의 흐름을 관리하는 것입니다. WASAPI 를 사용하면 클라이언트가 오디오 스트림을 만들고 관리할 수 있습니다.
WASAPI는 오디오 클라이언트에 스트림 관리 서비스를 제공하는 여러 인터페이스를 구현합니다. 기본 인터페이스는 IAudioClient입니다. 클라이언트는 엔드포인트 개체에서 IMMDevice::Activate 메서드(매개 변수 iid가 REFIID IID_IAudioClient 설정됨)를 호출하여 오디오 엔드포인트 디바이스에 대한 IAudioClient 인터페이스를 가져옵니다.
클라이언트는 IAudioClient 인터페이스에서 메서드를 호출하여 다음을 수행합니다.
- 엔드포인트 디바이스에서 지원하는 오디오 형식을 검색합니다.
- 엔드포인트 버퍼 크기를 가져옵니다.
- 스트림 형식 및 대기 시간을 가져옵니다.
- 엔드포인트 디바이스를 통해 흐르는 스트림을 시작, 중지 및 다시 설정합니다.
- 추가 오디오 서비스에 액세스합니다.
스트림을 만들기 위해 클라이언트는 IAudioClient::Initialize 메서드를 호출합니다. 이 메서드를 통해 클라이언트는 스트림의 데이터 형식, 엔드포인트 버퍼의 크기 및 스트림이 공유 모드 또는 배타적 모드에서 작동하는지 여부를 지정합니다.
IAudioClient 인터페이스의 나머지 메서드는 다음 두 그룹에 속합니다.
- IAudioClient::Initialize에서 스트림을 연 후에만 호출할 수 있는 메서드입니다.
- Initialize 호출 전후에 언제든지 호출할 수 있는 메서드입니다.
다음 메서드는 IAudioClient::Initialize를 호출한 후에만 호출할 수 있습니다.
- IAudioClient::GetBufferSize
- IAudioClient::GetCurrentPadding
- IAudioClient::GetService
- IAudioClient::GetStreamLatency
- IAudioClient::Reset
- IAudioClient::Start
- IAudioClient::Stop
IAudioClient::Initialize 호출 전후에 다음 메서드를 호출할 수 있습니다.
추가 오디오 클라이언트 서비스에 액세스하기 위해 클라이언트는 IAudioClient::GetService 메서드를 호출합니다. 이 메서드를 통해 클라이언트는 다음 인터페이스에 대한 참조를 가져올 수 있습니다.
-
렌더링 데이터를 오디오 렌더링 엔드포인트 버퍼에 씁니다.
-
오디오 캡처 엔드포인트 버퍼에서 캡처된 데이터를 읽습니다.
-
오디오 세션 관리자와 통신하여 스트림과 연결된 오디오 세션을 구성하고 관리합니다.
-
스트림과 연결된 오디오 세션의 볼륨 수준을 제어합니다.
-
스트림과 연결된 오디오 세션에서 개별 채널의 볼륨 수준을 제어합니다.
-
스트림 데이터 속도 및 스트림 위치를 모니터링합니다.
또한 세션 관련 이벤트에 대한 알림이 필요한 WASAPI 클라이언트는 다음 인터페이스를 구현해야 합니다.
-
이벤트 알림을 수신하기 위해 클라이언트는 IAudioSessionEvents 인터페이스에 대한 포인터를 IAudioSessionControl::RegisterAudioSessionNotification 메서드에 호출 매개 변수로 전달합니다.
마지막으로 클라이언트는 더 높은 수준의 API를 사용하여 오디오 스트림을 만들 수 있지만 스트림이 포함된 세션의 세션 컨트롤 및 볼륨 컨트롤에 대한 액세스 권한도 요구할 수 있습니다. 상위 수준 API는 일반적으로 이 액세스를 제공하지 않습니다. 클라이언트는 IAudioSessionManager 인터페이스를 통해 특정 세션에 대한 컨트롤을 가져올 수 있습니다. 이 인터페이스를 사용하면 클라이언트가 IAudioClient 인터페이스를 사용하여 스트림을 만들고 세션에 스트림을 할당할 필요 없이 클라이언트가 세션에 대한 IAudioSessionControl 및 ISimpleAudioVolume 인터페이스를 가져올 수 있습니다. 클라이언트는 엔드포인트 개체에서 IMMDevice::Activate 메서드(매개 변수 iid가 REFIID IID_IAudioSessionManager 설정됨)를 호출하여 오디오 엔드포인트 디바이스에 대한 IAudioSessionManager 인터페이스를 가져옵니다.
IAudioSessionControl, IAudioSessionEvents 및 IAudioSessionManager 인터페이스는 헤더 파일 Audiopolicy.h에 정의되어 있습니다. 다른 모든 WASAPI 인터페이스는 헤더 파일 Audioclient.h에 정의되어 있습니다.
다음 섹션에서는 WASAPI를 사용하여 오디오 스트림을 관리하는 방법을 설명합니다.
관련 항목