Freigeben über


Erkennen von und Reagieren auf Audio-Zustandsänderungen

Ab Windows 10, Version 1803, kann Ihre App erkennen, wann das System den Audiopegel eines Audiostreams verringert oder stummschaltet, den Ihre App verwendet. Sie können Benachrichtigungen für Aufnahme- und Renderdatenströme, für ein bestimmtes Audiogerät und eine Audiokategorie oder für ein MediaPlayer-Objekt empfangen, das Ihre App für die Medienwiedergabe verwendet. Das System kann z. B. die Audiowiedergabe verringern oder "enten", wenn ein Alarm klingelt. Das System schaltet Ihre App stumm, wenn sie in den Hintergrund wechselt, wenn Ihre App die backgroundMediaPlayback-Funktion nicht im App-Manifest deklariert hat.

Das Muster für die Behandlung von Audiozustandsänderungen ist für alle unterstützten Audiodatenströme identisch. Erstellen Sie zunächst eine Instanz der AudioStateMonitor-Klasse. Im folgenden Beispiel verwendet die App die MediaCapture-Klasse , um Audio für Spielchats aufzunehmen. Eine Factorymethode wird aufgerufen, um einen Audiozustandsmonitor abzurufen, der dem Audioaufnahmedatenstrom des Spielchats des Standardkommunikationsgeräts zugeordnet ist. Als Nächstes wird ein Handler für das SoundLevelChanged-Ereignis registriert, das ausgelöst wird, wenn die Audioebene für den zugeordneten Datenstrom vom System geändert wird.

AudioStateMonitor gameChatAudioStateMonitor;
string deviceId = Windows.Media.Devices.MediaDevice.GetDefaultAudioCaptureId(Windows.Media.Devices.AudioDeviceRole.Communications);
gameChatAudioStateMonitor = AudioStateMonitor.CreateForCaptureMonitoringWithCategoryAndDeviceId(MediaCategory.GameChat, deviceId);
gameChatAudioStateMonitor.SoundLevelChanged += GameChatSoundLevelChanged;

Überprüfen Sie im SoundLevelChanged-Ereignishandler die SoundLevel-Eigenschaft des an den Handler übergebenen AudioStateMonitor-Absenders, um zu bestimmen, was die neue Audioebene für den Datenstrom ist. In diesem Beispiel beendet die App die Aufnahme von Audio, wenn der Soundpegel stummgeschaltet ist, und die Aufnahme wird fortgesetzt, wenn die Audiostufe wieder zur vollen Lautstärke zurückkehrt.

private void GameChatSoundLevelChanged(AudioStateMonitor sender, object args)
{
    switch (sender.SoundLevel)
    {
        case SoundLevel.Full:
            StartAudioCapture();
            break;
        case SoundLevel.Muted:
            StopAudioCapture();
            break;
        case SoundLevel.Low:
            // Audio capture should never be "ducked", only muted or full volume.
            Debug.WriteLine("Unexpected audio state change.");
            break;
    }
}

Weitere Informationen zum Aufzeichnen von Audio mit MediaCapture finden Sie unter "Einfache Foto-, Video- und Audioaufnahme mit MediaCapture".

Jede Instanz der MediaPlayer-Klasse hat einen AudioStateMonitor zugeordnet, den Sie verwenden können, um zu erkennen, wann das System die Lautstärke des aktuell wiedergegebenen Inhalts ändert. Je nachdem, welche Art von Inhalt wiedergegeben wird, können Sie änderungen am Audiozustand anders behandeln. Sie können z. B. die Wiedergabe eines Podcasts anhalten, wenn die Audiowiedergabe verringert wird, aber die Wiedergabe fortsetzen, wenn der Inhalt Musik ist.

bool isPodcast;
bool isPausedDueToAudioStateMonitor;
private void AudioStateMonitor_SoundLevelChanged(Windows.Media.Audio.AudioStateMonitor sender, object args)
{
    if ((sender.SoundLevel == SoundLevel.Full) || (sender.SoundLevel == SoundLevel.Low && !isPodcast))
    {
        if (isPausedDueToAudioStateMonitor)
        {
            mediaPlayer.Play();
            isPausedDueToAudioStateMonitor = false;
        }
    }
    else if ((sender.SoundLevel == SoundLevel.Muted) ||
         (sender.SoundLevel == SoundLevel.Low && isPodcast))
    {
        if (mediaPlayer.PlaybackSession.PlaybackState == MediaPlaybackState.Playing)
        {
            mediaPlayer.Pause();
            isPausedDueToAudioStateMonitor = true;
        }
    }

}

Weitere Informationen zur Verwendung des MediaPlayer finden Sie unter Audio und Video mit dem MediaPlayer abspielen.