오디오 디바이스 열거

클라이언트 오디오 애플리케이션의 첫 번째 작업은 사용할 적절한 오디오 디바이스를 찾는 것입니다. MMDevice API를 사용하면 클라이언트가 시스템의 오디오 엔드포인트 디바이스를 검색하고 애플리케이션에서 사용하기에 적합한 디바이스를 결정할 수 있습니다. 이 API를 사용하면 클라이언트가 사용 가능한 엔드포인트 디바이스의 컬렉션을 검색하고 각 디바이스의 기능을 가져올 수 있습니다. 헤더 파일 Mmdeviceapi.h는 MMDevice API의 인터페이스를 정의합니다.

오디오 어댑터에는 여러 디바이스(예: 웨이브 렌더링 디바이스 및 웨이브 캡처 디바이스)가 포함될 수 있습니다. 이러한 디바이스는 엔드포인트 디바이스가 아닌 어댑터 디바이스입니다. 앞에서 설명한 대로 어댑터 디바이스는 엔드포인트 관리자에 의해 등록된 엔드포인트 디바이스와 달리 플러그 앤 플레이 관리자에 의해 등록됩니다. 각 어댑터 디바이스는 일반적으로 하나 이상의 엔드포인트 디바이스를 지원합니다. 렌더링 엔드포인트 디바이스(예: 헤드폰)는 클라이언트 애플리케이션에서 오디오 데이터 스트림을 수신할 수 있으며 캡처 엔드포인트 디바이스(예: 마이크)는 오디오 스트림을 클라이언트 애플리케이션으로 보낼 수 있습니다.

시스템에서 엔드포인트 디바이스를 열거하기 전에 클라이언트는 먼저 Windows CoCreateInstance 함수를 호출하여 디바이스 열거자를 만들어야 합니다. 디바이스 열거자는 IMMDeviceEnumerator 인터페이스가 있는 개체입니다. CoCreateInstance에 대한 자세한 내용은 Windows SDK 설명서를 참조하세요.

클라이언트는 IMMDeviceEnumerator::EnumAudioEndpoints 메서드를 호출하여 엔드포인트 개체의 컬렉션을 만듭니다. 각 엔드포인트 개체는 시스템의 오디오 엔드포인트 디바이스를 나타냅니다. 이 호출에서 클라이언트는 컬렉션에 시스템의 모든 렌더링 디바이스, 모든 캡처 디바이스 또는 둘 다를 포함해야 하는지 여부를 지정합니다.

디바이스 컬렉션은 IMMDeviceCollection 인터페이스가 있는 개체입니다. 디바이스 컬렉션의 각 항목은 적어도 다음 두 인터페이스가 있는 엔드포인트 개체입니다.

  • IMMDevice 인터페이스입니다. 클라이언트는 IMMDeviceCollection ::Item 메서드를 호출하여 디바이스 컬렉션에 있는 엔드포인트 개체의 IMMDevice 인터페이스에 대한 참조를 가져옵니다.
  • IMMEndpoint 인터페이스입니다. 클라이언트는 IMMDevice::QueryInterface 메서드를 호출하여 엔드포인트 개체의 IMMEndpoint 인터페이스에 대한 참조를 가져옵니다.

엔드포인트 디바이스의 컬렉션을 검색한 후 클라이언트는 컬렉션에 있는 개별 디바이스의 속성을 쿼리하여 사용 적합성을 확인할 수 있습니다. 엔드포인트 디바이스를 열거하고 해당 속성을 쿼리하는 방법을 보여 주는 코드 예제는 디바이스 속성을 참조하세요.

적합한 디바이스를 선택한 후 클라이언트는 IMMDevice::Activate 메서드를 호출하여 WASAPI, DeviceTopology APIEndpointVolume API에서 디바이스별 인터페이스를 활성화할 수 있습니다.

오디오 엔드포인트 디바이스