Reproducir una canción haciendo que WP7 se bloquee en el teléfono, pero no en el emulador

13

Estoy tratando de implementar una canción en un juego que comienza a reproducirse y se repite continuamente en Windows Phone 7 a través de XNA 4.0. En el emulador, esto funciona bien, sin embargo, cuando se implementa en un teléfono, simplemente muestra una pantalla negra antes de volver a la pantalla de inicio. Aquí está el código falso en cuestión, y comentar este código hace que la aplicación funcione bien en el teléfono:

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

El archivo de la canción en sí es un archivo .wma de 2.53 m de largo y 2.28 mb a una velocidad de bits de 106 kbps.

Nuevamente, esto funciona perfectamente en el emulador, pero no se ejecuta en absoluto en el teléfono. ¡Gracias por cualquier ayuda que usted nos pueda proporcionar!

Michael Zehnich
fuente
44
Intenta pegar un try-catch y mira qué excepción estás recibiendo. Eso debería ayudar a conseguir algo de ayuda en esto.
Ray Dey
Buen consejo. La excepción lanzada es "System.InvalidOperationException: la reproducción de la canción falló, verifique que la canción no esté protegida por DRM". Además, he intentado con la canción codificada como MP3 y obtuve los mismos resultados (funcionó en el emulador, no funciona en el teléfono). Una pregunta secundaria: ¿hay una manera fácil de imprimir / guardar texto de depuración en el teléfono ...? Mi única opción era dibujar el texto en la pantalla, je.
Michael Zehnich

Respuestas:

13

Nos dimos cuenta de esto. La información está disponible en línea, pero está muy bien oculta, así que la publicaré aquí como medida.

Básicamente, si el teléfono está conectado a una computadora y el software Zune se está ejecutando, bloquea los medios en el teléfono, lo que significa que MediaPlayers en las aplicaciones nunca tendrán permiso para reproducir una canción.

Para que funcione, el usuario debe desconectar el teléfono (es decir, desenchufar el cable USB) o usar la herramienta Windows Phone Connect que se ha diseñado teniendo esto en cuenta con respecto a la depuración: http: // msdn. microsoft.com/en-us/library/gg180729%28v=VS.92%29.aspx : no he probado la herramienta, pero la desconexión funcionó de maravilla.

Además, cuando la aplicación no tiene permiso para reproducir una canción, se bloqueará a menos que se maneje la excepción, así que asegúrese de usar bloques try / catch. La excepción capturada simplemente puede ignorarse.

Michael Zehnich
fuente
1
Ah, las alegrías de DRM.
Jari Komppa
1
Es bueno saber, molesto como el infierno, ya que imagino que muchos desarrolladores se encuentran con este problema.
Ray Dey
2

La respuesta de Michael Zehnich es de hecho correcta. Sin embargo, me topé con otro problema que causa la misma excepción.

El problema para mí fue que me faltaba la capacidad ID_CAP_MEDIALIB en mi WMAppManifest.xml.

<Capability Name="ID_CAP_MEDIALIB"/>

Espero que esto ayude.

mikeesouth
fuente