Notifications pertinentes pour le routage de flux
Dans Windows 7, les API de plateforme de haut niveau qui utilisent les API Audio de base, telles que Media Foundation, DirectSound et Wave, implémentent la fonctionnalité de routage de flux en gérant le basculement de flux d’un appareil existant vers un nouveau point de terminaison audio par défaut. Les applications multimédias qui utilisent ces API utilisent le comportement de routage de flux sans aucune modification de la source. Les clients WASAPI directs peuvent utiliser les notifications envoyées par les composants Audio core et implémenter la fonctionnalité de routage de flux.
Pour implémenter la fonctionnalité de routage de flux, un client doit écouter deux types d’événements : les notifications de modification d’appareil et les notifications de déconnexion de session. Dans l’implémentation fournie par les API de haut niveau, ces événements sont envoyés pour les points de terminaison d’appareil par défaut créés en appelant IMMDeviceEnumerator::GetDefaultAudioEndpoint. Pour plus d’informations, consultez Obtention du point de terminaison d’appareil pour le routage de flux.
Le composant Audio principal MMDeviceAPI fournit des rappels de notification lorsque des périphériques audio sont ajoutés, supprimés ou modifiés. Les modifications de format et de session audio sont signalées en tant qu’événements via WASAPI.
Notifications de modification d’appareil
MMDeviceAPI déclenche des événements lorsque des périphériques audio sont ajoutés, supprimés ou modifiés. Si le client doit fournir une fonctionnalité de routage de flux, il doit implémenter l’interface IMMNotificationClient et inscrire son implémentation auprès de MMDeviceAPI.
Pour recevoir des notifications de modification d’appareil, le client doit effectuer les tâches suivantes :
- Implémentez l’interface IMMNotificationClient pour gérer les notifications de modification d’appareil envoyées par MMDeviceAPI.
- Inscrivez l’implémentation IMMNotificationClient auprès de MMDeviceAPI en appelant la méthode IMMDeviceEnumerator::RegisterEndpointNotificationCallback .
Une fois l’implémentation de ces interfaces enregistrée par le client, le client reçoit des notifications sous forme de rappels via les méthodes de ces interfaces. Les méthodes IMMNotificationClient sont appelées par MMDeviceAPI lorsqu’elles déclenchent des événements au niveau du point de terminaison (changements d’état de point de terminaison, nouvelles arrivées de point de terminaison, suppressions de points de terminaison, modifications de point de terminaison par défaut et modifications des propriétés de point de terminaison).
Si le client souhaite fournir un routage de flux pour l’appareil par défaut, il doit implémenter le comportement de modification de l’appareil lorsqu’il reçoit la notification via le rappel IMMNotificationClient::OnDefaultDeviceChanged .
Notifications de modification de session audio
Les modifications de session audio et de format sont signalées en tant qu’événements de session audio via WASAPI. Un client WASAPI implémente l’interface IAudioSessionEvents et inscrit l’implémentation auprès de WASAPI.
Pour obtenir des notifications de modification de session audio, le client doit effectuer les tâches suivantes :
- Implémentez l’interface IAudioSessionEvents pour gérer les notifications de modification de format envoyées par WASAPI.
- Inscrivez l’implémentation IAudioSessionEvents auprès de WASAPI en appelant la méthode IAudioSessionControl::RegisterAudioSessionNotification .
Les méthodes IAudioSessionEvents sont appelées par WASAPI lorsque des modifications de session audio se produisent. Ces événements sont déclenchés lorsque le nom d’affichage, le chemin d’accès de l’icône, le volume, le paramètre de regroupement ou l’état de la session changent.
Pour implémenter la fonctionnalité de routage de flux, le client doit attendre la notification de déconnexion de session. Lorsqu’une session audio est déconnectée ou que le format d’un appareil est modifié, WASAPI envoie les notifications client sous forme de rappels via IAudioSessionEvents::OnSessionDisconnected. Avec la notification de déconnexion, WASAPI envoie également une valeur qui indique pourquoi la session a été déconnectée. Cela peut se produire pour plusieurs raisons, telles que la suppression de l’appareil, l’arrêt du serveur, etc. Pour obtenir la liste complète des raisons, consultez l’énumération AudioSessionDisconnectReason définie dans AudioPolicy.h. Si l’appareil par défaut change, le client doit attendre les notifications (si elles n’ont pas déjà été reçues) qui sont accompagnées d’une valeur DisconnectReasonDeviceRemoval . En réponse à ces notifications, le client peut rouvrir le flux sur le nouvel appareil par défaut.
Étant donné que toutes ces opérations sont asychroques, l’ordre dans lequel l’application reçoit des notifications ne peut pas être prédit. Toutefois, en règle générale, l’application reçoit la valeur AudioSessionDisconnect avant la notification de modification d’appareil par défaut.
Notifications de modification de format
Les modifications de format audio se produisent lorsque le format du flux change. Cela peut se produire lorsque l’utilisateur sélectionne un nouveau format dans le panneau de configuration Audio ou que le nouvel appareil par défaut prend en charge un nouveau format (par exemple, HDMI ou certaines interfaces audio professionnelles avec un réglage manuel de la fréquence d’échantillonnage). Pour informer le client de ces types de modifications de format, WASAPI envoie une notification de session par l’implémentation inscrite de IAudioSessionEvents::OnSessionDisconnected avec une raison de déconnexion DisconnectReasonFormatChanged. Le client peut gérer la notification en rouvrant le flux dans le nouveau format.
Rubriques connexes