WPF中播放声音媒体文件

这段时间我们小组要给部门的Annual Meeting準备一个WPF的抽奖程序,为了增加程序的有趣性,我们在程序中需要播放背景音乐等。由於对之前从未使用过WPF,所以对其中的声音等媒体文件播放不是很清楚,对一些简单的问题也花了相对较长的时间去解决,现在将其总结在下麵,以供大家参考。

1,使用SoundPlayer类

SoundPlayer类位於System.Media命名空间下,它只能播放.wav格式的声音文件。其使用方法简单如下:

 

[C#] view plaincopy

 

  1. using(SoundPlayer player = new SoundPlayer())  
  2. {  
  3. string location=System.Environment.CurrentDirectory+"//Sounds//explosion.wav";  
  4. player.SoundLocation=location;  
  5. player.Play();  
  6. }  

上面的代码段即是播放主程序文件夹内下的Sounds文件夹下的explosion.wav声音文件。如果你的声音文件比较小,可以直接作為资源嵌入到应用程序中,这裡的Location属性使用相对路径即可。

除了上面提到的文件格式限制外,这个类还有个缺陷,就是你只能同时播放一个声音文件,即便你实例化几个不同的类,在我的程序中最初考虑一个背景音乐文件一直循环播放,可是当我把光标放置於另外一个我自己定制的UserControl上,会播放一个声音,而之前的背景音乐就会消失,於是我不得不用其它的方法。

2,使用MediaPlayer类

MediaPlayer类位於System.Windows.Media命名空间下,关於此类详情参考http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer(v=VS.100).aspx

如下示例:

 

[C#] view plaincopy

 

  1. MediaPlayer player = new MediaPlayer();  
  2. player.Open(new Uri(@"sampleMedia/xbox.wmv", UriKind.Relative));  
  3. VideoDrawing aVideoDrawing = new VideoDrawing();  
  4. aVideoDrawing.Rect = new Rect(0, 0, 100, 100);  
  5. aVideoDrawing.Player = player;  
  6. player.Play();  

3,在XAML中使用MediaPlayer元素

MediaPlayer元素可以方便的在XAML中直接使用MediaPlayer,如下示例:

[XML] view plaincopy

 

  1. <MediaElement Name="MyMediaElement">  
  2. <MediaElement.Triggers>  
  3.         <EventTrigger RoutedEvent="MediaElement.Loaded">  
  4.           <EventTrigger.Actions>  
  5.             <BeginStoryboard>  
  6.               <Storyboard>  
  7.                 <MediaTimeline x:Name="mediatiemline" Source=<span style="color: #a31515;">"pack://siteoforigin:,,,/Sounds/test.mp3"</span> Storyboard.TargetName="MyMediaElement"    
  8.                  RepeatBehavior="Forever" />   
  9.               </Storyboard>  
  10.             </BeginStoryboard>  
  11.           </EventTrigger.Actions>  
  12.         </EventTrigger>  
  13.       </MediaElement.Triggers>  
  14. </MediaElement>  

以上示例是在加载时MediaElement循环播放音乐文件。

请注意Source="pack://siteoforigin:,,,/Sounds/test.mp3" 这裡的路径表示方法,亦可以直接在Code-behind中直接设置:

 

我们可以发现,通过MediaPlayer可以解决文件格式限制问题,还可以解决不能同时播放几个声音的问题。

 

[C#] view plaincopy

 

  1. this.mediatiemline.Source=new Uri(<span style="background-color: #ffff00;">Environment.CurrentDirectory </span>+ <a><span style="color: #4c7d08;">//Sounds//test.mp3</span></a>);  

[C#] view plaincopy

 

  1. ps:<span style="background-color: #ffff00;"><span style="color: #ff0000;">Environment.CurrentDirectory:<span style="background-color: #ffffff;">获取或设置当前工作目录的完全限定路径。这个就解决了相对路径的问题。</span></span></span>  

4,使用MediaPlayer(包括MediaElement)的注意事项

我们在测试的时候发现,由於电脑上Windows Media Player的版本比较低,导致在播放一些音乐文件的时候出问题,没有声音,我们花费了很长时间解决代码的问题,最终发现问题是在Windows Media Player版本上,所以如果大家遇到类似问题请记得更新你的Windows Media Player為较高版本,XP系统可以在这裡下载11.0版本:

http://www.microsoft.com/downloads/details.aspx?familyid=1D224714-E238-4E45-8668-5166114010CA&displaylang=en

 

时间: 2024-10-12 11:07:30

WPF中播放声音媒体文件的相关文章

WordPress中给媒体文件添加分类和标签的PHP功能实现_php技巧

从WordPress后台媒体库上传的媒体文件,不像文章那样可以给它指定分类和标签,但是很多时候我们又需要这样的功能,如一些下载站.图片站等. 媒体编辑页面的原始状态 很明显,在WordPress后台的媒体编辑页面,默认情况下是没有分类和标签给你选的. 给媒体文件添加分类 在当前主题的functions.php中添加以下php代码: function ludou_add_categories_to_attachments() { register_taxonomy_for_object_type(

利用Helix Server的SMIL支持在ASP中生成媒体流的播放列表

server|媒体 开发视频点播网站时或许会需要连续播放一系列流媒体文件,我的经验是可以使用SMIL语言动态生成需要的播放列表文件.以下将对这种方法作出说明.我感觉这并不是一个很好的方法,但可作为一种思路供大家参考. 首先我们应该了解一下SMIL语言的结构.SMIL是专用于流媒体服务器的一种语言,它是符合XML语言规范的.以下是一个典型的用于Helix Server的SMIL文件: 113.smi--------------<smil><head><meta name=&qu

Android sdcard媒体文件更新

本文出之于网络,非本人撰写             Android平台基于Linux和开放手机联盟(OHA)系统,经过中国移动的创新研发,设计出拥有新颖独特的用户操作界面,增强了浏览器能力和WAP 兼容性,优化了多媒体领域的OpenCORE.浏览器领域的WebKit等业内众多知名引擎,增加了包括游戏.Widget.Java ME等在内的先进平台中间件.本文主要介绍如何利用OPhone平台提供的多媒体编程环境进行音乐资源的管理与播放. MediaScanner与音乐信息扫描 Android系统在S

wpf中怎样将媒体文件写入资源文件中

问题描述 我要做一个用户控件,这个用户控件中我用到了MediaElement控件,在这个控件中我播放了声音或者是视频文件!!这个用户控件做好后,我发布dll文件,当引用该dll文件的时候,当我把着个媒体文件的位置移动的时候,这个视频或者声音文件就播放不了!问题是我没有把该文件写入资源文件中,高手们,教教小弟吧.跪求赐教啊, 解决方案 解决方案二:怎么没人回答啊,555555........在线等啊....解决方案三:你是否已把该文件添加到工程中?把该文件添加到工程中,然后在属性中设置其生成操作为

WPF中使用文件浏览对话框的几种方式

原文:WPF中使用文件浏览对话框的几种方式 WPF本身并没有为我们提供文件浏览的控件, 也不能直接使用Forms中的控件,而文件浏览对话框又是我们最常用的控件之一. 下面是我实现的方式 方式1: 使用win32控件OpenFileDialog ? 1 2 3 4 5 6 7 Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog(); ofd.DefaultExt = ".xml"; ofd.Fil

《Adobe Premiere Pro CS5经典教程》——2.7 管理文件夹中的媒体素材

2.7 管理文件夹中的媒体素材 Project面板是一种访问和组织素材--视频剪辑.音频文件.静态图像.图形和序列--的方法.每个列出的媒体素材都是一个链接,文件自身仍在它们的文件夹内,而素材存储在bins(文件夹)内.bins就像文件夹一样,它在Adobe Premiere Pro内组织和分类素材. 在Project面板中导入并按逻辑顺序组织素材很简单.您可以创建新的文件夹,还可以在文件夹内创建文件夹. 这一节将介绍Project面板中的一些选项,然后重新组织用过的剪辑.如果您想重新开始,请打

Wpf中MediaElement循环播放

原文:Wpf中MediaElement循环播放       前一段时间做了一个项目,里面牵涉到媒体文件的循环播放问题,在网上看了好多例子,都是在xaml中添加为MediaElement添加一个TimeLine,不符合我的项目需求,就自己想了一个办法,基本的思路就是在媒体播放完毕后再次Play一下就OK了,废话不多说,首先Show一下我的代码吧:    写一个方法用来动态创建一个MediaElement:这里的ScreenModel是我创建的一个类,大家根据需要可以修改    MediaEleme

WPF中如何使用行为示例:Canvas控件拖放行为的演示

1.获取行为的支持,安装Expression Blend 4 SDK(http://www.microsoft.com/zh-cn/download/details.aspx?id=10801) . 2.创建行为库 (1)创建一个Class Project,添加WPF必备的以及WPF中支持行为必备的dll文件. 其中,System.Windows.Interactivity.dll组件在目录(需要安装Blend SDKs):C:\Program Files (x86)\Microsoft SDK

接口-在上传图文消息素材时,总报错说是不合法的媒体文件id,不知道什么才是正确的id呢

问题描述 在上传图文消息素材时,总报错说是不合法的媒体文件id,不知道什么才是正确的id呢 package main;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import pojo.AccessToken;import pojo.Article;import pojo.Articles;import util.WeixinUtil