none
Applications universelles - audio en arrière plan RRS feed

  • Question

  • Bonjour à tous.

    Tout neuf dans la programmation en c#, je me suis lancé dans le développement d'une application universelle pour windows 10 qui comprend entre autres la diffusion de webradios.

    Via le MediaElement et l'URL de la webradio, je peux la diffuser mais le problème est que lorsque l'application est suspendue (via Visual Studio ou en faisant passer une autre application au premier plan) l'audio s'arrête sans demander son reste. Or la procédure qui fonctionnait sur Windows 8.1 ne marche plus sur Win10.

    J'ai fouillé dans la documentation mais ce n'est pas très clair pour moi. Avez-vous des pistes ou des exemples un peu plus simplistes et compréhensibles ?

    Merci de votre aide.

    mardi 10 novembre 2015 14:30

Réponses

  • Bonjour,

    Regardez du coté des procédures du centre de développement Windows : Contenu audio en arrière-plan

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:10
    jeudi 12 novembre 2015 08:30
  • Bonjour,

    Les tâche d'arrière plan doivent être déclarées dans un projet de type "winmd".

    Voir le détail des tâches d'arrière-plan dans cet article https://msdn.microsoft.com/fr-fr/library/windows/apps/xaml/mt299103.aspx

    et plus particulièrement https://msdn.microsoft.com/fr-fr/library/windows/apps/xaml/mt299100.aspx.

    Dans le code d'exemple c'est dans le projet "BackgroundAudioTask".

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:09
    lundi 30 novembre 2015 11:04
  • Bonjour,

    Je suppose que vous parlez du Media Control dans la vignette de l'application dans la barre de tâche.

    Si c'est le cas c'est normal: l'exemple est basé sur le BackgroundMediaPlayer, donc le SystemMediaTransportControl manipulé est celui du système général (le flyout qui apparaît en haut à gauche de l'écran).

    Celui de la vignette est contrôlé par l'application elle-même, il faut qu'elle configure le SystemMediaTransportControl qui lui est "attribuée" via SystemMediaTransportControl.GetForCurrentView() de mémoire. Ensuite il faut prendre en charge toute l'interaction. Toutefois à ma connaissance cela ne fonctionne que lorsque l'application n'est pas suspendue, si elle est suspendue les boutons du contrôle ne réagissent pas (je viens de vérifier avec Groove c'est toujours le cas). Il me semble qu'il y a des demandes sur UserVoice pour résoudre ce problème, mais je n'ai pas suivi plus loin la situation.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:09
    mercredi 2 décembre 2015 08:41

Toutes les réponses

  • A voir un exemple ici : exemple sur Github

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mardi 10 novembre 2015 17:59
  • Merci pour votre réponse.

    J'ai bien essayé d'appliquer cet exemple mais sans comprendre le fonctionnement général je n'avance pas.

    Est-ce la même procédure si on passe par un MediaElement plutôt que par la classe MediaPlayer ?

    jeudi 12 novembre 2015 08:16
  • Bonjour,

    Regardez du coté des procédures du centre de développement Windows : Contenu audio en arrière-plan

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:10
    jeudi 12 novembre 2015 08:30
  • Bonjour,

    J'ai bien vu la procédure mais j'avoue ne rien y comprendre. Je n'y vois pas où déclarer la tache en arrière-plan, comment la déclarer, où démarrer l'audio pour qu'elle soit reprise en arrière-plan,...

    Merci de votre réponse

    dimanche 15 novembre 2015 17:18
  • Bonjour,

    Les tâche d'arrière plan doivent être déclarées dans un projet de type "winmd".

    Voir le détail des tâches d'arrière-plan dans cet article https://msdn.microsoft.com/fr-fr/library/windows/apps/xaml/mt299103.aspx

    et plus particulièrement https://msdn.microsoft.com/fr-fr/library/windows/apps/xaml/mt299100.aspx.

    Dans le code d'exemple c'est dans le projet "BackgroundAudioTask".

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:09
    lundi 30 novembre 2015 11:04
  • Bonjour,

    Perso, ce projet ne fonctionne pas : le SystemMediaTransportControls est toujours grisé.


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 2 décembre 2015 06:45
  • Bonjour,

    Je suppose que vous parlez du Media Control dans la vignette de l'application dans la barre de tâche.

    Si c'est le cas c'est normal: l'exemple est basé sur le BackgroundMediaPlayer, donc le SystemMediaTransportControl manipulé est celui du système général (le flyout qui apparaît en haut à gauche de l'écran).

    Celui de la vignette est contrôlé par l'application elle-même, il faut qu'elle configure le SystemMediaTransportControl qui lui est "attribuée" via SystemMediaTransportControl.GetForCurrentView() de mémoire. Ensuite il faut prendre en charge toute l'interaction. Toutefois à ma connaissance cela ne fonctionne que lorsque l'application n'est pas suspendue, si elle est suspendue les boutons du contrôle ne réagissent pas (je viens de vérifier avec Groove c'est toujours le cas). Il me semble qu'il y a des demandes sur UserVoice pour résoudre ce problème, mais je n'ai pas suivi plus loin la situation.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    • Marqué comme réponse Stit84 lundi 7 mars 2016 10:09
    mercredi 2 décembre 2015 08:41
  • Pas exactement.

    Le SystemMediaTransportControl dans une tâche en background n'est pas obtenu via le GetCurrentView (y'en a pas) mais via le Backgroundxxx (je me rappelle plus).

    Et il marche pas du tout (et y'a pas de documentation). Tout ce que j'ai pu retrouver fait référence à ce sample qui ne marche pas.

    Le principe d'utiliser une tâche en background est effectivement d'éviter que la musique s'arrête dès que l'appli n'est plus au premier plan.


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 2 décembre 2015 08:44
  • Oui c'est ce que disais :) je me suis peut-être mal exprimé.

    Pour la tâche de fond on récupère le SystemMediaTransportControls (via BackgroundMediaPlayer.Current.SystemMediaTransportControls), tandis que pour l'application en elle-même c'est SystemMediaTransportControls.GetForCurrentView(). Mais les deux objets sont indépendants, donc il faut gérer les deux séparemment.

    En revanche moi l'exemple fonctionne parfaitement.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    mercredi 2 décembre 2015 08:49
  • T'es passé en TH2 ?

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 2 décembre 2015 08:51
  • Mon poste de dev oui, pas mon portable.

    D'ailleurs je me rend compte que Groove sous mon poste de dev a l'air de mieux gérer les MediaControl dans les vignettes (j'écoute ma musique depuis le portable donc j'avais vérifié). TH2 a peut-être corrigé cela.

    Cordialement,


    Yan Grenier

    Merci de bien vouloir "Marquer comme réponse", les réponses qui ont répondues à votre question, et de noter les réponses que vous avez trouvé utiles.

    mercredi 2 décembre 2015 09:02