Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Obtenga información sobre cómo detectar y responder a los cambios de nivel de audio por parte del sistema. A partir de Windows 10, versión 1803, tu aplicación puede detectar cuándo el sistema baja o silencia el nivel de audio de la captura de audio de tu aplicación y de los flujos de representación de audio. Por ejemplo, el sistema puede silenciar los flujos de tu aplicación cuando entra en segundo plano.
Para obtener información sobre cómo capturar audio mediante la clase MediaCapture , consulte Captura básica de fotos, vídeos y audio con MediaCapture. Para obtener información sobre la reproducción de audio mediante MediaPlayer, consulta Reproducir audio y vídeo con MediaPlayer.
La clase AudioStateMonitor permite registrarse para recibir un evento cuando el sistema modifica el volumen de una secuencia de representación o captura de audio. Obtenga una instancia de AudioStateMonitor para supervisar secuencias de captura de audio mediante una llamada a CreateForCaptureMonitoring. Obtenga una instancia para supervisar las secuencias de representación de audio mediante una llamada a CreateForRenderMonitoring. Registre un controlador para el evento SoundLevelChanged de cada monitor que se notificará cuando el sistema cambie el audio de la categoría de secuencia correspondiente.
AudioStateMonitor captureAudioStateMonitor;
AudioStateMonitor renderAudioStateMonitor;
captureAudioStateMonitor = AudioStateMonitor.CreateForCaptureMonitoring();
captureAudioStateMonitor.SoundLevelChanged += CaptureAudioStateMonitor_SoundLevelChanged;
renderAudioStateMonitor = AudioStateMonitor.CreateForRenderMonitoring();
renderAudioStateMonitor.SoundLevelChanged += RenderAudioStateMonitor_SoundLevelChanged;
En el controlador SoundLevelChanged de la secuencia de captura, puede comprobar la propiedad SoundLevel del remitente AudioStateMonitor para determinar el nuevo nivel de sonido. Tenga en cuenta que el sistema nunca debe reducir o atenuar un flujo de captura. Solo debe silenciarse o cambiarse de nuevo al volumen completo. Si la secuencia de audio está silenciada, puede detener una captura en curso. Si la secuencia de audio se restaura al volumen completo, puede empezar a capturar de nuevo.
bool isCapturingAudio = false;
bool capturingStoppedForAudioState = false;
private void CaptureAudioStateMonitor_SoundLevelChanged(AudioStateMonitor sender, object args)
{
switch (sender.SoundLevel)
{
case SoundLevel.Full:
if (capturingStoppedForAudioState)
{
MyStartAudioCapture();
capturingStoppedForAudioState = false;
}
break;
case SoundLevel.Muted:
if (isCapturingAudio)
{
MyStopAudioCapture();
capturingStoppedForAudioState = true;
}
break;
case SoundLevel.Low:
// This should never happen for capture
Debug.WriteLine("Unexpected audio state.");
break;
}
}
En el ejemplo de código siguiente se muestra una implementación del controlador SoundLevelChanged para la representación de audio. Dependiendo de su escenario de aplicación y del tipo de contenido que está reproduciendo, es posible que quiera pausar la reproducción de audio cuando el nivel de sonido esté reducido.
bool contentIsPodcast;
private void RenderAudioStateMonitor_SoundLevelChanged(AudioStateMonitor sender, object args)
{
if ((sender.SoundLevel == SoundLevel.Full) ||
(sender.SoundLevel == SoundLevel.Low && !contentIsPodcast))
{
m_mediaPlayer.Play();
}
else if ((sender.SoundLevel == SoundLevel.Muted) ||
(sender.SoundLevel == SoundLevel.Low && contentIsPodcast))
{
// Pause playback if we�re muted or if we�re playing a podcast and are ducked
m_mediaPlayer.Pause();
}
}