这段时间我们小组要给部门的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

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

  1. WPF中查看PDF文件

    需要打开PDF文件时,我们第一印象就是使用Adobe Reader.在开发中,经常会遇到需要展示PDF文件的需求.我们会借助于Adobe Reader的Active控件来实现.不过这需要客户的机器上安 ...

  2. 4:WPF中查看PDF文件

    引用连接:https://www.cnblogs.com/yang-fei/p/4885570.html 在Github上看到一个非常好的WPF中承载PDF文件的类库. https://github. ...

  3. 获取iPod library中的媒体文件

    [获取iPod library中的媒体文件] The Media Player framework provides facilities for playing movie, music, audi ...

  4. WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片

    原文:WPF中实现图片文件转换成Visual对象,Viewport3D对象转换成图片 1.图片文件转换成Visual对象 private Visual CreateVisual(string imag ...

  5. 总结:WPF中ResourceDictionary资源文件的查找和遍历方法

    原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary()     ...

  6. WPF中查看PDF文件之MoonPdfLib类库

    最近研究了两种PDF文件查看器,MoonPdfLib或者AdobeReader. 今天先说第一种,在网上扒到的很好的WPF中用MoonPdf类库来展示PDF文件. 在Sourceforge上下载到Mo ...

  7. 从MediaStorehe和sd中删除媒体文件

    参考资料:http://www.sandersdenardi.com/querying-and-removing-media-from-android-mediastore/ 从媒体表中删除: pri ...

  8. 在WPF中调用打开文件对话框

    // Create OpenFileDialog Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); ...

  9. WPF中查看PDF文件 - 基于开源的MoonPdfPanel (无需安装任何PDF阅读器)问题汇总

    致敬Yang-Fei—有一个简单的用法示例: http://www.cnblogs.com/yang-fei/p/4885570.html. 写MoonPdfPanel的哥们关于这个开源软件的实现介绍 ...

随机推荐

  1. ASP.NET控制HTTP缓存

    请求   响应 If-Modified-Since Last-Modified If-None-Match ETag 至于Expires和Cache-Control 附上几张高手的图 Etag 在使用 ...

  2. 关于Git bash 在win10重装系统情况下闪退并生成mintty.exe.stackdump文件的问题

    问题内容:在重装win10系统情况下,有可能会出现安装Git后右击Git bash会出现闪退并生成mintty.exe.stackdump文件 个人解决方案:查看网络上各位网友的意见和解决方法后,自己 ...

  3. C# winform程序实现开机自启动,并且识别是开机启动还是双击启动

    开机启动程序,在很多场合都会用到,尤其是那种在后台运行的程序. 效果图: 以上两幅图都用到了命令行启动程序,为了模拟开机启动或者其他程序调用此程序. 第一幅图:程序启动可以根据不同参数,执行不同的操作 ...

  4. ASP.NET Core 2 学习笔记(三)中间件

    之前ASP.NET中使用的HTTP Modules及HTTP Handlers,在ASP.NET Core中已不复存在,取而代之的是Middleware.Middleware除了简化了HTTP Mod ...

  5. ES6躬行记(22)——Promise

    在JavaScript中,回调函数是处理异步编程的常用解决方案,但层层嵌套的回调金字塔(如下代码所示)一直受人诟病,因为不仅在视觉上更加混乱,而且在管理上也更为复杂. setTimeout(() =& ...

  6. nginx 场景业务汇总 (初)

    本文链接:http://www.cnblogs.com/zhenghongxin/p/8891385.html 在下面的测试中,建议每次修改nginx配置文件后,都用此命令检查一下语法是否正确: [r ...

  7. list页面-按照choice筛选丶传condition过滤筛选项丶筛选与显示同步

    1.list页面:筛选功能优化,显示choices,传condition过滤筛选项 list_filter = [     # sites.FilterOption("name", ...

  8. 1.python的一些规范

    Python的一些规范 1.标识符 定义:允许作为名字的有效字符串集合 名字必须有实际意义,可读性好 首字母必须是字母或下划线(_) 剩下的字符可以是字母和数字或者下划线 大小写敏感 两种风格:con ...

  9. Linked List-237. Delete Node in a Linked List

    Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...

  10. php 删除二维数组中某个key值

    /** * 根据key删除数组中指定元素 * @param array $arr 数组 * @param string/int $key 键(key) * @return array */ priva ...