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

1,使用SoundPlayer类

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

  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

如下示例:

  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,如下示例:

  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可以解决文件格式限制问题,还可以解决不能同时播放几个声音的问题。

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

最新文章

  1. c#通用登录模块,简单好用,一贴见效
  2. 双十一 VS 火车票(12306)
  3. Slideout.js – 触摸滑出式 Web App 导航菜单
  4. application
  5. process vs thread
  6. 关于Filezilla是否支持sftp
  7. 欧拉工程第74题:Digit factorial chains
  8. CentOS环境下Java开发环境的搭建
  9. fzu 2037 Maximum Value Problem
  10. opencart配置
  11. JDK中日期和时间的几个常用类浅析(三)
  12. 浅谈Android studio中OKHttp安装及简单使用
  13. 使用vue框架运行npm run dev 时报错解决
  14. RxJava(八)concat符操作处理多数据源
  15. SQL Server扫盲系列——镜像篇
  16. 分布式存储ceph——(3)ceph常用命令
  17. 【转】Android OkHttp3简介和使用详解
  18. PHP 利用CURL(HTTP)实现服务器上传文件至另一服务器
  19. js 性能篇--dom 重绘 重排 节流
  20. python改文件名

热门文章

  1. python3字符集之间--encode与decode之间的转码详解
  2. 基于STM32的平衡车机器人设计-硬件电路设计
  3. 解决创建带有NameSpace的XML文件出现空白xmlns的问题
  4. 工信部公示网络安全示范项目 网易云易盾“自适应DDoS攻击深度检测和防御系统”入选
  5. 如何使用socket进行java网络编程(五)
  6. OpenSL的使用
  7. if判断和switch case 和三元运算符整理
  8. MySQL中整型和字符串类型指定长度的含义
  9. PHPhotos
  10. laravel 的passport Oauth 认证登录请求 的 oauth_token 重置