如何使用MediaPlayer恢复播放音频?

时间:2012-09-04 15:17:03

标签: wpf media-player caliburn.micro

我有一个WPF Caliburn.Micro应用程序,我使用MediaPlayer类来播放音频。我实现了播放,停止和暂停功能,但我没有在MediaPlayer中看到Resume(暂停后)的方法。你能帮帮我吗?

以下是我的一些代码:

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

感谢。

1 个答案:

答案 0 :(得分:1)

我很确定Play也应该处理恢复功能。根据{{​​3}}的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);
   }        
}