Partilhar 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. Esta 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 tenha apenas um dispositivo de renderização (alto-falante) e um dispositivo de captura (microfone), esses dispositivos de áudio também atuam como os dispositivos de comunicação padrão. Quando um usuário conecta um novo dispositivo, como um fone de ouvido USB, o sistema executa a deteção automática de função do dispositivo pesquisando as definições de configuração que sã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 de Dispositivo de Comunicação Padrão que permite ao usuário selecionar um dispositivo de comunicação cada um para renderização de áudio (guiade reprodução de) e captura de áudio (guiade gravação de). O sistema executa a deteção automática de funções, mas não define um dispositivo específico para ser usado para comunicações. Isso deve ser feito pelo usuário. A nova função eCommunications permite que uma aplicação distinga entre um dispositivo escolhido pelo utilizador para tratar chamadas telefónicas e um dispositivo para ser utilizado como dispositivo multimédia (reprodução de música). Por exemplo, se o utilizador tiver um auricular e um altifalante ligados ao computador, o sistema atribui a função eConsole ao altifalante e a função eCommunications ao auricular. 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. O utilizador de uma aplicação não pode alterar a função do dispositivo atribuída pelo sistema. Para obter mais informações sobre funções de dispositivo, consulte funções de dispositivo.

As aplicações de comunicação, como as aplicações VoIP e de Comunicação Unificada, efetuam e recebem chamadas telefónicas através de um computador. Por exemplo, uma aplicação VoIP pode atribuir um fluxo que contém a notificação de toque de chamada ao endpoint de um dispositivo de comunicação configurado para renderizar fluxos de áudio. Além disso, a aplicação pode abrir os fluxos de entrada e saída de voz nos dispositivos de captação e de reprodução que estão definidos como dispositivos de comunicação.

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

  • da API MMDevice — para obter uma referência ao endpoint do dispositivo de comunicação.
  • WASAPI— para renderizar e capturar fluxos de áudio através 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 comunicação (renderização ou captura) da mesma maneira que gerenciaria um fluxo que não fosse de comunicação usando as APIs de áudio principal.

Um dos recursos que pode integrar na sua aplicação de comunicação é redução de volume ou atenuação de áudio. 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 desvio quando um fluxo de comunicação é aberto ou fechado para renderização ou captura de fluxos. Por padrão, o sistema operacional fornece uma experiência de ducking padrão. Uma aplicação de media pode substituir o comportamento padrão e tratar estes eventos diretamente para fornecer uma experiência de atenuação de áudio personalizada.

As seções a seguir descrevem como usar as APIs Core Audio para proporcionar 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 dispositivo. Obtenha uma referência ao ponto de extremidade do dispositivo de comunicação padrão chamando IMMDeviceEnumerator::GetDefaultAudioEndpoint. Nesta 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 de um dispositivo, pode-se ativar os serviços associados ao 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 Stream Management.

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);

Gestão de Fluxos de Dados