Lecture d'une chanson provoquant le crash de WP7 sur le téléphone, mais pas sur l'émulateur

13

J'essaie d'implémenter une chanson dans un jeu qui commence à jouer et boucle continuellement sur Windows Phone 7 via XNA 4.0. Sur l'émulateur, cela fonctionne bien, mais lorsqu'il est déployé sur un téléphone, il donne simplement un écran noir avant de revenir à l'écran d'accueil. Voici le code escroc en question, et commenter ce code rend l'application fonctionne correctement sur le téléphone:

// in the constructor fields
private Song song;

// in the LoadContent() method
song = Content.Load<Song>("song");

// in the Update() method
if (MediaPlayer.GameHasControl && MediaPlayer.State != MediaState.Playing)
{
    MediaPlayer.Play(song);
}

Le fichier de morceau lui-même est un fichier .wma de 2:53, 2,28 Mo à un débit de 106 kbps.

Encore une fois, cela fonctionne parfaitement sur l'émulateur mais ne fonctionne pas du tout sur le téléphone. Merci pour toute l'aide que vous pourrez fournir!

Michael Zehnich
la source
4
Essayez de faire un essai et vérifiez quelle exception vous obtenez. Cela devrait aider à obtenir de l'aide à ce sujet.
Ray Dey
Bon conseil. L'exception levée est "System.InvalidOperationException: la lecture du morceau a échoué, veuillez vérifier que le morceau n'est pas protégé par DRM." De plus, j'ai essayé avec la chanson encodée en MP3 et j'ai obtenu les mêmes résultats (travaillé dans l'émulateur, ne fonctionne pas dans le téléphone). Une question secondaire: existe-t-il un moyen facile d'imprimer / enregistrer le texte de débogage sur le téléphone ..? Ma seule option était de dessiner le texte à l'écran, hé.
Michael Zehnich

Réponses:

13

Nous avons compris cela. L'information est disponible en ligne mais elle est vraiment bien cachée, je vais donc la publier ici pour faire bonne mesure.

Fondamentalement, si le téléphone est connecté à un ordinateur et que le logiciel Zune est en cours d'exécution, il verrouille les médias sur le téléphone, ce qui signifie que les MediaPlayers dans les applications n'auront jamais la permission de jouer un morceau.

Pour le faire fonctionner, l'utilisateur doit détacher le téléphone (c'est-à-dire débrancher le cordon USB), ou utiliser l'outil Windows Phone Connect qui a été conçu dans cet esprit en ce qui concerne le débogage: http: // msdn. microsoft.com/en-us/library/gg180729%28v=VS.92%29.aspx - Je n'ai pas essayé l'outil, mais le détachement a fonctionné comme un charme.

De plus, lorsque l'application n'est pas autorisée à lire une chanson, elle se bloque à moins que l'exception ne soit gérée, alors assurez-vous d'utiliser des blocs try / catch. L'exception interceptée peut simplement être ignorée.

Michael Zehnich
la source
1
Ah, les joies de DRM.
Jari Komppa du
1
Bon à savoir, aussi ennuyeux que j'imagine, beaucoup de développeurs rencontrent ce problème.
Ray Dey
2

La réponse de Michael Zehnich est en effet correcte. Cependant, je suis tombé sur un autre problème qui cause la même exception.

Le problème pour moi était que je manquais la capacité ID_CAP_MEDIALIB dans mon WMAppManifest.xml.

<Capability Name="ID_CAP_MEDIALIB"/>

J'espère que cela t'aides.

mikeesouth
la source