由于在XNA中每33fp就会更新画面一次,所以在Silverlight Application中需要透过指定一个定期执行 Frameworkdispatcher.Update() 的事件。
//设置定时器 dispatcherTimer timer = new dispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(33); timer.Tick += delegate { try { Frameworkdispatcher.Update(); } catch { } }; timer.Start();
一.音频:一般用来播放一些很短的wav格式的音频,但是在Silverlight中也一样要用MediaElement来播放,所以可以利用 XNA中的Audio来播放这些短信的音效。需要将音频文件流读入到内存中,进行播放。并且要设定好SoundEffect中的SampleRate的取值范围(8000-48000Hz)
SoundEffect sound = new SoundEffect(Stream.ToArray(),8000,AudioChannels.Mono);
SoundEffectInstance inst = sound.CreateInstance();
inst.Play();
二.音乐:在silveright中,播放mp3音乐也同样要用到MediaElement控件,但是要用来做背景音乐,就显的有点不太合适了,所以可用XNA提供的Song和MediaPlayer类来加载并播放背景音乐,并且也很好控制。
1.通过Song创建音频对象,并通过MediaPlayer播放。
try { //创建音频对象 Song song = Song.FromUri("Music",new Uri("/Song/yule.mp3",UriKind.Relative)); //设置为循环播放 MediaPlayer.IsRepeating = true; //启动播放 MediaPlayer.Play(song); } catch (System.Exception ex) { //创建音频对象失败,uri错误时 }
2.音频暂停,复位,停止。
//暂停 MediaPlayer.Pause(); //复位 MediaPlayer.Resume(); //停止 MediaPlayer.Stop();
3.设置音频播放的音量。
//音量取值范围为[0,1],默认值为0.85,设置为0.5 MediaPlayer.Volume = 0.5F;
通过Song和MediaPlayer可以播放多种格式的音频,并且使用也相当的简单方便。不过同样需要引入XNA库,并且通过Song.FromUri创建Song对象的音频文件只能是资源文件,不能是独立存储中的文件。对于独立存储中的文件,暂时还没有找到创建Song对象的API,还期望同大家一同探讨。
三.Microphone用来在silverlight中录制声音。
using Microsoft.Xna.Framework.Audio;
_Microphone.BufferReady += new EventHandler<EventArgs>(_Microphone_BufferReady);
_Microphone.GetData(buffer);
_Microphone.Start();
_Microphone.Stop();
这是可能还会报错
尝试了所有使用Silverlight on WP7来播放音频流的方法,总结了一下它们各自的特点。 1、MediaElement 优点:Silverlight自带控件,支持mp3和部分视频格式,方便控制。 缺点:不支持wav格式,需自行编写解码器(mediastreamsource)。 适用场合:前台播放。 相关代码:无,参考MSDN即可。 2、Song+MediaPlayer 优点:小巧轻便,简单易用,支持格式多,可直接从Uri中加载。 缺点:需启用XNA Framework。 适用场合:后台播放完整音频。 相关代码: song = Song.FromUri("music",new Uri("badapple.mp3",UriKind.Relative));MediaPlayer.Play(song); 3、SoundEffect+SoundEffectInstance 优点:可同时播放多段音频,支持简单的音效处理。 缺点:需启用XNA Framework,且仅支持wav文件。 适用场合:后台播放多音频片段,并需要音效处理。 相关代码: soundEffect = SoundEffect.FromStream(stream);soundEffectInstance = soundEffect.CreateInstance();soundEffectInstance.Play(); 4、SoundEffect+DynamicsoundEffectInstance 优点:在3的基础上,DynamicsoundEffectInstance支持buffer机制(BufferNeeded事件和SubmitBuffer方法)。 缺点:需启用XNA Framework,且仅支持wav文件,另外DynamicsoundEffectInstance的buffer只支持byte[]格式,同时对wav的格式有所要求(参 考资料[1])。 适用场合:后台播放音频片段,并需要支持buffer机制。 相关代码:懒得写了,请自行研究。
|
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。