Перечисление звуковых устройств

Первая задача клиентского звукового приложения — найти подходящее звуковое устройство для использования. API MMDevice позволяет клиентам обнаруживать устройства конечной точки звука в системе и определять, какие устройства подходят для использования приложения. Этот API позволяет клиентам получать коллекции доступных конечных точек и получать возможности каждого устройства. Файл заголовка Mmdeviceapi.h определяет интерфейсы в API MMDevice.

Аудиоадаптер может содержать несколько устройств, например устройство отрисовки волн и устройство захвата волн. Это устройства адаптера, а не конечные устройства. Как упоминание ранее, устройства адаптеров регистрируются диспетчером самонастраивающийся, в отличие от устройств конечных точек, зарегистрированных диспетчером конечных точек. Каждое устройство адаптера обычно поддерживает одно или несколько конечных точек. Устройство конечной точки отрисовки (например, наушники) может получать поток звуковых данных из клиентского приложения, а устройство конечной точки записи (например, микрофон) может отправлять аудиопоток в клиентское приложение.

Перед перечислением устройств конечных точек в системе клиент должен сначала вызвать функцию Windows CoCreateInstance , чтобы создать перечислитель устройств. Перечислитель устройств — это объект с интерфейсом IMMDeviceEnumerator . Сведения о CoCreateInstance см. в документации по пакету SDK для Windows.

Клиент вызывает метод IMMDeviceEnumerator::EnumAudioEndpoints для создания коллекции объектов конечной точки. Каждый объект конечной точки представляет устройство аудио конечной точки в системе. В этом вызове клиент указывает, должна ли коллекция содержать все устройства отрисовки в системе, все устройства записи или оба.

Коллекция устройств — это объект с интерфейсом IMMDeviceCollection . Каждый элемент в коллекции устройств — это объект конечной точки по крайней мере с двумя следующими интерфейсами:

После получения коллекции конечных точек клиент может запрашивать свойства отдельных устройств в коллекции, чтобы определить их пригодность для использования. Пример кода, демонстрирующий перечисление устройств конечных точек и запрос их свойств, см. в разделе "Свойства устройства".

Выбрав подходящее устройство, клиент может вызвать метод IMMDevice::Activate для активации интерфейсов, относящихся к устройству, в WASAPI, API DeviceTopology и API EndpointVolume.

Устройства аудиоконечной точки