1

WPF Caliburn.Micro アプリケーションがあり、MediaPlayer クラスを使用してオーディオを再生します。再生、停止、一時停止の機能を実装しましたが、MediaPlayer に (一時停止後の) 再開のメソッドがありません。これで私を助けてもらえますか?

これが私のコードの一部です:

       public void Play()
   {
       try
       {
           var audio = Tpv.GetAudio(SelectedTpv.TpvId);
           var file = Path.GetTempFileName().Replace(".tmp", ".wma");
           File.WriteAllBytes(file, audio);

           Player.Open(new Uri(file, UriKind.Absolute));
           Player.Play();
           IsPlaying = true;

       }
       catch (Exception ex)
       {
           MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure",
            MessageBoxButton.OK, MessageBoxImage.Error);

           Console.WriteLine(ex.Message);
       }        
   }

ありがとう。

4

1 に答える 1

2

Play再開機能も処理するはずだと確信しています。System.Windows.Media.MediaPlayerのMSDN によると、Playメソッドは「現在の位置からメディアを再生する」ことになっています。これは、メディアを最初から再生している場合、位置が 0 であることを意味します。一時停止すると、メディアは特定の位置で一時停止します。再生をもう一度押すと、メディアを一時停止したのと同じ位置から再生が再開されます。

編集:

あなたが提供したコードの更新に基づいて、再生をクリックするたびにファイルをロードしていることが問題のようです。これにより、以前の一時停止情報が消去され、ファイルが毎回新しいものとして扱われます。ファイルがまだロードされていない場合はロードするように、何らかのチェックを入れる必要があります。それ以外の場合は、Playメソッドを呼び出しPlayer.Play()て再開する必要があります。

Player.Closeまた、選択したアイテムを切り替えるときにも呼び出す必要があることに注意してください。これによりPlay、別のファイルをロードする必要があることがメソッドに通知されます。

public void Play()
{
   try
   {
       // Check if the player already has a file loaded, otherwise load it.
       if(Player.Source == null) { 
           var audio = Tpv.GetAudio(SelectedTpv.TpvId);
           var file = Path.GetTempFileName().Replace(".tmp", ".wma");
           File.WriteAllBytes(file, audio);

           Player.Open(new Uri(file, UriKind.Absolute));
       }

       Player.Play();
       IsPlaying = true;

   }
   catch (Exception ex)
   {
       MessageBox.Show(String.Format("Failed to play audio:\n{0}", ex.Message), "Failure",
        MessageBoxButton.OK, MessageBoxImage.Error);

       Console.WriteLine(ex.Message);
   }        
}
于 2012-09-04T15:23:46.677 に答える