【问题标题】:Playing sounds in WPF app using MediaPlayer使用 MediaPlayer 在 WPF 应用程序中播放声音
【发布时间】:2020-05-30 10:10:40
【问题描述】:

我想使用 MediaPlayer 在 WPF 应用程序中播放声音。问题是我不能直接从 SoundPlayer 中的资源文件中使用该文件

SoundPlayer player = new SoundPlayer(R.testSound);

所以我用路径听起来像这样:

mediaPlayer.Open(new Uri("../../Resources/testSound.wav", UriKind.Relative)); //working
mediaPlayer.Open(new Uri("pack://application:,,,/Resources/testSound.wav")); //not wroking

如果没有相对路径,是否有可能做到这一点?相对路径是坏主意吗?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    如果您注册到 MediaFailed 事件,您将看到它返回一条消息,上面写着“System.NotSupportedException:媒体仅支持源站点包 URI。”

    解决方案

    1. 将 testsound.wav 的 Build Action 编辑为“Content”和“Copy Always”。这是原产地解决方案所必需的。
    2. 打开媒体播放器时使用“siteoforigin”包 URI 而不是“应用程序”。这是工作代码:
    using System;
    using System.Windows;
    using System.Windows.Media;
    
    namespace SoundTest
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            MediaPlayer mp;
    
            public MainWindow()
            {
                InitializeComponent();
                this.Loaded += MainWindow_Loaded;
            }
    
            private void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                try
                {
                    Console.WriteLine("Dispatcher called");
                    mp = new MediaPlayer();
                    mp.MediaOpened += Mp_MediaOpened;
                    mp.MediaFailed += Mp_MediaFailed;
                    mp.Open(new Uri("pack://siteoforigin:,,,/Resources/testsound.wav"));
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"{ex.GetType()}: {ex.Message}\n{ex.StackTrace}");
                }
            }
    
            private void Mp_MediaFailed(object sender, ExceptionEventArgs e)
            {
                var ex = e.ErrorException;
                Console.WriteLine($"MEDIA FAILED: {ex.GetType()}: {ex.Message}\n{ex.StackTrace}");
            }
    
            private void Mp_MediaOpened(object sender, EventArgs e)
            {
                mp.Play();
                Console.WriteLine("Play called");
            }
        }
    }
    
    

    【讨论】:

    • 只有一个问题。我创建了一个设置/安装程序,在应用程序中安装后,我听不到音乐。如何将这些声音文件添加到安装程序?
    • 你需要给我更多信息。我不知道你创建了什么样的安装程序,或者你从哪里得到它,或者你的安装程序代码是什么样的。我在这里瞎了。
    • 我使用了 Microsoft Visual Studio 安装程序项目。我以这种方式制作了安装程序:youtu.be/mTkh3sgh6tI?t=41
    • 在视频中,第 3 步显示您可以指定要包含的项目的主要输出。这应该会自动包含您的“Resources/testsound.wav”文件。要验证这是否属实,请构建您的安装程序,运行安装程序,然后检查您的安装文件夹以查看它是否包含您的 .exe 以及“Resources/testsound.wav”文件。如果没有,那么您可能必须执行视频中的第 4 步并手动添加文件,并指定要安装它的目录。如果这不起作用,您最好为此打开一个新的 stackoverflow 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多