Enumeración de dispositivos de audio

La primera tarea de una aplicación de audio cliente es buscar un dispositivo de audio adecuado que se va a usar. La API MMDevice permite a los clientes detectar los dispositivos de punto de conexión de audio en el sistema y determinar qué dispositivos son adecuados para que la aplicación la use. Esta API permite a los clientes recuperar colecciones de los dispositivos de punto de conexión disponibles y obtener las funcionalidades de cada dispositivo. El archivo de encabezado Mmdeviceapi.h define las interfaces de la API MMDevice.

Un adaptador de audio puede contener varios dispositivos, por ejemplo, un dispositivo de representación de ondas y un dispositivo de captura de onda. Estos son dispositivos de adaptador en lugar de dispositivos de punto de conexión. Como se mencionó anteriormente, el administrador de Plug and Play registra los dispositivos adaptadores, en contraste con los dispositivos de punto de conexión, que el administrador de puntos de conexión registra. Normalmente, cada dispositivo de adaptador admite uno o varios dispositivos de punto de conexión. Un dispositivo de punto de conexión de representación (por ejemplo, auriculares) puede recibir una secuencia de datos de audio de una aplicación cliente y un dispositivo de punto de conexión de captura (por ejemplo, un micrófono) puede enviar una secuencia de audio a una aplicación cliente.

Antes de enumerar los dispositivos de punto de conexión en el sistema, el cliente primero debe llamar a la función Windows CoCreateInstance para crear un enumerador de dispositivos. Un enumerador de dispositivos es un objeto con una interfaz IMMDeviceEnumerator . Para obtener información sobre CoCreateInstance, consulte la documentación de Windows SDK.

El cliente llama al método IMMDeviceEnumerator::EnumAudioEndpoints para crear una colección de objetos de punto de conexión. Cada objeto de punto de conexión representa un dispositivo de punto de conexión de audio en el sistema. En esta llamada, el cliente especifica si la colección debe contener todos los dispositivos de representación en el sistema, todos los dispositivos de captura o ambos.

Una colección de dispositivos es un objeto con una interfaz IMMDeviceCollection . Cada elemento de una colección de dispositivos es un objeto de punto de conexión con al menos las dos interfaces siguientes:

  • Interfaz IMMDevice . Un cliente obtiene una referencia a la interfaz IMMDevice de un objeto de punto de conexión de una colección de dispositivos llamando al método IMMDeviceCollection::Item .
  • Interfaz IMMEndpoint . Un cliente obtiene una referencia a la interfaz IMMEndpoint de un objeto de punto de conexión llamando al método IMMDevice::QueryInterface .

Después de recuperar una colección de dispositivos de punto de conexión, el cliente puede consultar las propiedades de los dispositivos individuales de la colección para determinar su idoneidad para su uso. Para obtener un ejemplo de código que muestra cómo enumerar los dispositivos de punto de conexión y consultar sus propiedades, consulte Propiedades del dispositivo.

Después de seleccionar un dispositivo adecuado, el cliente puede llamar al método IMMDevice::Activate para activar las interfaces específicas del dispositivo en WASAPI, deviceTopology API y endpointVolume API.

Dispositivos de punto de conexión de audio