스트림 관리

시스템에서 오디오 엔드포인트 디바이스 를 열거하고 적절한 렌더링 또는 캡처 디바이스를 식별한 후 오디오 클라이언트 애플리케이션의 다음 작업은 엔드포인트 디바이스와의 연결을 열고 해당 연결을 통해 오디오 데이터의 흐름을 관리하는 것입니다. WASAPI 를 사용하면 클라이언트가 오디오 스트림을 만들고 관리할 수 있습니다.

WASAPI는 오디오 클라이언트에 스트림 관리 서비스를 제공하는 여러 인터페이스를 구현합니다. 기본 인터페이스는 IAudioClient입니다. 클라이언트는 엔드포인트 개체에서 IMMDevice::Activate 메서드(매개 변수 iidREFIID IID_IAudioClient 설정됨)를 호출하여 오디오 엔드포인트 디바이스에 대한 IAudioClient 인터페이스를 가져옵니다.

클라이언트는 IAudioClient 인터페이스에서 메서드를 호출하여 다음을 수행합니다.

  • 엔드포인트 디바이스에서 지원하는 오디오 형식을 검색합니다.
  • 엔드포인트 버퍼 크기를 가져옵니다.
  • 스트림 형식 및 대기 시간을 가져옵니다.
  • 엔드포인트 디바이스를 통해 흐르는 스트림을 시작, 중지 및 다시 설정합니다.
  • 추가 오디오 서비스에 액세스합니다.

스트림을 만들기 위해 클라이언트는 IAudioClient::Initialize 메서드를 호출합니다. 이 메서드를 통해 클라이언트는 스트림의 데이터 형식, 엔드포인트 버퍼의 크기 및 스트림이 공유 모드 또는 배타적 모드에서 작동하는지 여부를 지정합니다.

IAudioClient 인터페이스의 나머지 메서드는 다음 두 그룹에 속합니다.

  • IAudioClient::Initialize에서 스트림을 연 후에만 호출할 수 있는 메서드입니다.
  • Initialize 호출 전후에 언제든지 호출할 수 있는 메서드입니다.

다음 메서드는 IAudioClient::Initialize를 호출한 후에만 호출할 수 있습니다.

IAudioClient::Initialize 호출 전후에 다음 메서드를 호출할 수 있습니다.

추가 오디오 클라이언트 서비스에 액세스하기 위해 클라이언트는 IAudioClient::GetService 메서드를 호출합니다. 이 메서드를 통해 클라이언트는 다음 인터페이스에 대한 참조를 가져올 수 있습니다.

  • IAudioRenderClient

    렌더링 데이터를 오디오 렌더링 엔드포인트 버퍼에 씁니다.

  • IAudioCaptureClient

    오디오 캡처 엔드포인트 버퍼에서 캡처된 데이터를 읽습니다.

  • IAudioSessionControl

    오디오 세션 관리자와 통신하여 스트림과 연결된 오디오 세션을 구성하고 관리합니다.

  • ISimpleAudioVolume

    스트림과 연결된 오디오 세션의 볼륨 수준을 제어합니다.

  • IChannelAudioVolume

    스트림과 연결된 오디오 세션에서 개별 채널의 볼륨 수준을 제어합니다.

  • IAudioClock

    스트림 데이터 속도 및 스트림 위치를 모니터링합니다.

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

마지막으로 클라이언트는 더 높은 수준의 API를 사용하여 오디오 스트림을 만들 수 있지만 스트림이 포함된 세션의 세션 컨트롤 및 볼륨 컨트롤에 대한 액세스 권한도 요구할 수 있습니다. 상위 수준 API는 일반적으로 이 액세스를 제공하지 않습니다. 클라이언트는 IAudioSessionManager 인터페이스를 통해 특정 세션에 대한 컨트롤을 가져올 수 있습니다. 이 인터페이스를 사용하면 클라이언트가 IAudioClient 인터페이스를 사용하여 스트림을 만들고 세션에 스트림을 할당할 필요 없이 클라이언트가 세션에 대한 IAudioSessionControlISimpleAudioVolume 인터페이스를 가져올 수 있습니다. 클라이언트는 엔드포인트 개체에서 IMMDevice::Activate 메서드(매개 변수 iidREFIID IID_IAudioSessionManager 설정됨)를 호출하여 오디오 엔드포인트 디바이스에 대한 IAudioSessionManager 인터페이스를 가져옵니다.

IAudioSessionControl, IAudioSessionEventsIAudioSessionManager 인터페이스는 헤더 파일 Audiopolicy.h에 정의되어 있습니다. 다른 모든 WASAPI 인터페이스는 헤더 파일 Audioclient.h에 정의되어 있습니다.

다음 섹션에서는 WASAPI를 사용하여 오디오 스트림을 관리하는 방법을 설명합니다.

프로그래밍 가이드