【问题标题】:How to resume playing audio with MediaPlayer?如何使用 MediaPlayer 恢复播放音频?
【发布时间】:2012-09-04 15:17:03
【问题描述】:

我有一个 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);
       }        
   }

谢谢。

【问题讨论】:

    标签: wpf media-player caliburn.micro


    【解决方案1】:

    我很确定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);
       }        
    }
    

    【讨论】:

    • 感谢您的回答。我也是这么想的,但它对我不起作用。当我按下播放时,它会从头开始播放。也许我错过了一些设置?
    • 我不确定您正在播放什么类型的媒体文件。如果是流式音频,则可能不允许恢复。在这种情况下暂停与按停止相同。您必须查阅您所使用的音频格式的文档,并调试您的代码以查看CanPause 的值对于您的MediaPlayer 以及单击暂停时Position 的值。
    • 是wma文件,CanPause为真,Position有值。当我在 WindowsMediaPlayer 中播放 .wma 文件时,我可以停止和恢复...
    • 您能否更新您的问题并发布您在按下Play 按钮时调用的代码?
    • 非常感谢,它有效。只有 MediaPlayer 不知道 Uri,所以我改用 Player.Source。
    猜你喜欢
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多