欢迎来到天天文库
浏览记录
ID:14780406
大小:235.50 KB
页数:17页
时间:2018-07-30
《6进阶音效控制与管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、摘要以XNA为基础的游戏程序可以利用SoundEffect类别的功能执行简单的音效播放,或是利用SoundEffectInstance类别进行进阶的音效播放控制,包括播放、暂停、恢复、结束、是否要播放3D的音效、控制声音从左边或右边的声道输出、控制音调高低、以及控制音量等等。在这一回的文章中,我们将介绍利用SoundEffectInstance类别进行进阶音效控制的做法,除此之外,我们也将会介绍支持组织和管理声音文件的XACT(Cross-platformAudioCreationTool)工具。有关XNAFrame
2、work提供的SoundEffect类别和SoundEffectInstance类别的基本功能和使用方法可以参考[XNA交互式游戏设计]一文的说明。进阶音效控制WindowsPhone7智能型手机并非只能播放一种音效,以XNA为基础的游戏程序可以同时播放64种声音,达成混合多种音效的效果。除此之外,XNAFramework也支持动态播放音效,例如播放应用程序执行时期建立的音效,或是搭配麦克风播放由外界输入的音效。[提示]WindowsPhone7智能型手机支持同时播放多达64种的音效,但是Xbox360游戏机支持播放
3、多达300种的音效,可以播放更丰富的声音效果,而Windows操作系统则是未限制可以同时播放的音效数目。当游戏程序想要仿真环绕音效的时候,可以利用SoundEffectInstance类别的Pan属性控制音效要从左方发声,还是要从右方发声。Pan属性是一个介于-1.0与1.0之间的数值,其值为-1.0表示要从左方发声,其值为1.0表示要从右方发声,而其值为0则表示要从中央发声,其默认值为0。当游戏程序需要控制所播放的音效的音调高低时,就可以利用SoundEffectInstance类别的Pitch属性进行控制。Pit
4、ch属性是一个介于-1.0与1.0之间的数值,其值为-1.0表示音调最低,其值为1.0表示音调最高,其默认值为0。当游戏程序需要控制所播放的音效的音量时,就可以利用SoundEffectInstance类别的Volume属性进行控制。Volume属性是一个介于.0与1.0之间的数值,其值为0表示音量最小(静音),其值为1表示音量最大,其默认值为1。请注意透过SoundEffectInstance类别控制的音量取决于SoundEffect类别的MasterVolume属性的内容值,换句话说将SoundEffectIns
5、tance类别的Volume属性的内容值设定为1,所呈现的最大音量就是SoundEffect类别的MasterVolume属性设定的音量。例如游戏程序想呈现环绕音效的效果,可以先把欲播放的声音文件加入到ContentPipeline项目中,然后于Game1类别宣告以下的变量,负责管理音效资源、SoundEffectInstance类别的对象、以及记录音效移动的方向:SoundEffectRingOut;//管理音效資源的變數SoundEffectInstanceRingOutEffect;//管理SoundEffec
6、tInstance類別的物件的變數boolbPaneLeft=false;//記錄音效移動方向的變數宣告妥变量之后请于Game1类别的LoadContent方法加入以下的程序代码,负责加载音效资源和建立SoundEffectInstance类别的对象:RingOut=Content.Load("RingOut");//載入名稱為RingOut的音效資源RingOutEffect=RingOut.CreateInstance();//建立SoundEffectInstance類別的物件Ring
7、OutEffect.IsLooped=true;//設定音效要不斷地重覆播放加载音效资源并建立妥SoundEffectInstance类别的对象之后,我们只要在Game1类别的Update方法中变更SoundEffectInstance类别的对象的Pan属性的内容值,就可以变更音效发声的位置,例如以下的程序:if(bPaneLeft)//判斷音效發聲的位置是否為往左移動{if(RingOutEffect.Pan-0.1<=-1)//如果已經無法往左移動{RingOutEffect.Pan=-1f;//設定音效從左方發
8、聲bPaneLeft=true;//設定移動方向為往右移動}elseRingOutEffect.Pan-=0.1f;//設定發聲位置往左移動0,1}else//音效發聲的位置為往右移動{if(RingOutEffect.Pan+0.1>=1)//如果已經無法往右移動{RingOutEffect.Pan=1f;//設定音效從右方發聲bPaneLe
此文档下载收益归作者所有