如何在 WPF 中播放声音

Posted

技术标签:

【中文标题】如何在 WPF 中播放声音【英文标题】:How to play a sound in WPF 【发布时间】:2009-12-01 22:35:03 【问题描述】:

我是一名 C# 程序员新手,在使用 VS 2008 在我的 WPF (Windows) 应用程序中播放音乐时遇到问题。这是一个网络应用程序。我认为正在发生的是myMediaElementExample 变量在用于执行ExpenseReportPage.xaml.cs 文件中的Play 方法时为空。

现在这个程序正在构建,但是在我运行它之后,它在myMediaElementExample.Play(); 行遇到了一个异常。异常说:

An unhandled win32 exception occurred in the WpfApplication1.vhost.exe [948].

你们中的任何人都可以给我一些建议吗?我还可以尝试什么?我只包含了与此问题相关的代码:

ExpenseReportPage.xaml.cs 文件:

namespace ExpenseIt

    public partial class ExpenseReportPage : Page
    
...    

    public partial class MediaElementExample : Page
    
        MediaElement myMediaElementExample = new MediaElement();

        public MediaElementExample()
        
         

        public void OnMouseDownPlayMedia(object sender, RoutedEventArgs args) //MouseButtonEventArgs
        
            // The Play method will begin the media if it is not currently active or 
            // resume media if it is paused. This has no effect if the media is
            // already running.
            myMediaElementExample.Play();
        
    

HomePage.xaml.cs 文件:

namespace ExpenseIt

    public partial class HomePage : Page
    
        MediaElementExample mediaElementExample = new MediaElementExample();

        public HomePage()
        
            InitializeComponent();
                
        void HandleClick(object sender, RoutedEventArgs e) 
            
                Button srcButton = e.Source as Button;
                srcButton.Width = 200;
                mediaElementExample.OnMouseDownPlayMedia(sender, e);
            
    

【问题讨论】:

哇,我期待一个简单的。 你在哪里设置媒体源,即播放的 mp3/wav? 【参考方案1】:

出于调试目的,围绕该行:

myMediaElementExample.Play();

带有try catch 块:

try

    myMediaElementExample.Play();

catch (Exception ex)

    // Either print out the exception or examine it in the debugger.

这将为您提供有关导致异常的原因的更多信息。如果仍然不清楚,请使用此新信息更新问题。

如果myMediaElementExample 为空,那么我希望您会得到System.NullReferenceException,而不是您看到的win32。您可以通过在myMediaElementExample.Play(); 行上设置断点并检查它来检查它。

一旦您发现并解决了问题,您可以删除异常处理程序,或者如果您想小心保留它,但只捕获MediaElement.Play 引发的异常。

【讨论】:

+1 用于防御性编程。为了获得额外的好处,您可以设置一个记录器以通过电子邮件向您发送异常详细信息。【参考方案2】:

谢谢克里斯和诺拉。我确实找到了异常原因:

Cannot control media unless LoadedBehavior or UnloadedBehavior is set to Manual.

但是我发现了一个非常简单的解决方法!我用谷歌搜索了解决方案:

<MediaElement Source="The Boogie Monster.mp3" />

在 xaml 文件中。

【讨论】:

【参考方案3】:

原始问题的解决方案是将 LoadedBehavior="Manual" 添加到 XAML 中的 MediaElement。例如:

<MediaElement Source="Samples/robot.wmv" LoadedBehavior="Manual" />

【讨论】:

以上是关于如何在 WPF 中播放声音的主要内容,如果未能解决你的问题,请参考以下文章

使用 c# wpf 从资源文件播放声音

从 NAudio 访问 WPF MediaElement 声音流

从 url 下载后播放声音文件

如何在c#中只在耳机的左声道和耳机的右声道播放声音?

在 WPF Frame 控件中关闭导航页面声音

我如何知道声音是不是在 android 中播放完毕?