Utilisation d’un appareil de communication

Dans Windows 7, le panneau de configuration multimédia Windows, Mmsys.cpl, fournit un nouvel onglet Communications . Cet onglet contient des options qui permettent à un utilisateur de définir des options qui définissent la façon dont le système gère un appareil de communication. Un appareil de communication est principalement utilisé pour passer ou recevoir des appels téléphoniques sur l’ordinateur. Pour un ordinateur qui n’a qu’un seul périphérique de rendu (haut-parleur) et un seul périphérique de capture (microphone), ces périphériques audio agissent également en tant que périphériques de communication par défaut. Lorsqu’un utilisateur connecte un nouvel appareil, tel qu’un casque USB, le système effectue la détection automatique des rôles d’appareil en recherchant les paramètres de configuration qui sont renseignés par l’OEM. Si le système détermine qu’un appareil est le mieux adapté à des fins de communication, le système lui attribue le rôle eCommunications . Pour ces appareils, le Mmsys.cpl Windows 7 fournit l’option Périphérique de communication par défaut qui permet à un utilisateur de sélectionner un périphérique de communication pour le rendu audio (onglet Lecture ) et la capture audio (onglet Enregistrement ). Le système effectue la détection automatique des rôles, mais ne définit pas un appareil particulier à utiliser pour les communications. Cette opération doit être effectuée par l’utilisateur. Le nouveau rôle eCommunications permet à une application de faire la distinction entre un appareil choisi par l’utilisateur pour gérer les appels téléphoniques et un appareil à utiliser comme appareil multimédia (lecture de musique). Par exemple, si l’utilisateur a un casque et un haut-parleur connectés à l’ordinateur, le système attribue le rôle eConsole au haut-parleur et le rôle eCommunications au casque. Une fois que l’utilisateur a sélectionné le casque à utiliser comme périphérique de communication, pour développer une application de communication, vous pouvez cibler le casque spécifiquement pour le rendu d’un flux audio. Application que l’utilisateur ne peut pas modifier le rôle d’appareil attribué par le système. Pour plus d’informations sur les rôles d’appareil, consultez Rôles d’appareil.

Les applications de communication, telles que voIP et les applications de communication unifiée, passent et reçoivent des appels téléphoniques via un ordinateur. Par exemple, une application VoIP peut affecter un flux qui contient la notification en anneau au point de terminaison d’un appareil de communication défini pour le rendu des flux audio. En outre, l’application peut ouvrir les flux d’entrée et de sortie vocales sur les appareils de point de terminaison de capture et de rendu qui sont définis en tant que périphériques de communication.

Pour intégrer des fonctionnalités de communication dans vos applications, vous pouvez utiliser :

  • API MMDevice : pour obtenir une référence au point de terminaison du périphérique de communication.
  • WASAPI : pour afficher et capturer des flux audio via l’appareil de communication. Le système d’exploitation considère le flux ouvert sur un appareil de communication comme un flux de communication.

L’application de communication énumère les appareils et fournit la gestion de flux pour un flux de communication (rendu ou capture) de la même manière qu’elle gérerait un flux sans communication à l’aide des API Audio principales.

L’une des fonctionnalités que vous pouvez intégrer dans votre application de communication est l’atténuation de flux ou de canardage. Ce comportement définit ce qui doit arriver à d’autres sons lorsqu’un flux de communication est ouvert, par exemple lorsqu’un appel téléphonique est reçu sur l’appareil de communication. Le système peut désactiver ou réduire le volume audio du flux sans communication en fonction du choix de l’utilisateur. Le système audio génère des événements de canardage lorsqu’un flux de communication est ouvert ou fermé pour le rendu ou la capture de flux. Par défaut, le système d’exploitation offre une expérience de canardage par défaut. Une application multimédia peut remplacer le comportement par défaut et gérer ces événements elle-même pour fournir une expérience de canardage personnalisée.

Les sections suivantes décrivent comment utiliser les API Core Audio pour fournir une expérience de canardage personnalisée.

Obtention d’une référence au point de terminaison d’appareil de communication

Pour utiliser l’appareil de communication, un client WASAPI direct doit énumérer les appareils à l’aide de l’énumérateur d’appareil. Obtenez une référence au point de terminaison du périphérique de communication par défaut en appelant IMMDeviceEnumerator::GetDefaultAudioEndpoint. Dans cet appel, l’application doit spécifier eCommunications dans le paramètre Role pour limiter l’énumération d’appareil aux appareils de communication. Une fois que vous avez obtenu une référence au point de terminaison de l’appareil, vous pouvez activer les services qui sont délimités pour le point de terminaison en appelant IMMDevice::Activate. Par exemple, vous pouvez passer l’identificateur de service IID_IAudioClient pour activer un objet client audio et l’utiliser pour la gestion des flux, l’identificateur de IID_IAudioEndpointVolume pour accéder aux contrôles de volume du point de terminaison de l’appareil de communication ou l’identificateur de IID_IAudioSessionManager pour activer le gestionnaire de session qui vous permet d’interagir avec le moteur de stratégie du point de terminaison. Pour plus d’informations sur les opérations de flux, consultez Gestion des flux.

En utilisant la référence IMMDevice , vous pouvez également accéder au magasin de propriétés pour le point de terminaison de l’appareil. Ces valeurs de propriété, telles que le nom convivial de l’appareil et le nom du fabricant, sont renseignées par l’OEM et permettent à une application de déterminer les caractéristiques d’un appareil de communication. Pour plus d’informations, consultez Propriétés de l’appareil.

L’exemple de code suivant obtient une référence au point de terminaison du périphérique de communication par défaut pour le rendu d’un flux audio.

IMMDevice *defaultDevice = NULL;

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

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

Gestion des flux