> ## 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.

# Interface IAudioStateMonitor

> Interface IAudioStateMonitor

# Interface IAudioStateMonitor

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

* Savoir quand un flux multimédia de jeu est mis en sourdine parce qu'une application audio joue en arrière-plan, ou
* Savoir quand arrêter un flux audio de clavardage de jeu parce qu'un appel VOIP a commencé 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 comprend des scénarios dans lesquels un jeu ou une application doit déterminer ce qui suit :

* Le moment où un flux multimédia de jeu est mis en sourdine parce qu'une application audio joue en arrière-plan
* Le moment où arrêter un flux audio de clavardage de jeu parce qu'un appel VoIP a commencé en arrière-plan

Le niveau sonore peut être vérifié et surveillé pour les flux de restitution 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 de périphérique. Le niveau sonore qu'aurait un nouveau flux peut être vérifié avant la création du flux.

Cette API est l'équivalent de 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 ni 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 comporte également ces types de membres :

### Méthodes

L'interface **IAudioStateMonitor** comporte ces méthodes :

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

## Remarques

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

* [CreateCaptureAudioStateMonitor](/fr-CA/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitor)
* [CreateCaptureAudioStateMonitorForCategory](/fr-CA/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategory)
* [CreateCaptureAudioStateMonitorForCategoryAndDeviceId](/fr-CA/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategoryanddeviceid)
* [CreateCaptureAudioStateMonitorForCategoryAndDeviceRole](/fr-CA/reference/audio/audiostatemonitor/functions/createcaptureaudiostatemonitorforcategoryanddevicerole)
* [CreateRenderAudioStateMonitor](/fr-CA/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitor)
* [CreateRenderAudioStateMonitorForCategory](/fr-CA/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitorforcategory)
* [CreateRenderAudioStateMonitorForCategoryAndDeviceId](/fr-CA/reference/audio/audiostatemonitor/functions/createrenderaudiostatemonitorforcategoryanddeviceid)
* [CreateRenderAudioStateMonitorForCategoryAndDeviceRole](/fr-CA/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 restitution 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 en sourdine, le jeu arrêtera la lecture de son flux multimédia de jeu. Si le niveau sonore est réglé à toute 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)
