Odtwarzanie utworu powodującego awarię WP7 na telefonie, ale nie na emulatorze

13

Próbuję zaimplementować utwór w grze, która zaczyna się odtwarzać i ciągle zapętla się w Windows Phone 7 za pośrednictwem XNA 4.0. W emulatorze działa to dobrze, jednak po zainstalowaniu w telefonie po prostu wyświetla czarny ekran przed powrotem do ekranu głównego. Oto nieuczciwy kod, a jego skomentowanie powoduje, że aplikacja działa poprawnie na telefonie:

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

Sam plik utworu jest plikiem wma o długości 2:53, 2,28 MB i szybkością transmisji 106 kb / s.

Ponownie działa to doskonale na emulatorze, ale nie działa w ogóle na telefonie. Dzięki za wszelką pomoc, którą możesz udzielić!

Michael Zehnich
źródło
4
Spróbuj złapać próbę i sprawdź, jaki wyjątek się pojawia. To powinno pomóc w uzyskaniu pomocy w tym zakresie.
Ray Dey,
Dobra rada. Zgłoszony wyjątek to „System.InvalidOperationException: Odtwarzanie utworu nie powiodło się, sprawdź, czy utwór nie jest chroniony DRM”. Próbowałem też z piosenką zakodowaną w formacie MP3 i uzyskałem te same wyniki (pracował w emulatorze, nie działa w telefonie). Boczne pytanie: czy istnieje prosty sposób na wydrukowanie / zapisanie tekstu debugowania na telefonie ..? Moją jedyną opcją było narysowanie tekstu na ekranie, heh.
Michael Zehnich 29.01.11

Odpowiedzi:

13

Odkryliśmy to. Informacje są dostępne online, ale są naprawdę dobrze ukryte, więc opublikuję je tutaj dla pewności.

Zasadniczo, jeśli telefon jest podłączony do komputera i działa oprogramowanie Zune, blokuje ono multimedia w telefonie, co oznacza, że ​​MediaPlayers w aplikacjach nigdy nie będzie miał uprawnień do odtwarzania utworu.

Aby to zadziałało, użytkownik musi odłączyć telefon (tj. Odłączyć przewód USB) lub użyć narzędzia Windows Phone Connect, które zostało zaprojektowane z myślą o debugowaniu: http: // msdn. microsoft.com/en-us/library/gg180729%28v=VS.92%29.aspx - Nie próbowałem tego narzędzia, ale tethering działał jak urok.

Ponadto, gdy aplikacja nie ma uprawnień do odtwarzania utworu, zawiesi się, chyba że zostanie obsłużony wyjątek, więc upewnij się, że używasz bloków try / catch. Złapany wyjątek można po prostu zignorować.

Michael Zehnich
źródło
1
Ach, radości z DRM.
Jari Komppa
1
Dobrze wiedzieć, denerwujące jak diabli, jak sądzę, wielu programistów napotyka ten problem.
Ray Dey,
2

Odpowiedź Michaela Zehnicha jest rzeczywiście poprawna. Natknąłem się jednak na inny problem, który powoduje ten sam wyjątek.

Problem polegał na tym, że brakowało mi możliwości ID_CAP_MEDIALIB w moim pliku WMAppManifest.xml.

<Capability Name="ID_CAP_MEDIALIB"/>

Mam nadzieję że to pomoże.

mikeesouth
źródło