Silverlight で作成されたアプリを変換していますが、これまでのところ、1 つを除いてすべての問題を解決することに成功しています。
何らかの理由で、エミュレーターはアプリのオーディオ ファイルの再生を拒否し、例外もスローしません。確認したところ、着信音カテゴリでは音が出ます。
元のコードは次のとおりです。
<Grid x:Name="sharedFullScreenFilePathContainer"
Tag="{Binding StringFormat=\{0\},Converter={StaticResource fullScreenImageConverter}}">
<Image x:Name="fullScreenImage" Stretch="Fill"
Source="{Binding ElementName=sharedFullScreenFilePathContainer,Path=Tag, StringFormat=../Assets/images/\{0\}.jpg}"
ImageFailed="onFullScreenImageFailedToLoad" MouseLeftButtonDown="onPressedOnFullScreenImage" />
<MediaElement x:Name="mediaPlayer" AutoPlay="True"
Source="{Binding ElementName=sharedFullScreenFilePathContainer,Path=Tag, StringFormat=../Assets/sounds/\{0\}.wma}" />
</Grid>
そのため、このアイテムのコンテキストに設定した画像は実際に表示されますが、設定したパスに実際に存在するサウンドは再生されません (「Bin」フォルダーで確認しました)。
xaml の代わりにコードを使用しようとしましたが、まだ同じ問題があります。
私はこれを試しました(通常はバックグラウンドミュージックに使用されます):
AudioTrack audioTrack = new AudioTrack(new Uri("../Assets/sounds/" + fileToOpen, UriKind.Relative), "", "", "", null);
BackgroundAudioPlayer player = BackgroundAudioPlayer.Instance;
player.Track = audioTrack;
player.Play();
何も再生されず、例外もスローされませんでした。
次のコードも試しましたが、例外 (ファイルが見つからない例外) がスローされます。おそらく、正しく呼び出していないためです。
Stream stream = TitleContainer.OpenStream("@Assets/sounds/" + fileToOpen);
SoundEffect effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update();
effect.Play();
wmaファイルも試してみましたが、うまくいきませんでした。
また、mp3 ファイルの「copy to output directory」パラメーター (「always」および「only if new」) と「build action」パラメーター (「none」および「content」) を試してみました。何も役に立ちません。
誰でも私を助けてもらえますか?私は非常に長い間 Silverlight/WP の開発を行っていませんでしたが、修正方法がわかりません。
ところで、後でサウンドの再生がいつ終了したかを知る必要があるため (また、停止できるようにする必要があるため)、とにかくコードを使用したいと思います。やり方も教えていただけると嬉しいです(必要であれば新しい投稿で質問できます)。
編集: わかりました、問題を発見しました: MediaPlayer.Play()メソッドを使用しているときに奇妙な例外が発生し続け、例外についてチェックアウトした後、それが既知の問題であることがわかりました。FrameworkDispatcher.Update();を呼び出す必要があります。Play() メソッドを呼び出す直前。
したがって、解決策は次のようにすることです。
Song song = Song.FromUri(...);
MediaPlayer.Stop();
FrameworkDispatcher.Update();
MediaPlayer.Play(song);
例外は次のとおりです。
System.Windows.ni.dll で 'System.InvalidOperationException' が発生しました"
ここで解決策を見つけました。
ここで問題になるのは、Windows Phone のデモで関連するものを見つけられなかった理由です。また、この関数が何をするのか知りたいです。
どちらの質問にも誰も答えてくれなかったので、賞金をあげたいので、別の質問をします。
Windows phone の MediaPlayer クラスを使用する以外に解決策がない場合、オーディオ ファイルの再生を終了するイベントをキャプチャするにはどうすればよいですか? オーディオファイルの長さを取得しても機能しません(使用しようとしたクラスに関係なく、 0 length を返し続けます)...