資源描述:
《6進(jìn)階音效控制與管理》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、摘要以XNA為基礎(chǔ)的游戲程序可以利用SoundEffect類別的功能執(zhí)行簡(jiǎn)單的音效播放,或是利用SoundEffectInstance類別進(jìn)行進(jìn)階的音效播放控制,包括播放、暫停、恢復(fù)、結(jié)束、是否要播放3D的音效、控制聲音從左邊或右邊的聲道輸出、控制音調(diào)高低、以及控制音量等等。在這一回的文章中,我們將介紹利用SoundEffectInstance類別進(jìn)行進(jìn)階音效控制的做法,除此之外,我們也將會(huì)介紹支持組織和管理聲音文件的XACT(Cross-platformAudioCreationTool)工具。有關(guān)XNAFramework提供的SoundEffect類別和SoundEff
2、ectInstance類別的基本功能和使用方法可以參考[XNA交互式游戲設(shè)計(jì)]一文的說(shuō)明。進(jìn)階音效控制WindowsPhone7智能型手機(jī)并非只能播放一種音效,以XNA為基礎(chǔ)的游戲程序可以同時(shí)播放64種聲音,達(dá)成混合多種音效的效果。除此之外,XNAFramework也支持動(dòng)態(tài)播放音效,例如播放應(yīng)用程序執(zhí)行時(shí)期建立的音效,或是搭配麥克風(fēng)播放由外界輸入的音效。[提示]WindowsPhone7智能型手機(jī)支持同時(shí)播放多達(dá)64種的音效,但是Xbox360游戲機(jī)支持播放多達(dá)300種的音效,可以播放更豐富的聲音效果,而Windows操作系統(tǒng)則是未限制可以同時(shí)播放的音效數(shù)目。當(dāng)游戲程序想
3、要仿真環(huán)繞音效的時(shí)候,可以利用SoundEffectInstance類別的Pan屬性控制音效要從左方發(fā)聲,還是要從右方發(fā)聲。Pan屬性是一個(gè)介于-1.0與1.0之間的數(shù)值,其值為-1.0表示要從左方發(fā)聲,其值為1.0表示要從右方發(fā)聲,而其值為0則表示要從中央發(fā)聲,其默認(rèn)值為0。當(dāng)游戲程序需要控制所播放的音效的音調(diào)高低時(shí),就可以利用SoundEffectInstance類別的Pitch屬性進(jìn)行控制。Pitch屬性是一個(gè)介于-1.0與1.0之間的數(shù)值,其值為-1.0表示音調(diào)最低,其值為1.0表示音調(diào)最高,其默認(rèn)值為0。當(dāng)游戲程序需要控制所播放的音效的音量時(shí),就可以利用Sound
4、EffectInstance類別的Volume屬性進(jìn)行控制。Volume屬性是一個(gè)介于.0與1.0之間的數(shù)值,其值為0表示音量最小(靜音),其值為1表示音量最大,其默認(rèn)值為1。請(qǐng)注意透過(guò)SoundEffectInstance類別控制的音量取決于SoundEffect類別的MasterVolume屬性的內(nèi)容值,換句話說(shuō)將SoundEffectInstance類別的Volume屬性的內(nèi)容值設(shè)定為1,所呈現(xiàn)的最大音量就是SoundEffect類別的MasterVolume屬性設(shè)定的音量。例如游戲程序想呈現(xiàn)環(huán)繞音效的效果,可以先把欲播放的聲音文件加入到ContentPipeline
5、項(xiàng)目中,然后于Game1類別宣告以下的變量,負(fù)責(zé)管理音效資源、SoundEffectInstance類別的對(duì)象、以及記錄音效移動(dòng)的方向:SoundEffectRingOut;//管理音效資源的變數(shù)SoundEffectInstanceRingOutEffect;//管理SoundEffectInstance類別的物件的變數(shù)boolbPaneLeft=false;//記錄音效移動(dòng)方向的變數(shù)宣告妥變量之后請(qǐng)于Game1類別的LoadContent方法加入以下的程序代碼,負(fù)責(zé)加載音效資源和建立SoundEffectInstance類別的對(duì)象:RingOut=Content.Loa
6、d("RingOut");//載入名稱為RingOut的音效資源RingOutEffect=RingOut.CreateInstance();//建立SoundEffectInstance類別的物件RingOutEffect.IsLooped=true;//設(shè)定音效要不斷地重覆播放加載音效資源并建立妥SoundEffectInstance類別的對(duì)象之后,我們只要在Game1類別的Update方法中變更SoundEffectInstance類別的對(duì)象的Pan屬性的內(nèi)容值,就可以變更音效發(fā)聲的位置,例如以下的程序:if(bPaneLeft)//判斷音效
7、發(fā)聲的位置是否為往左移動(dòng){if(RingOutEffect.Pan-0.1<=-1)//如果已經(jīng)無(wú)法往左移動(dòng){RingOutEffect.Pan=-1f;//設(shè)定音效從左方發(fā)聲bPaneLeft=true;//設(shè)定移動(dòng)方向?yàn)橥乙苿?dòng)}elseRingOutEffect.Pan-=0.1f;//設(shè)定發(fā)聲位置往左移動(dòng)0,1}else//音效發(fā)聲的位置為往右移動(dòng){if(RingOutEffect.Pan+0.1>=1)//如果已經(jīng)無(wú)法往右移動(dòng){RingOutEffect.Pan=1f;//設(shè)定音效從右方發(fā)聲bPaneLe