一種通用游戲音效管理系統(tǒng)和方法
【技術(shù)領(lǐng)域】
[0001 ] 本發(fā)明涉及一種通用游戲音效管理系統(tǒng)和方法,尤其涉及一種基于Fmod和Lua的通用游戲音效管理系統(tǒng)和方法,屬于游戲開發(fā)領(lǐng)域。
【背景技術(shù)】
[0002]音效是指由聲音所制造的效果,在游戲里中可以增強(qiáng)場景的真實感、盈造氣氛等。通常需要反復(fù)推敲各種音效的實施效果,才能選用更合適的音效來適配游戲的風(fēng)格和節(jié)奏。而在游戲開發(fā)中通常采用Fmod音頻引擎進(jìn)行音頻文件處理和音效操作,以實現(xiàn)各種各樣的游戲音效的變化和效果。例如,F(xiàn)mod引擎可以對原音頻進(jìn)行壓縮和打包,還可以將待播放聲音轉(zhuǎn)換成Sample (樣本),該樣本將在播放前先解壓到內(nèi)存,然后再進(jìn)行多次播放。
[0003]然而在游戲開發(fā)過程中,一般通過直接操作原始音頻文件以實施音效操作,但是這種傳統(tǒng)的操作方式存在缺陷。由于要在外部對原始音頻的文件進(jìn)行壓縮操作,如果需要調(diào)整樣本,還要到游戲開發(fā)工程中查找出相應(yīng)文件來調(diào)整,尤其在查找音頻文件時還需要到目錄中搜索。但是游戲開發(fā)人員通常將文件的路徑固化在游戲程序代碼中,導(dǎo)致后期對要播放音效進(jìn)行修改時,涉及到代碼的修改,改動量較大并且使程序維護(hù)麻煩。而且,當(dāng)需要刪除沒用的樣本時如果稍不小心操作失誤,從而導(dǎo)致報錯。尤其在刪除音效資源的情況下,但在程序代碼中沒有刪除對應(yīng)的音效路徑,會造成程序?qū)σ粜зY源文件的引用混亂,產(chǎn)生程序錯誤。另外,由于音效路徑的錯亂,還使得程序里用不到音效資源仍然打包到音效包里,引起資源的冗余。在傳統(tǒng)的音效操作方式中,在對音效功能進(jìn)行擴(kuò)展的情況中,比如從多個樣本中隨機(jī)抽取一個出來播,又比如隨機(jī)調(diào)整音量、音調(diào)和音頻,則需要額外的代碼來封裝,從而加大音效功能擴(kuò)展的復(fù)雜程度。
【發(fā)明內(nèi)容】
[0004]針對現(xiàn)有技術(shù)的缺陷,本發(fā)明提供一種通用游戲音效管理系統(tǒng)和方法,有效地提尚游戲音效的開發(fā)效率,并且提尚游戲音效的設(shè)計品質(zhì)。
[0005]為了實現(xiàn)該目的,本發(fā)明的技術(shù)方案采用Fmod音頻引擎結(jié)合Lua腳本,封裝構(gòu)成一套通用的游戲音效管理框架,以解決游戲中的音效的播放、打包、修改效果、更改音效等問題。其中,Lua腳本是一種小巧的動態(tài)類型腳本,可以嵌入或整合到游戲程序中,從而為其提供靈活的擴(kuò)展和定制功能。而且Lua是解釋性的語言,修改后便可以執(zhí)行,無須編譯。
[0006]本發(fā)明的技術(shù)方案一方面提供一種游戲音效管理系統(tǒng),包括:Fmod音效引擎封裝器,用于在游戲系統(tǒng)中加載Fmod音頻引擎,并且向Lua腳本提供Fmod音頻引擎的部分程序接口,使Lua腳本調(diào)用Fmod音頻引擎的部分功能;音效數(shù)據(jù)索引器,用于將游戲所需的音效數(shù)據(jù)和路徑進(jìn)行組織,并且生成預(yù)設(shè)的或者開放編輯的分布式存儲數(shù)據(jù)格式的音效路徑數(shù)據(jù)表,供Lua腳本讀??;音效調(diào)用器,該音效調(diào)用器分別與Fmod音效引擎封裝器和音效數(shù)據(jù)索引器連接,用于調(diào)用Lua腳本從游戲系統(tǒng)中獲取音效動作指令,然后從音效數(shù)據(jù)索引器中獲取音效資源來實施后續(xù)動作,該后續(xù)動作包括對音效進(jìn)行播放、打包、修改效果和更改的動作。
[0007]進(jìn)一步,所述音效數(shù)據(jù)索引器包括:音效存儲模塊,用于儲存音效資源以及至少一個音效路徑數(shù)據(jù)表;音效索引管理模塊,該音效索引管理模塊與音效存儲模塊連接,用于讀取音效資源的分類、每個音效的名稱和路徑,然后分別對應(yīng)每一類音效資源創(chuàng)建音效路徑數(shù)據(jù)表,其中音效路徑數(shù)據(jù)表采用分布式存儲數(shù)據(jù)格式,使音效名稱信息儲存為音效路徑數(shù)據(jù)表的主鍵,并且使音效路徑信息儲存為主鍵的對應(yīng)值。
[0008]進(jìn)一步,所述音效索引管理模塊包括:音效索引編輯模塊,用于為用戶提供修改所述音效路徑數(shù)據(jù)表的接口和界面,從而通過修改音效路徑數(shù)據(jù)表的主鍵及其對應(yīng)值以調(diào)整游戲所需的音效;音效索引更新檢測模塊,用于更新經(jīng)由音效索引編輯模塊修改的音效路徑數(shù)據(jù)表,根據(jù)修改的主鍵及其對應(yīng)值以檢測儲存在音效存儲模塊中是否存在與該主鍵及其對應(yīng)值關(guān)聯(lián)的音效及其路徑,如果存在相應(yīng)的音效及其路徑,則完成音效路徑數(shù)據(jù)表的更新,否則重新觸發(fā)音效索引編輯模塊進(jìn)行音效路徑數(shù)據(jù)表的編輯。
[0009]進(jìn)一步,所述音效調(diào)用器包括:音效指令接收模塊,用于接收游戲系統(tǒng)輸出的音效動作指令;數(shù)據(jù)查詢模塊,用于讀取音效數(shù)據(jù)索引器輸出的音效路徑數(shù)據(jù)表,查詢與所述接收的音效動作指令關(guān)聯(lián)的音效及其路徑;Fmod引擎通信模塊,用于與游戲系統(tǒng)引擎和封裝加載的Fmod音頻引擎的程序接口進(jìn)行通信;音效執(zhí)行模塊,用于根據(jù)所述接收的音效動作指令和所述音效路徑數(shù)據(jù)表,調(diào)用Lua腳本解析與所述音效動作指令對應(yīng)的動作和音效的路徑,然后通過游戲系統(tǒng)的程序接口執(zhí)行該音效的后續(xù)動作;邏輯交互模塊,用于反饋音效的播放邏輯標(biāo)識和音效的播放狀態(tài)信息到游戲系統(tǒng),實現(xiàn)所述游戲音效管理系統(tǒng)與游戲系統(tǒng)中的各個軟件模塊的邏輯交互。
[0010]作為以上技術(shù)方案的一種改進(jìn),該系統(tǒng)還包括:音效資源釋放器,用于根據(jù)音效數(shù)據(jù)索引器所編輯和更新的音效路徑數(shù)據(jù)表,調(diào)用游戲程序的編程接口將對應(yīng)在音效路徑數(shù)據(jù)表中刪除的音效資源從音效打包中釋放或者從游戲內(nèi)存中釋放。
[0011]本發(fā)明的技術(shù)方案另一方面提供了一種游戲音效管理方法,包括如下步驟:
A、在游戲系統(tǒng)中加載Fmod音頻引擎,并且向Lua腳本提供Fmod音頻引擎的部分程序接口,使Lua腳本調(diào)用Fmod音頻引擎的部分功能;
B、將游戲所需的音效數(shù)據(jù)和路徑進(jìn)行組織,并且生成預(yù)設(shè)的或者開放編輯的分布式存儲數(shù)據(jù)格式的音效路徑數(shù)據(jù)表,供Lua腳本讀取;
C、調(diào)用Lua腳本獲取音效動作指令,然后使用獲取的音效資源來實施后續(xù)動作,該后續(xù)動作包括對音效進(jìn)行播放、打包、修改效果和更改的動作。
[0012]進(jìn)一步,所述步驟B包括:在存儲介質(zhì)中儲存音效資源以及至少一個音效路徑數(shù)據(jù)表;讀取音效資源的分類、每個音效的名稱和路徑,然后分別對應(yīng)每一類音效資源創(chuàng)建音效路徑數(shù)據(jù)表,其中音效路徑數(shù)據(jù)表采用分布式存儲數(shù)據(jù)格式,使音效名稱信息儲存為音效路徑數(shù)據(jù)表的主鍵,并且使音效路徑信息儲存為主鍵的對應(yīng)值。
[0013]優(yōu)選地,所述步驟B還包括:為用戶提供修改所述音效路徑數(shù)據(jù)表的接口和界面,通過修改音效路徑數(shù)據(jù)表的主鍵及其對應(yīng)值以調(diào)整游戲所需的音效;更新已修改的音效路徑數(shù)據(jù)表,根據(jù)修改的主鍵及其對應(yīng)值以檢測在所述存儲介質(zhì)中是否存在與該主鍵及其對應(yīng)值關(guān)聯(lián)的音效及其路徑,如果存在相應(yīng)的音效及其路徑,則完成音效路徑數(shù)據(jù)表的更新,否則重新編輯所述音效路徑數(shù)據(jù)表。
[0014]進(jìn)一步,所述步驟C包括:接收游戲系統(tǒng)輸出的音效動作指令;讀取所述音效路徑數(shù)據(jù)表,查詢與所述接收的音效動作指令關(guān)聯(lián)的音效及其路徑;與游戲系統(tǒng)引擎和封裝加載的Fmod音頻引擎的程序接口進(jìn)行通信;根據(jù)所述接收的音效動作指令和所述音效路徑數(shù)據(jù)表,調(diào)用Lua腳本解析與所述音效動作指令對應(yīng)的動作和音效的路徑,然后通過游戲系統(tǒng)的程序接口執(zhí)行該音效的后續(xù)動作;反饋音效的播放邏輯標(biāo)識和音效的播放狀態(tài)信息到游戲系統(tǒng),與游戲系統(tǒng)中的軟件模塊進(jìn)行邏輯交互。
[0015]優(yōu)選地,所述游戲音效管理方法還包括:根據(jù)已編輯和更新的音效路徑數(shù)據(jù)表,調(diào)用游戲程序的編程接口將對應(yīng)在音效路徑數(shù)據(jù)表中刪除的音效資源從音效打包中釋放或者從游戲內(nèi)存中釋放。
[0