Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
2011-04-26 11:43
786 查看
在一些应用程序.尤其在触摸屏和休闲游戏中,当用户在应用程序中做出操作同时也播放出对应动作声音.例如现在Silverlight中和WP7已经实现FPS动作类游戏中射击AK-47突击步枪时枪声效果.或是动画操作中飞机起飞动作时伴随的环绕音效.这在用户体验操作时非常重要一环.
想想以前Silverlight版本中实现这种动作音效.开发人员往往采用各种各样技巧尽可能的在为客户提供在低延迟情况下提供完整用来MediaElements元素缓存区预加载音效文件效果.其实现在Windowsphone7XNA游戏开发平台已经为开发人员提供处理声音效果的SoundEffect类支持.同样在Silverlight5版本添加SoundEffect类做音效处理.
在演示这个Demo前首先可以去下载相关的音效文件[WAV格式]:
WAVFreeFileDownLoadLink:http://www.wyomingwebdesign.com/files/pages/free_sound_files.html
free_sound_files_DownlaodLink[fllow]
想想以前Silverlight版本中实现这种动作音效.开发人员往往采用各种各样技巧尽可能的在为客户提供在低延迟情况下提供完整用来MediaElements元素缓存区预加载音效文件效果.其实现在Windowsphone7XNA游戏开发平台已经为开发人员提供处理声音效果的SoundEffect类支持.同样在Silverlight5版本添加SoundEffect类做音效处理.
在演示这个Demo前首先可以去下载相关的音效文件[WAV格式]:
WAVFreeFileDownLoadLink:
free_sound_files_DownlaodLink[fllow]
建立一个标准的SilverlightApplication:
ok.下载一个飞机起降环绕音的WAV文件.页面通过一个Button按钮点击事件事件驱动的方式播放文件:
<Gridx:Name="LayoutRoot"Background="White">
[code]<ButtonContent="GunFight_Sound"
Height="36"
HorizontalAlignment="Left"
Margin="107,129,0,0"
Name="ClickMe"
VerticalAlignment="Top"
Width="153"
Click="ClickMe_Click"/>
</Grid>
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
首先在执行播放文件前.通过Application对象的GetResourceStream()方法来预加载音效文件.通过SoundEffect类FromStream方法把文件流作为转化为可设置播放的对象SoundEffect.首先引入命名空间:
usingMicrosoft.Xna.Framework.Audio;
[code]usingSystem.Windows.Resources;
usingSystem.Windows.Threading;
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
Button点击事件操作文件播放在页面执行加载时加载环绕背景音效:
varengineStream=
[code]Application.GetResourceStream(newUri("engine_rumble4.wav",UriKind.RelativeOrAbsolute));
_engineEffect=SoundEffect.FromStream(engineStream.Stream);
SoundEffectInstanceengineInstance=_engineEffect.CreateInstance();
engineInstance.IsLooped=true;
engineInstance.Pitch=-1.0f;//lowsound
engineInstance.Volume=0.75f;
engineInstance.Play();
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
通过SoundEffect对象创建SoundEffectInstance对象.islooped设置是否循环播放.Volume则设置播放音量.Play()方法则执行播放.加载好背景环绕效果音效.但我们点击Button按钮触发射击音效:
privatevoidClickMe_Click(objectsender,RoutedEventArgse)
[code]{
varlaserStream=
Application.GetResourceStream(newUri("laser_shot.wav",UriKind.RelativeOrAbsolute));
_laserShotEffect=SoundEffect.FromStream(laserStream.Stream);
SoundEffectInstanceinstance=_laserShotEffect.CreateInstance();
instance.Pitch=1.0f;//highsound
instance.Play();
}
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}当然在在游戏场景背景音效需要长期循环渲染.设置在加载页面把背景音效设置循环播放状态:
DispatcherTimertimer=newDispatcherTimer();
[code]timer.Interval=TimeSpan.FromSeconds(1);
//循环播放控制
timer.Tick+=(s,ea)=>
{
timer.Stop();
SoundEffectInstanceengineInstance2=_engineEffect.CreateInstance();
engineInstance2.IsLooped=true;
engineInstance2.Pitch=-.75f;//slightlyhighersound
engineInstance2.Volume=0.5f;
engineInstance2.Play();
};
timer.Start();
[/code]
.csharpcode,.csharpcodepre
{
font-size:small;
color:black;
font-family:consolas,"CourierNew",courier,monospace;
background-color:#ffffff;
/*white-space:pre;*/
}
.csharpcodepre{margin:0em;}
.csharpcode.rem{color:#008000;}
.csharpcode.kwrd{color:#0000ff;}
.csharpcode.str{color:#006080;}
.csharpcode.op{color:#0000c0;}
.csharpcode.preproc{color:#cc6633;}
.csharpcode.asp{background-color:#ffff00;}
.csharpcode.html{color:#800000;}
.csharpcode.attr{color:#ff0000;}
.csharpcode.alt
{
background-color:#f4f4f4;
width:100%;
margin:0em;
}
.csharpcode.lnum{color:#606060;}
ok.至此当运行界面后首先听到是场景的渲染音效.点击Button按钮将触发射击音效.界面截图:
有了SoundEffect相对以前Silverlight版本不再需要在费过大力气实现同样的效果/.新的API增加即将大大简化解决问题整个问题流程.Silverlight5中支持将逐步的得到完善.源码下载:
SoundEffectClassforLow-latencyDownLink:
相关文章推荐
- Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
- Silverlight 5 Beta新特性[6]低延迟对WAV格式声音效果支持
- Silverlight 5 beta新特性探索系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式【附带源码实例】
- Silverlight 5 beta新特性系列:6.Silverlight 5新增低延迟声音效果类SoundEffect.支持wav音乐格式
- Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持
- Silverlight 5 beta新特性探索系列:1.安装Silverlight 5 beta环境以及OOB模式下Silverlight 5 多窗口支持
- Silverlight 5 Beta新特性[5]隐式模板支持
- Silverlight 5 Beta新特性[5]隐式模板支持
- 稳扎稳打Silverlight(66) - 5.0其它之自定义 XAML 扩展标记, 通过 XNA 处理声音效果, 支持矢量打印, 统计连击的次数
- Silverlight 5 Beta新特性[3]多窗口支持
- Silverlight 5 Beta新特性[3]多窗口支持
- Silverlight 2 beta 2 中目前不支持共享 WCF 的客户端类型
- Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
- Silverlight 5 Beta 新特性预览
- Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】
- Silverlight 5 RC新特性探索系列:15.Silverlight 5 RC 对OpenType字体属性的支持
- Silverlight 5 beta新特性探索系列:2.在XAML代码中设置断点和Binding绑定调试【附带源码实例】
- 微软发布Silverlight 5 Beta新特性
- Silverlight 5 beta新特性探索系列:3.Silverlight5中的文字增进控制【附带实例源码】
- 转载:Silverlight 4 Beta新特性