WPF中播放声音媒体文件
这段时间我们小组要给部门的Annual Meeting準备一个WPF的抽奖程序,为了增加程序的有趣性,我们在程序中需要播放背景音乐等。由於对之前从未使用过WPF,所以对其中的声音等媒体文件播放不是很清楚,对一些简单的问题也花了相对较长的时间去解决,现在将其总结在下麵,以供大家参考。
1,使用SoundPlayer类
SoundPlayer类位於System.Media命名空间下,它只能播放.wav格式的声音文件。其使用方法简单如下:
using(SoundPlayer player = new SoundPlayer())
{
string location=System.Environment.CurrentDirectory+"//Sounds//explosion.wav";
player.SoundLocation=location;
player.Play();
}
上面的代码段即是播放主程序文件夹内下的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。
如下示例:
MediaPlayer player = new MediaPlayer();
player.Open(new Uri(@"sampleMedia/xbox.wmv", UriKind.Relative));
VideoDrawing aVideoDrawing = new VideoDrawing();
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
aVideoDrawing.Player = player;
player.Play();
3,在XAML中使用MediaPlayer元素
MediaPlayer元素可以方便的在XAML中直接使用MediaPlayer,如下示例:
<MediaElement Name="MyMediaElement">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="MediaElement.Loaded">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<MediaTimeline x:Name="mediatiemline" Source=<span style="color: #a31515;">"pack://siteoforigin:,,,/Sounds/test.mp3"</span> Storyboard.TargetName="MyMediaElement"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
以上示例是在加载时MediaElement循环播放音乐文件。
请注意Source="pack://siteoforigin:,,,/Sounds/test.mp3" 这裡的路径表示方法,亦可以直接在Code-behind中直接设置:
我们可以发现,通过MediaPlayer可以解决文件格式限制问题,还可以解决不能同时播放几个声音的问题。
this.mediatiemline.Source=new Uri(<span style="background-color: #ffff00;">Environment.CurrentDirectory </span>+ <a><span style="color: #4c7d08;">//Sounds//test.mp3</span></a>);
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
- 43. 等价二叉树 | 厚土Go学习笔记
- 51. Socket服务端和客户端使用TCP协议通讯 | 厚土Go学习笔记
- 50. RESTful API的简单实现 | 厚土Go学习笔记
- go实现西瓜视频花椒直播等平台智能答题
- 主备切换的准备工作(二) (r7笔记第85天)
- 49. 访问PostgreSQL数据库增删改查 | 厚土Go学习笔记
- Golang中Interface类型详解
- Go语言的网络编程简介
- 一条关于swap争用的报警邮件分析(二)(r8笔记第4天)
- Golang泛型编程初体验
- 厚土Go学习笔记 | 14. switch 的条件写的有点灵活,不过风格还是go的一贯风格
- Go语言·我的性能我做主
- 47. 访问MySql数据库实现增删改查 | 厚土Go学习笔记
- system表空间不足的问题分析(二) (r8笔记第5天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 单细胞转录组高级分析四:scRNA数据推断CNV
- 0808-7.1.1-如何在CDP7.1.1指定Hive SQL的资源池队列
- iOS多线程之GCD、OperationQueue 对比和实践记录
- singleR的7个数据库文件下载失败的解决方案
- Spring Boot 如何快速集成 Redis 哨兵?
- 一行命令实现成“吨”测试数据的转码
- Jenkins参数化构建与触发
- 数据无法模拟,自动化受阻怎么办?
- Quickprop介绍:一个加速梯度下降的学习方法
- PandaSQL:一个让你能够通过SQL语句进行pandas的操作的python包
- 每个数据科学家都应该知道的20个NumPy操作
- 机器学习特性缩放的介绍,什么时候为什么使用
- 聊聊claudb的set command
- 聊聊claudb的zset command
- 聊聊claudb的pubsub command