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

# Interfaz IAudioStateMonitor

> Interfaz IAudioStateMonitor

# Interfaz IAudioStateMonitor

Proporciona métodos para que las aplicaciones de escritorio y los juegos detecten cuándo el sistema modifica los niveles de sonido de sus secuencias de audio. Esto incluye escenarios como los siguientes:

* Saber cuándo se silencia una secuencia multimedia del juego porque una aplicación de audio se está reproduciendo en segundo plano o
* Saber cuándo detener una secuencia de audio de chat del juego porque se ha iniciado una llamada VOIP en segundo plano.

Proporciona métodos que permiten a las aplicaciones de escritorio y a los juegos determinar el momento en que el sistema modifica los niveles de sonido de sus secuencias de audio. Esto incluye escenarios en los que un juego o una aplicación necesita determinar lo siguiente:

* El momento en que se silencia una secuencia multimedia del juego porque una aplicación de audio se está reproduciendo en segundo plano
* El momento de detener una secuencia de audio de chat del juego porque se ha iniciado una llamada VoIP en segundo plano

El nivel de sonido se puede comprobar y supervisar tanto para las secuencias de representación como para las de captura. Las secuencias supervisadas se pueden seleccionar por categoría, punto de conexión de audio o rol de dispositivo. El nivel de sonido que tendría una nueva secuencia puede comprobarse antes de crear la secuencia.

Esta API es equivalente a la [clase Windows.Media.Audio.AudiostateMonitor](https://learn.microsoft.com/uwp/api/windows.media.audio.audiostatemonitor), que está disponible para las aplicaciones para UWP pero no para las aplicaciones de escritorio ni los juegos. Las aplicaciones para UWP no pueden usar esta interfaz.

## Miembros

La interfaz **IAudioStateMonitor** hereda de la interfaz  [IUnknown](https://learn.microsoft.com/windows/desktop/api/unknwn/nn-unknwn-iunknown), pero también tiene estos tipos de miembros:

### Métodos

La interfaz **IAudioStateMonitor** tiene estos métodos:

| Método                                                                                                    | Descripción                                                                                                                                                                                          |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [GetSoundLevel](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-getsoundlevel)           | Obtiene el nivel de sonido actual de las secuencias asociadas a  **IAudioStateMonitor**                                                                                                              |
| [RegisterCallback](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback)     | Registra una función de devolución de llamada a la que el sistema llamará cuando haya un cambio en el nivel de audio de las secuencias asociadas a  **IAudioStateMonitor**                           |
| [UnregisterCallback](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback) | Anula el registro de una devolución de llamada registrada previamente con  [IAudioStateMonitor::RegisterCallback](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback) |

## Comentarios

Para obtener una instancia de esta interfaz, llame a uno de estos métodos:

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

En el siguiente código de ejemplo se muestra el escenario en el que un juego se registra para recibir notificaciones de nivel de audio de sus secuencias de representación de audio de la categoría [AudioCategory\_GameMedia](https://learn.microsoft.com/windows/desktop/api/audiosessiontypes/ne-audiosessiontypes-audio_stream_category).

Si el nivel de sonido de esta categoría está silenciado, el juego detendrá la reproducción de su secuencia multimedia del juego. Si el nivel de sonido se establece en cualquier otro valor, se reproduce la secuencia multimedia del juego.

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

**Encabezado:** Audiostatemonitorapi.h

**Plataformas compatibles:** Windows, consolas de la familia XBOX One y consolas XBOX Series

## Consulte también

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


## Related topics

- [AudioStateMonitor](/es/reference/audio/audiostatemonitor/audiostatemonitor_members.md)
- [Método IAudioStateMonitor::RegisterCallback](/es/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-registercallback.md)
- [Método IAudioStateMonitor::UnregisterCallback](/es/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback.md)
- [Método IAudioStateMonitor::GetSoundLevel](/es/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-getsoundlevel.md)
- [AudioStateMonitorRegistrationHandle](/es/reference/audio/audiostatemonitor/types/audiostatemonitorregistrationhandle.md)
