UWP: Détecter les changements d’état audio et y répondre

In Mobile Development by Christian HissibiniLeave a Comment

À partir de Windows10, version1803, votre application peut détecter quand le système baisse ou désactive le niveau audio d’un flux audio utilisé par votre application. Vous pouvez recevoir des notifications pour les flux de capture et de rendu, pour un périphérique audio et une catégorie audio spécifiques, ou pour un objet MediaPlayer que votre application utilise pour la lecture multimédia. Par exemple, le système peut baisser, ou «atténuer», le niveau de lecture audio lorsqu’une alarme sonne. Le système désactive votre application lorsqu’elle passe à l’arrière-plan si la fonctionnalité backgroundMediaPlayback n’a pas été déclarée dans le manifeste de l’application.

Le modèle de gestion des changements d’état audio est identique pour tous les flux audio pris en charge. Tout d’abord, créez une instance de la classe AudioStateMonitor. Dans l’exemple suivant, l’application utilise la classe MediaCapture pour capturer le contenu audio des conversations de jeu. Une méthode de fabrique est appelée pour obtenir une analyse de l’état audio associée au flux de capture audio des conversations de jeu de l’appareil de communication par défaut. Ensuite, un gestionnaire est enregistré pour l’événement SoundLevelChanged qui est déclenché lorsque le niveau audio du flux associé est modifié par le système.C#Copier

AudioStateMonitor gameChatAudioStateMonitor;

C#Copier

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

Dans le Gestionnaire d’événements SoundLevelChanged , vérifiez la propriété SoundLevel de l’expéditeur AudioStateMonitortransmis au gestionnaire pour déterminer quel est le nouveau niveau audio du flux. Dans cet exemple, l’application arrête la capture audio lorsque le niveau sonore est désactivé et reprend la capture lorsque le niveau sonore est restauré sur le volume complet.C#Copier

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;
    }
}

Pour plus d’informations sur la capture audio avec MediaCapture, voir Capture photo, vidéo et audio de base à l’aide de MediaCapture.

Chaque instance de la classe MediaPlayer a un objet AudioStateMonitor associé que vous pouvez utiliser pour détecter quand le système change le niveau de volume du contenu en cours de lecture. Vous pouvez décider de gérer les changements d’état audio différemment selon le type de contenu en cours de lecture. Par exemple, vous pouvez décider de suspendre la lecture d’un podcast lorsque le volume est baissé, mais de continuer la lecture si le contenu est de la musique.C#Copier

bool isPodcast;
bool isPausedDueToAudioStateMonitor;

C#Copier

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;
        }
    }

}

Pour plus d’informations sur l’utilisation de MediaPlayer, voir Lire du contenu audio et vidéo avec MediaPlayer.

Leave a Comment