다음을 통해 공유


오디오 디바이스 열거

클라이언트 오디오 애플리케이션의 첫 번째 작업은 사용할 적절한 오디오 디바이스를 찾는 것입니다. 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디바이스별 인터페이스를 활성화할 수 있습니다.

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