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

# Método IAudioStateMonitor::RegisterCallback

> Método IAudioStateMonitor::RegisterCallback

# Método IAudioStateMonitor::RegisterCallback

Registra una función de devolución de llamada a la que el sistema llamará cuando cambie el nivel de audio de las secuencias asociadas a [IAudioStateMonitor](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor).

## Sintaxis

```cpp theme={null}
HRESULT RegisterCallback(
  AudioStateMonitorCallback *callback,
  void *context,
  [out] AudioStateMonitorRegistration *registration
);
```

### Parámetros

*callback*\
Tipo: AudioStateMonitorCallback\*

Un puntero a la función de devolución de llamada a la que el sistema llama cuando hay un cambio en el nivel de audio de las secuencias asociadas a  [IAudioStateMonitor](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor).

*context*\
Tipo: void\*

Un puntero a los datos de contexto definidos por la aplicación que se pasarán a la función especificada en el parámetro *callback*.

*registration* \[out]\
Tipo: AudioStateMonitorRegistration\*

Un entero de 64 bits que identifica el registro de la devolución de llamada. Para anular el registro de la función especificada en el parámetro *callback*, pase este valor a [IAudioStateMonitor::UnregisterCallback](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor-unregistercallback).

### Valor devuelto

Tipo: HRESULT

Si el método se ejecuta correctamente, devuelve S\_OK. Si se produce un error, los códigos devueltos posibles incluyen, entre otros, los valores que se muestran en la tabla siguiente.

| Código devuelto                         | Descripción                                                      |
| --------------------------------------- | ---------------------------------------------------------------- |
| <dl> <dt> **E\_OUTOFMEMORY**</dt> </dl> | El puntero de devolución de llamada proporcionado es nulo.<br /> |

## Comentarios

Considere el siguiente escenario, en el que un juego elige reproducir audio GameMedia solo cuando se sabe que el sistema operativo no silenciará el audio debido a la directiva. Para lograrlo, el juego se registra para recibir notificaciones de SoundLevel de la categoría de secuencia [AudioCategory\_GameMedia](https://learn.microsoft.com/windows/desktop/api/audiosessiontypes/ne-audiosessiontypes-audio_stream_category) en el punto de conexión de consola predeterminado. Si el SoundLevel de esta categoría se establece en 'Muted', el juego detendrá la reproducción de su secuencia GameMedia. Si el SoundLevel se establece en cualquier otro valor, el juego elige reproducir su secuencia GameMedia.

```cpp theme={null}
// 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. 
} 
```

## Requisitos

**Encabezado:** Audiostatemonitorapi.h

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

## Consulte también

[IAudioStateMonitor](/reference/audio/audiostatemonitor/interfaces/iaudiostatemonitor)

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


## Related topics

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