Cette énumération est utilisée par la méthode IAudioStateMonitor::GetSoundLevel.Prenons le scénario suivant, dans lequel un jeu choisit de lire l’audio GameMedia uniquement lorsqu’il sait que l’audio ne sera pas mis en sourdine par le système d’exploitation en raison d’une stratégie. Pour ce faire, le jeu s’inscrit aux notifications SoundLevel pour la catégorie de flux AudioCategory_GameMedia sur le point de terminaison de console par défaut. Si le SoundLevel de cette catégorie est défini sur « Muted », le jeu arrête la lecture de son flux GameMedia. Si le SoundLevel est défini sur toute autre valeur, le jeu choisit de lire son flux GameMedia.
// global variables winrt::com_ptr<IAudioStateMonitor> g_audioStateMonitor; AudioStateMonitorRegistrationHandle g_registration = 0; // Returns true if the GameMedia stream should be disabled, false if it should be // enabled. bool IsSoundLevelMuted(_In_ IAudioStateMonitor* audioStateMonitor) { return (audioStateMonitor->GetSoundLevel() == AudioStateMonitorSoundLevel::Muted); } HRESULT StartTrackingSoundLevel() { // Create an AudioStateMonitor and register for callbacks from it. HRESULT hr = RegisterForSoundLevelChanges(); if (SUCCEEDED(hr)) { // Check the current sound level and determine if the GameMedia stream should // be enabled. bool disableGameMediaStream = IsSoundLevelMuted(g_audioStateMonitor.get()); // Add code here that enables or disables the GameMedia stream based on the // value of the boolean. } return hr; } HRESULT RegisterForSoundLevelChanges() { HRESULT hr = S_OK; // Create a new AudioStateMonitor for the GameMedia category, if needed, and // register for callbacks. if (m_audioStateMonitor == nullptr) { hr = CreateRenderAudioStateMonitorForCategoryAndDeviceRole( AudioCategory_GameMedia, ERole::eConsole, g_audioStateMonitor.put()); if (SUCCEEDED(hr)) { // Optional "context" parameter is not used in this example, // and is set to nullptr. hr = g_audioStateMonitor->RegisterCallback(OnAudioStateMonitorCallback, nullptr, &g_registration); } } if (FAILED(hr)) { // g_audioStateMonitor is a smart pointer, so if an IAudioStateMonitor was // allocated, setting the smart pointer to null invokes the Release method // which will decrement its usage count and ensure that the object is properly // destroyed. g_audioStateMonitor = nullptr; } return hr; } // Unregister callbacks on program shutdown void UnregisterForSoundLevelChanges() { if (g_audioStateMonitor != nullptr) { if (g_registration) { g_audioStateMonitor->UnregisterCallback(g_registration); } // g_audioStateMonitor is a smart pointer, so setting it to null // invokes the Release method to decrement its usage count. g_audioStateMonitor = nullptr; } } void OnAudioStateMonitorCallback(_In_ IAudioStateMonitor* audioStateMonitor, _In_opt_ void* context) { bool disableGameMediaStream = IsSoundLevelMuted(audioStateMonitor); // Add code here that enables or disables the GameMedia stream based on the value // of the boolean. }