惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
A
About on SuperTechFans
博客园 - Franky
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog
Microsoft Security Blog
Microsoft Security Blog
L
LangChain Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
U
Unit 42
Martin Fowler
Martin Fowler
Y
Y Combinator Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 叶小钗
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research
The Cloudflare Blog
Last Week in AI
Last Week in AI
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
爱范儿
爱范儿
V
V2EX
G
Google Developers Blog

博客园 - 軒轅

“Windows Phone 7 Game Development”一书可提供下载 Windows Phone 7范例游戏Platformer实战9——僵尸怪 Windows Phone 7框架、控件和开源项目第二季 经典Windows Phone 7开源程序介绍——基于定位的社交应用Foursquare Windows Phone 7 系统信息获取示例 Windows Phone 7 开发向导 V2.0提供下载 Windows Phone 7框架、控件和开源项目第一季 Windows Phone 7范例游戏Platformer实战8——精灵动画的绘制实现 WP7上Metro风格的程序栏图标汇总 Windows Phone 7范例游戏Platformer实战7——简单动画的绘制实现原理 两本全彩Windows Phone 7书籍提供下载 Windows Phone 7 开发资源大全 Windows Phone 7范例游戏Platformer实战6——加速度传感器解读 Windows Phone 7范例游戏Platformer实战5——多点触控编程 Windows Phone 7范例游戏Platformer实战4——冲突检测的实现 Windows Phone 7范例游戏Platformer实战3——游戏资源和内容管道 Windows Phone 7范例游戏Platformer实战2——游戏设计初步 Windows Phone 7范例游戏Platformer实战1——5大平台支持 WP7版社交程序现真容,与Bing Map的完美结合。
Windows Phone 7 Silverlight程序中声音播放实现
軒轅 · 2010-12-23 · via 博客园 - 軒轅

在做一个WP7的Silverlight项目时,需要实现使用声音的播放,我参考了很多开源的项目,发现它们实现这个功能时都引用一个属于XNA框架的DLL,这一点当初觉得非常奇怪,为此我也就照葫芦画瓢实现了。本人还自我良好地认为WP7上的Silverlight框架本身是不具备声音播放的功能,考虑到避免在XNA和SL上重复地实现两个声音播放的库,WP7的开发人员将声音的播放接口只封装在XNA中。后来发现我想当然了。


现在我来先讲一下如何在Silverlight程序中使用XNA接口实现声音的播放,首先我们需要在项目中添加Microsoft.Xna.Framework.dll的引用。


在添加完引用后,接下来在代码文件上方使用using添加下面两个命名空间:

using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework;

该类只支持WAV文件,如果你是声音文件是.mp3格式的话,你需要使用一个转换工具将其转换为WAV的格式。网络上很多这样的免费工具,这里就不多叙了。

接下来将WAV音频文件添加到项目。我们可以使用TitleContainer.OpenStream()方法将WAV文件转换为一个Stream对象。而后在使用前面的Stream对象创建一个SoundEffect对象即可实现声音的播放了。代码如下:

Stream stream = TitleContainer.OpenStream("sounds/crickets.wav");SoundEffect effect = SoundEffect.FromStream(stream);FrameworkDispatcher.Update();effect.Play();


通常情况下,一个格式为WAV的文件要比压缩过的.mp3文件大的多。其实在WP7的Silverlight框架上是存在一种播放音频文件的接口的,这就是MediaElement。一旦你创建好了一个MediaElement对象,请确保该对象已经被添加到Silverlight树中。如果MediaElement不是静态声明的话,mp3文件将不会被加载。


此外,当你通过VS2010和Zune Software部署包含MediaElement的程序到真实设备上时,如果在播放音频文件前就没有断开手机和Zune Software间的连接,那么很不幸,应用程序在加载音频文件时会报错。但是在模拟器上运行该程序则一切正常。


下面的代码将使用MediaElement来演示如何实现声音的播放:

MainPage.xaml:

<MediaElement x:Name="MainME" AutoPlay="False" MediaOpened="MainME_MediaOpened" MediaFailed="MainME_MediaFailed"></MediaElement>

MainPage.xaml.cs:

private void SoundBtn_Click(object sender, RoutedEventArgs e){    MainME.Source = new Uri("sounds/mySound.mp3", UriKind.Relative);    MainME.Position = new TimeSpan(0);}

private void MainME_MediaOpened(object sender, RoutedEventArgs e){    MainME.Play();}

这里就不给具体的项目文件下载了,大家可以亲自动手验证下。