wpf mediaplayer 播放mp3音乐

发布时间 2023-11-25 11:24:40作者: JohnnyLei

示例1

 private DelegateCommand _PlaySoundCommand;

 public DelegateCommand PlaySoundCommand =>
     _PlaySoundCommand ?? (_PlaySoundCommand = new DelegateCommand(ExecutePlaySoundCommand));

 private void ExecutePlaySoundCommand()
 {
     try
     {
         MediaPlayer player = new MediaPlayer();
         string url = "E:\\ss\\a.mp3";
         Uri uri = new Uri(url, UriKind.RelativeOrAbsolute);
         player.MediaOpened += Player_MediaOpened; ;
         player.MediaFailed += Player_MediaFailed; ;
         player.Open(uri);
         player.Play();
 
     }
     catch (Exception ex)
     {
     }
 }

 private void Player_MediaFailed(object sender, ExceptionEventArgs e)
 {
 }

 private void Player_MediaOpened(object sender, EventArgs e)
 {
 }

示例2

 private DelegateCommand _PlaySoundCommand;

 public DelegateCommand PlaySoundCommand =>
     _PlaySoundCommand ?? (_PlaySoundCommand = new DelegateCommand(ExecutePlaySoundCommand));

 private void ExecutePlaySoundCommand()
 {
     try
     {
         MediaPlayer player = new MediaPlayer();
//无法播放报错 "System.NotSupportedException: Only site-of-origin pack URIs are supported for media."
string url = "pack://application:,,,/DMData.Monitor.Modules.ModuleName;component/ss/a.mp3"; Uri uri = new Uri(url, UriKind.RelativeOrAbsolute); player.MediaOpened += Player_MediaOpened; ; player.MediaFailed += Player_MediaFailed; ; player.Open(uri); player.Play(); //MediaElement mediaElement = new MediaElement(); //Uri uri = new Uri("pack://application:,,,/DMData.Monitor.Modules.ModuleName;component/ss/a.mp3"); //mediaElement.Source = uri; //mediaElement.LoadedBehavior = MediaState.Manual; //mediaElement.UnloadedBehavior = MediaState.Manual; //mediaElement.Volume = 1.0; // 设置为最大音量 //mediaElement.Play(); } catch (Exception ex) { } } private void Player_MediaFailed(object sender, ExceptionEventArgs e) { } private void Player_MediaOpened(object sender, EventArgs e) { }

解决

mp3设置为内容 进行输出

 

    private DelegateCommand _PlaySoundCommand;

    public DelegateCommand PlaySoundCommand =>
        _PlaySoundCommand ?? (_PlaySoundCommand = new DelegateCommand(ExecutePlaySoundCommand));

    private void ExecutePlaySoundCommand()
    {
        try
        {
            MediaPlayer player = new MediaPlayer();
            string url = "pack://siteoforigin:,,,/ss/a.mp3";
            Uri uri = new Uri(url, UriKind.RelativeOrAbsolute);
            player.MediaOpened += Player_MediaOpened; ;
            player.MediaFailed += Player_MediaFailed; ;
            player.Open(uri);
            player.Play();

         
        }
        catch (Exception ex)
        {
        }
    }

    private void Player_MediaFailed(object sender, ExceptionEventArgs e)
    {
    }

    private void Player_MediaOpened(object sender, EventArgs e)
    {
    }

wpf siteoforigin 和application的区别

SiteOfOrigin和Application是WPF中的两个重要概念,它们有以下区别:

  1. SiteOfOrigin(来源站点):指的是XAP文件所在的位置,即WPF应用程序的部署位置。在SiteOfOrigin中,能够访问的资源是受信任的,可以直接访问SiteOfOrigin中的任何资源,其中包括应用程序所需的所有文件和资源。SiteOfOrigin通常是存在于本地计算机或者网络上的一个文件夹或者网站,在应用程序启动时被加载。

  2. Application(应用程序):指的是WPF应用程序本身。Application是一个关于应用程序的类,包含了应用程序的各种属性和方法,用于控制应用程序的行为和外观。可以通过Application类来配置应用程序的外观、行为和行为响应方式,也可以通过它来访问资源、设置应用程序范围内的全局变量等。在WPF中,一个应用程序可以有多个Application对象,它们可以是相互独立的,也可以是共享全局资源的。

综上所述,SiteOfOrigin和Application的区别主要在于它们所代表的不同概念。SiteOfOrigin指的是XAP文件所在的位置,即WPF应用程序的部署位置,它代表了应用程序所在的地方,包含了应用程序的所有文件和资源;而Application是一个关于应用程序的类,它代表了WPF应用程序本身,包含了应用程序的属性和方法,用于控制应用程序的行.

为了更清楚地理解SiteOfOrigin和Application的区别,可以从以下几个方面进行比较:

  1. 访问权限:SiteOfOrigin中的资源是受信任的,可以直接访问,而Application中的资源可能需要通过代码逻辑或权限控制进行访问。

  2. 部署位置:SiteOfOrigin指的是XAP文件的存放位置,可以是本地计算机的文件夹或者网络上的一个网站。而Application是应用程序本身,可以独立部署在不同的设备上。

  3. 资源访问范围:SiteOfOrigin中的资源包括XAP文件中的所有文件和资源,可以在应用程序中直接引用。而Application中的资源通常指的是应用程序内部定义的资源,只能在应用程序内部的代码中使用。

  4. 生命周期:SiteOfOrigin中的资源的生命周期与XAP文件的存在期限相同,一旦XAP文件被删除或移动,SiteOfOrigin中的资源将无法访问。而Application在应用程序的执行过程中一直存在,其属性和方法可以在应用程序的整个生命周期中使用。

总体来说,SiteOfOrigin主要用于确定应用程序部署位置和访问受信任的资源,而Application是用于控制应用程序行为和访问应用程序