Enumerando dispositivos de áudio
A primeira tarefa de um aplicativo de áudio cliente é encontrar um dispositivo de áudio adequado para usar. A API MMDevice permite que os clientes descubram os dispositivos de ponto de extremidade de áudio no sistema e determinem quais dispositivos são adequados para o aplicativo usar. Essa API permite que os clientes recuperem coleções dos dispositivos de ponto de extremidade disponíveis e obtenham os recursos de cada dispositivo. O arquivo de cabeçalho Mmdeviceapi.h define as interfaces na API MMDevice.
Um adaptador de áudio pode conter vários dispositivos, por exemplo, um dispositivo de renderização de ondas e um dispositivo de captura de ondas. Estes são dispositivos adaptadores em vez de dispositivos de ponto de extremidade. Como mencionado anteriormente, os dispositivos adaptadores são registrados pelo gerenciador Plug and Play, em contraste com os dispositivos de ponto de extremidade, que são registrados pelo gerenciador de endpoint. Cada dispositivo adaptador normalmente oferece suporte a um ou mais dispositivos de ponto de extremidade. Um dispositivo de ponto de extremidade de renderização (por exemplo, fones de ouvido) pode receber um fluxo de dados de áudio de um aplicativo cliente, e um dispositivo de ponto de extremidade de captura (por exemplo, um microfone) pode enviar um fluxo de áudio para um aplicativo cliente.
Antes de enumerar os dispositivos de ponto de extremidade no sistema, o cliente deve primeiro chamar a função CoCreateInstance do Windows para criar um enumerador de dispositivo. Um enumerador de dispositivo é um objeto com uma interface IMMDeviceEnumerator. Para obter informações sobre CoCreateInstance, consulte a documentação do SDK do Windows.
O cliente chama o método IMMDeviceEnumerator::EnumAudioEndpoints para criar uma coleção de objetos de ponto de extremidade. Cada objeto de ponto de extremidade representa um dispositivo de ponto de extremidade de áudio no sistema. Nessa chamada, o cliente especifica se a coleção deve conter todos os dispositivos de renderização no sistema, todos os dispositivos de captura ou ambos.
Uma coleção de dispositivos é um objeto com uma interface IMMDeviceCollection. Cada item em uma coleção de dispositivos é um objeto de ponto de extremidade com pelo menos as duas interfaces a seguir:
- Uma interface IMMDevice. Um cliente obtém uma referência à interface IMMDevice de um objeto de ponto de extremidade em uma coleção de dispositivos chamando o método IMMDeviceCollection::Item.
- Uma interface IMMEndpoint. Um cliente obtém uma referência à interface IMMEndpoint de um objeto de ponto de extremidade chamando o método IMMDevice::QueryInterface.
Depois de recuperar uma coleção de dispositivos de ponto de extremidade, o cliente pode consultar as propriedades dos dispositivos individuais na coleção para determinar sua adequação para uso. Para obter um exemplo de código que mostra como enumerar dispositivos de ponto de extremidade e consultar suas propriedades, consulte Propriedades do dispositivo.
Depois de selecionar um dispositivo adequado, o cliente pode chamar o método IMMDevice::Activate para ativar as interfaces específicas do dispositivo no WASAPI, a API DeviceTopology e a API EndpointVolume.
Tópicos relacionados