WP7が電話でクラッシュする原因となる曲を再生するが、エミュレーターではクラッシュしない


13

XNA 4.0を介してWindows Phone 7で再生を開始し、継続的にループするゲームに曲を実装しようとしています。エミュレーターでは、これは正常に機能しますが、電話に展開すると、ホーム画面に戻る前に黒い画面が表示されるだけです。問題の不正なコードは次のとおりです。このコードをコメント化すると、電話でアプリが正常に実行されます。

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

曲ファイル自体は、長さが2:53の2.28mb .wmaファイルで、ビットレートは106kbpsです。

繰り返しますが、これはエミュレーターでは完全に機能しますが、電話ではまったく動作しません。あなたが提供できる助けをありがとう!


4
試行錯誤を繰り返して、発生している例外を確認してください。これは、これに関するいくつかの助けを得るのに役立つはずです。
レイ・デイ

いいアドバイス。スローされる例外は、「System.InvalidOperationException:曲の再生に失敗しました。曲がDRMで保護されていないことを確認してください。」また、MP3としてエンコードされた曲を試してみたところ、同じ結果が得られました(エミュレーターで動作し、電話では動作しません)。副次的な質問:電話でデバッグテキストを印刷/保存する簡単な方法はありますか?私の唯一の選択肢は、画面にテキストを描画することでした。
マイケルゼニヒ

回答:


13

これを理解しました。情報はオンラインで入手できますが、非常によく隠されているので、適切な手段のためにここに投稿します。

基本的に、電話がコンピューターにつながれ、Zuneソフトウェアが実行されている場合、電話のメディアをロックします。つまり、アプリ内のMediaPlayerには曲を再生する権限がありません

動作させるためには、ユーザーは電話のテザリングを解除する(USBコードを抜く)か、デバッグに関してこれを念頭に置いて設計されたWindows Phone Connectツールを使用する必要があります:http:// msdn。 microsoft.com/en-us/library/gg180729%28v=VS.92%29.aspx-このツールは試していませんが、テザリングは魅力のように機能しました。

また、アプリに曲を再生する権限がない場合は、例外が処理されない限りクラッシュするため、try / catchブロックを使用するようにしてください。キャッチされた例外は単純に無視できます。


1
ああ、DRMの喜び。
ヤリコンパ

1
知っておくといいが、私はかなりの数の開発者がこの問題にぶつかると想像するほど厄介だ。
レイデイ

2

Michael Zehnichからの答えは確かに正しいです。しかし、私は同じ例外を引き起こす別の問題に出会いました。

私にとっての問題は、WMAppManifest.xmlにID_CAP_MEDIALIB機能がないことでした。

<Capability Name="ID_CAP_MEDIALIB"/>

お役に立てれば。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.