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

Fornece métodos para que aplicativos da área de trabalho e jogos descubram quando os níveis de som dos fluxos de áudio são modificados pelo sistema. Isso inclui cenários como os seguintes:

* Saber quando um fluxo de mídia do jogo é silenciado porque um aplicativo de áudio está sendo reproduzido em segundo plano ou
* Saber quando interromper um fluxo de áudio de chat do jogo porque uma chamada VOIP foi iniciada em segundo plano.

Fornece métodos que permitem que aplicativos da área de trabalho e jogos determinem o momento em que os níveis de som dos fluxos de áudio são modificados pelo sistema. Isso inclui cenários em que um jogo ou aplicativo precisa determinar o seguinte:

* O momento em que um fluxo de mídia do jogo é silenciado porque um aplicativo de áudio está sendo reproduzido em segundo plano
* O momento de interromper um fluxo de áudio de chat do jogo porque uma chamada VoIP foi iniciada em segundo plano

O nível de som pode ser verificado e monitorado tanto para fluxos de renderização quanto de captura. Os fluxos monitorados podem ser selecionados por categoria, ponto de extremidade de áudio ou função do dispositivo. O nível de som que um novo fluxo teria pode ser verificado antes que o fluxo seja criado.

Essa API é equivalente à [classe Windows.Media.Audio.AudiostateMonitor](https://learn.microsoft.com/uwp/api/windows.media.audio.audiostatemonitor), que está disponível para aplicativos UWP, mas não para aplicativos da área de trabalho e jogos. Essa interface não pode ser usada por aplicativos UWP.

## Membros

A interface **IAudioStateMonitor** herda da interface [IUnknown](https://learn.microsoft.com/windows/desktop/api/unknwn/nn-unknwn-iunknown), mas também tem estes tipos de membros:

### Métodos

A interface **IAudioStateMonitor** tem estes métodos:

| Método | Descrição |
| - | - |
| [GetSoundLevel](/pt-BR/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-getsoundlevel) | Obtém o nível de som atual dos fluxos associados a **IAudioStateMonitor** |
| [RegisterCallback](/pt-BR/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback) | Registra uma função de retorno de chamada que o sistema chamará quando houver uma alteração no nível de áudio dos fluxos associados a **IAudioStateMonitor** |
| [UnregisterCallback](/pt-BR/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback) | Cancela o registro de um retorno de chamada registrado anteriormente com [IAudioStateMonitor::RegisterCallback](/pt-BR/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback) |

## Comentários

Para obter uma instância dessa interface, chame um destes métodos:

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

O código de exemplo a seguir demonstra o cenário em que um jogo se registra para receber notificações de nível de áudio para os fluxos de renderização de áudio na categoria [AudioCategory\_GameMedia](https://learn.microsoft.com/windows/desktop/api/audiosessiontypes/ne-audiosessiontypes-audio_stream_category).

Se o nível de som dessa categoria estiver silenciado, o jogo interromperá a reprodução do fluxo de mídia do jogo. Se o nível de som estiver definido como qualquer outro valor, o fluxo de mídia do jogo será reproduzido.

```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.
}
```

## Requisitos

**Cabeçalho:** Audiostatemonitorapi.h

**Plataformas compatíveis:** Windows, consoles da família XBOX One e consoles XBOX Series

## Confira também

[Sobre o 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)
