> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# IAudioStateMonitor, interface

> IAudioStateMonitor, interface

# IAudioStateMonitor, interface

Fournit des méthodes permettant aux applications de bureau et aux jeux de détecter quand le niveau sonore de leurs flux audio est modifié par le système. Cela inclut des scénarios tels que les suivants :

* Savoir quand un flux multimédia de jeu est coupé parce qu'une application audio est en cours de lecture en arrière-plan, ou
* Savoir quand arrêter un flux audio de conversation de jeu parce qu'un appel VOIP a démarré en arrière-plan.

Fournit des méthodes qui permettent aux applications de bureau et aux jeux de déterminer le moment où le niveau sonore de leurs flux audio est modifié par le système. Cela inclut des scénarios dans lesquels un jeu ou une application doit déterminer les éléments suivants :

* Le moment où un flux multimédia de jeu est coupé parce qu'une application audio est en cours de lecture en arrière-plan
* Le moment où arrêter un flux audio de conversation de jeu parce qu'un appel VoIP a démarré en arrière-plan

Le niveau sonore peut être vérifié et surveillé pour les flux de rendu comme pour les flux de capture. Les flux surveillés peuvent être sélectionnés par catégorie, par point de terminaison audio ou par rôle d'appareil. Le niveau sonore qu'aurait un nouveau flux peut être vérifié avant la création du flux.

Cette API équivaut à la [classe Windows.Media.Audio.AudiostateMonitor](https://learn.microsoft.com/uwp/api/windows.media.audio.audiostatemonitor), qui est disponible pour les applications UWP mais pas pour les applications de bureau et les jeux. Cette interface ne peut pas être utilisée par les applications UWP.

## Membres

L'interface **IAudioStateMonitor** hérite de l'interface [IUnknown](https://learn.microsoft.com/windows/desktop/api/unknwn/nn-unknwn-iunknown), mais possède également les types de membres suivants :

### Méthodes

L'interface **IAudioStateMonitor** possède les méthodes suivantes :

| Méthode | Description |
| - | - |
| [GetSoundLevel](/fr/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-getsoundlevel) | Obtient le niveau sonore actuel des flux associés à **IAudioStateMonitor** |
| [RegisterCallback](/fr/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback) | Inscrit une fonction de rappel que le système appellera en cas de changement du niveau audio des flux associés à **IAudioStateMonitor** |
| [UnregisterCallback](/fr/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback) | Désinscrit un rappel précédemment inscrit avec [IAudioStateMonitor::RegisterCallback](/fr/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback) |

## Remarques

Pour obtenir une instance de cette interface, appelez l'une des méthodes suivantes :

* [CreateCaptureAudioStateMonitor](/fr/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitor)
* [CreateCaptureAudioStateMonitorForCategory](/fr/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategory)
* [CreateCaptureAudioStateMonitorForCategoryAndDeviceId](/fr/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategoryanddeviceid)
* [CreateCaptureAudioStateMonitorForCategoryAndDeviceRole](/fr/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategoryanddevicerole)
* [CreateRenderAudioStateMonitor](/fr/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitor)
* [CreateRenderAudioStateMonitorForCategory](/fr/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitorforcategory)
* [CreateRenderAudioStateMonitorForCategoryAndDeviceId](/fr/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitorforcategoryanddeviceid)
* [CreateRenderAudioStateMonitorForCategoryAndDeviceRole](/fr/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitorforcategoryanddevicerole)

L'exemple de code suivant illustre le scénario dans lequel un jeu s'inscrit aux notifications de niveau audio pour ses flux de rendu audio de la catégorie [AudioCategory\_GameMedia](https://learn.microsoft.com/windows/desktop/api/audiosessiontypes/ne-audiosessiontypes-audio_stream_category).

Si le niveau sonore de cette catégorie est coupé, le jeu arrête la lecture de son flux multimédia de jeu. Si le niveau sonore a une autre valeur, le flux multimédia de jeu est lu.

```cpp theme={null}
// Global variables
winrt::com_ptr<IAudioStateMonitor> g_audioStateMonitor;
AudioStateMonitorRegistrationHandle g_registration = 0;

// Returns true if the GameMedia stream is to be disabled, false if it's to 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 whether the GameMedia stream is to be enabled.
        bool disableGameMediaStream = IsSoundLevelMuted(g_audioStateMonitor.get());

        // Here, add code that enables or disables the GameMedia stream 
        // according to 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, &amp;g_registration);
        }
    }

    if (FAILED(hr))
    {
        // g_audioStateMonitor is a smart pointer, so if an IAudioStateMonitor 
        // was allocated, then setting the smart pointer to null invokes the
        // Release method, which will decrement its usage count and ensure that 
        // the object is destroyed properly.
        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
        // will invoke 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 
    // according to the value of the Boolean.
}
```

## Configuration requise

**En-tête :** Audiostatemonitorapi.h

**Plateformes prises en charge :** Windows, consoles de la famille XBOX One et consoles XBOX Series

## Voir aussi

[À propos de WASAPI](https://learn.microsoft.com/en-us/windows/desktop/CoreAudio/wasapi)


## Related topics

- [IAudioStateMonitor interface](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor.md)
- [Interfaz IAudioStateMonitor](/es/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor.md)
- [IAudioStateMonitor 接口](/zh-CN/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor.md)
- [IAudioStateMonitor::RegisterCallback method](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback.md)
- [IAudioStateMonitor::UnregisterCallback method](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback.md)
