Compartilhar via


Usando um dispositivo de comunicação

No Windows 7, o painel de controle multimídia do Windows, Mmsys.cpl, fornece uma nova guia Comunicações. Essa guia contém opções que permitem que um usuário defina opções que definem como o sistema gerencia um dispositivo de comunicação. Um dispositivo de comunicação é usado principalmente para fazer ou receber chamadas telefônicas no computador. Para um computador que tem apenas um dispositivo de renderização (alto-falante) e um dispositivo de captura (microfone), esses dispositivos de áudio também atuam como dispositivos de comunicação padrão. Quando um usuário conecta um novo dispositivo, como um fone de ouvido USB, o sistema executa a detecção automática de função do dispositivo pesquisando as definições de configuração preenchidas pelo OEM. Se o sistema determinar que um dispositivo é mais adequado para fins de comunicação, o sistema atribui a função de comunicações eletrônicas ao dispositivo. Para esses dispositivos, o Mmsys.cpl do Windows 7 fornece a opção Dispositivo de comunicação padrão que permite que um usuário selecione um dispositivo de comunicação para renderização de áudio (guia Reprodução) e captura de áudio (guia Gravação). O sistema executa a detecção automática de função, mas não define um dispositivo específico a ser usado para comunicações. Isso deve ser feito pelo usuário. A nova função de eCommunications permite que um aplicativo distinga entre um dispositivo escolhido pelo usuário para lidar com chamadas telefônicas e um dispositivo a ser usado como um dispositivo multimídia (reprodução de música). Por exemplo, se o usuário tiver um fone de ouvido e um alto-falante conectados ao computador, o sistema atribuirá a função eConsole ao alto-falante e a função de eCommunications ao fone de ouvido. Depois que o usuário seleciona o fone de ouvido a ser usado como dispositivo de comunicação, para desenvolver um aplicativo de comunicação, você pode direcionar o fone de ouvido especificamente para renderizar um fluxo de áudio. Um aplicativo que o usuário não pode alterar a função de dispositivo atribuída pelo sistema. Para obter mais informações sobre funções de dispositivo, consulte Funções de dispositivo.

Aplicativos de comunicação, como VoIP e aplicativos de Comunicação Unificada, fazem e recebem chamadas telefônicas por meio de um computador. Por exemplo, um aplicativo VoIP pode atribuir um fluxo que contém a notificação de toque ao ponto de extremidade de um dispositivo de comunicação definido para renderizar fluxos de áudio. Além disso, o aplicativo pode abrir os fluxos de entrada e saída de voz nos dispositivos de ponto de extremidade de captura e renderização definidos como dispositivos de comunicação.

Para integrar recursos de comunicação em seus aplicativos, você pode usar:

  • API MMDevice — para obter uma referência ao ponto de extremidade do dispositivo de comunicação.
  • WASAPI — para renderizar e capturar fluxos de áudio por meio do dispositivo de comunicação. O sistema operacional considera o fluxo aberto em um dispositivo de comunicação como um fluxo de comunicação.

O aplicativo de comunicação enumera dispositivos e fornece gerenciamento de fluxo para um fluxo de fluxo de comunicação (renderização ou captura) da mesma maneira que gerenciaria um fluxo de não comunicação usando as APIs de áudio principal.

Um dos recursos que você pode integrar em seu aplicativo de comunicação é ducking ou atenuação de fluxo. Esse comportamento define o que deve acontecer com outros sons quando um fluxo de comunicação é aberto, como quando uma chamada telefônica é recebida no dispositivo de comunicação. O sistema pode silenciar ou diminuir o volume de áudio do fluxo de não comunicação, dependendo da escolha do usuário. O sistema de áudio gera eventos de fuga quando um fluxo de comunicação é aberto ou fechado para renderizar ou capturar fluxos. Por padrão, o sistema operacional fornece uma experiência de ducking padrão. Um aplicativo de mídia pode substituir o comportamento padrão e manipular esses eventos para fornecer uma experiência de ducking personalizada.

As seções a seguir descrevem como usar as APIs de áudio principal para fornecer uma experiência de ducking personalizada.

Obtendo uma referência ao ponto de extremidade do dispositivo de comunicação

Para usar o dispositivo de comunicação, um cliente WASAPI direto deve enumerar os dispositivos usando o enumerador de dispositivos. Obtenha uma referência ao ponto de extremidade do dispositivo de comunicação padrão chamando IMMDeviceEnumerator::GetDefaultAudioEndpoint. Nessa chamada, o aplicativo deve especificar eCommunications no parâmetro Role para restringir a enumeração de dispositivos a dispositivos de comunicação. Depois de obter uma referência ao ponto de extremidade do dispositivo para o dispositivo, você pode ativar os serviços que têm escopo para o ponto de extremidade chamando IMMDevice::Activate. Por exemplo, você pode passar o identificador de serviço IID_IAudioClient para ativar um objeto de cliente de áudio e usá-lo para gerenciamento de fluxo, o identificador de IID_IAudioEndpointVolume para obter acesso aos controles de volume do ponto de extremidade do dispositivo de comunicação ou o identificador de IID_IAudioSessionManager para ativar o gerenciador de sessão que permite interagir com o mecanismo de política do ponto de extremidade. Para obter informações sobre operações de fluxo, consulte Gerenciamento de fluxo.

Usando a referência IMMDevice , você também pode acessar o repositório de propriedades para o ponto de extremidade do dispositivo. Esses valores de propriedade, como nome amigável do dispositivo e nome do fabricante, são preenchidos pelo OEM e permitem que um aplicativo determine as características de um dispositivo de comunicação. Para obter mais informações, consulte Propriedades do dispositivo.

O código de exemplo a seguir obtém uma referência ao ponto de extremidade do dispositivo de comunicação padrão para renderizar um fluxo de áudio.

IMMDevice *defaultDevice = NULL;

hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,
            CLSCTX_INPROC_SERVER, 
            __uuidof(IMMDeviceEnumerator), 
            (LPVOID *)&deviceEnumerator);

hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, 
            eCommunications, &defaultDevice);

Gerenciamento de fluxo