Utilisation du background Audio

Utilisation du background Audio

Actuellement avec nodo, une application comme Deezer ne peut jouer une musique que lorsqu’elle visible, grâce à mango il est possible de demander au windows phone de continuer à jouer un morceau même si l’application est fermé.

Créez une librairie Windows Phone 7, celle-ci va contenir notre Agent, elle est totalement indépendante vis à vis de notre application. Quand on fermera l’application, seule cette librairie restera chargée.

Et ajoutez une référence à la dll dans votre application (indispensable).

Dans cette librairie, ajoutez une classe héritant de AudioPlayerAgent :

namespace TestAudioPlaybackAgent
{
    public class MyAudioPlayerAgent : AudioPlayerAgent
    {
    }
}

et surchargez les méthodes OnPlayStateChanged(BackgroundAudioPlayer player, AudioTrack track, PlayState playState) et void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param), la première correspond aux évènements de lecture (fin du morceau en cours,etc…) alors que la deuxième correspond aux évènements provenant de l’utilisateur : (lecture, pause, etc…)

      protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param)
        {
            base.OnUserAction(player, track, action, param);

            // User actions can be initiated from the main application or from the UVC.
            switch (action)
            {
                case UserAction.Play:
                    Play(player);
                    break;

                case UserAction.Stop:
                    player.Stop();
                    break;
            }

            NotifyComplete();
        }

Il est indispensable d’appeler la méthode NotifyComplete() lorsque vous avez fini votre traitement afin que le téléphone puisse mettre de côté l’agent (jusqu’a prochain évènement)./

Enfin, il faut rajouter un BackgroundServiceAgent de type ‘AudioPlayerAgent’ au fichier WMAppManifest.xml de votre application dans le noeud “Tasks” :

   <extendedTask Name="BackgroundTask">
        <backgroundServiceAgent Specifier="AudioPlayerAgent" Name="TestAudioPlaybackAgent" Source="TestAudioPlaybackAgent" Type="TestAudioPlaybackAgent.MyAudioPlayerAgent" />
      </extendedTask>

Il nous reste plus qu’à implémenter la méthode Play() :

void Play(BackgroundAudioPlayer player)
{
player.PlayStateChanged += PlayStateChanged;
var track = new AudioTrack(
     new Uri("http://www.contoso.com/rebeccablack/itsfriday.mp3"),
     "it's friday",
     "Rebecca Black",
     "RebAlbum",
     new Uri("http://www.contoso.com/images/reb.jpg"));
 player.Play();
}

Il suffit donc de construire un objet AudioTrack et de lui passer en paramètres : l’uri vers le fichier audio (cela peut être un fichier local (dans l’isolated Storage, il faudra donc penser à copier les fichiers audio que vous souhaitez lire dans l’isolated storage de façon manuelle), le nom de la chanson, le nom de l’artiste, le nom de l’album et enfin la pochette de l’album.

Du côté client, il est possible de récupérer les états de la lecture (morceau suivant, rewinding, etc… grâce à la méthode “PlayStateChanged”.

void PlayStateChanged(object sender, EventArgs e)
{
   switch (BackgroundAudioPlayer.Instance.PlayerState)
   {
      case PlayState.XXX:
      ...
      break;
   }
}

Pour vérifier que le téléphone à bien pris en compte votre morceau, il suffit de taper la touche F9 ou F10 afin d’afficher les contrôles de Zune.

Pour résumé, le Background Audio est très simple d’utilisation et plutôt bien conçu (beaucoup plus simple que chez la concurrence…)

Comments are closed.