|
Posted on 2008-10-19 11:38 Condor 閱讀(945) 評(píng)論(0) 編輯 收藏 引用
現(xiàn)代游戲已經(jīng)不能沒(méi)有聲音,所以音頻引擎成為游戲引擎中不可缺少的一部分.這是一篇介紹現(xiàn)代音頻引擎的文章(http://hard.zol.com.cn/labs/2003/0520/60986.shtml).FMOD音頻引擎(http://www.fmod.org)是一個(gè)非常不錯(cuò)的音頻引擎,其使用也比較簡(jiǎn)單,下面做一些簡(jiǎn)單介紹: 一.基本準(zhǔn)備 它是免費(fèi)的,你可以從它們的主站上下載API等文件.之后,你需要添加頭文件和庫(kù)文件,如下(C/C++): fmodvc.lib 用于 Microsoft Visual C++ 和 Codewarrior fmodbc.lib 用于 Borland fmodwc.lib 用于 Watcom fmodcc.lib 用于 LCC-Win32 libfmod.a 用于 MingW and CygWin fmod-3-7.lib 用于 GCC (參考:http://www.gamedev.net/reference/articles/article2098.asp) 之后,只要添加fmod.h頭文件后就可以使用了. 二.開(kāi)始使用 1.初始化 開(kāi)始播放聲音前,需要進(jìn)行初始化,很簡(jiǎn)單: FSOUND_Init (44100, 32, 0); 第一個(gè)參數(shù)是輸出HZ,第二是最大軟件信道數(shù)可以不管也不會(huì)增加CPU負(fù)擔(dān),第三個(gè)參數(shù)可以設(shè)置一些標(biāo)志可以不設(shè)置則賦值為0. 2.基本常識(shí) FMOD將音頻分為聲音(sound)和音樂(lè)(music)兩種.前者如:.MOD, .S3M, .XM, .IT, .MID, .RMI, .SGT or .FSB 等,后者如: .WAV, .MP2, .MP3, .OGG or .RAW等.二者使用不同的函數(shù)處理.都可以通過(guò)采樣后流的方式來(lái)處理.不過(guò)小文件一般通過(guò)采樣方式,它可以多次播放但占用內(nèi)存.大文件通過(guò)流方式,減少內(nèi)存消耗. 3.播放音樂(lè) 首先定義一個(gè)FMUSIC_MODULE類(lèi)型變量來(lái)作為文件句柄.然后就可以通過(guò)FMUSIC API來(lái)實(shí)現(xiàn),如: 裝入文件: handle=FMUSIC_LoadSong("YourFileName"); FMUSIC_PlaySong(handle); 音量控制:FMUSIC_SetMasterVolume (handle, 255);后面的參數(shù)在0~255之間,值越大聲音越大. 暫停播放:FMUSIC_SetPaused (handle, true); 重開(kāi)始:FMUSIC_SetPaused (handle, false); 循環(huán)播放:FMUSIC_SetLooping (handle, true); 停止播放:FMUSIC_StopSong (handle); 釋放音頻內(nèi)存:FMUSIC_FreeSong (handle); 下面是一個(gè)命令模式下的例子: #include <conio.h> #include "inc/fmod.h" FMUSIC_MODULE* handle; int main () { // 初始化 FSOUND_Init (44100, 32, 0); // 裝如 handle=FMUSIC_LoadSong ("canyon.mid"); // 只播放一次 // 播放midi文件時(shí)請(qǐng)關(guān)閉循環(huán)播放 FMUSIC_SetLooping (handle, false); //播放 FMUSIC_PlaySong (handle); // 按任一鍵結(jié)束 while (!_kbhit()) { } //釋放 FMUSIC_FreeSong (handle); FSOUND_Close(); } 4.播放聲音 4.1 采樣(Sample)方式 先定義FSOUND_SAMPLE類(lèi)型變量,然后就可以使用FSOUND系列函數(shù)來(lái)實(shí)現(xiàn),如: 裝如文件: handle=FSOUND_Sample_Load (0,"YourFileName",0,0,0); //除文件名外的參數(shù)用于多采樣或其它等 FSOUND_PlaySound (0,handle); 設(shè)置音量:FSOUND_SetVolume (handle, 255); 暫聽(tīng):FSOUND_SetPaused (handle, true); 重新開(kāi)始:FSOUND_SetPaused (handle, false); 停止:FSOUND_StopSound (handle); 釋放:FSOUND_Sample_Free (handle); 下面是一個(gè)簡(jiǎn)單的例子: #include <conio.h> #include "inc/fmod.h" FSOUND_SAMPLE* handle; int main () { // 初始化 FSOUND_Init (44100, 32, 0); // 裝載和播放 handle=FSOUND_Sample_Load (0,"sample.mp3",0, 0, 0); FSOUND_PlaySound (0,handle); // 按任一鍵結(jié)束 while (!_kbhit()) { } // 釋放 FSOUND_Sample_Free (handle); FSOUND_Close(); } 4.2 流(stream)方式 先定義一個(gè)FSOUND_STREAM 類(lèi)型變量,然后: 裝入文件: handle=FSOUND_Stream_Open("YourFileName",0, 0, 0); FSOUND_Stream_Play (0,handle); 提示:3.7版本之前的方式是不一樣的. 停止:FSOUND_Stream_Stop (handle); 釋放:FSOUND_Stream_Close(handle); 其它和前面是一樣的.下面是一個(gè)簡(jiǎn)單的例子: #include <conio.h> #include "inc/fmod.h" FSOUND_STREAM* handle; void main () { //init FMOD sound system FSOUND_Init (44100, 32, 0); //load and play sample handle=FSOUND_Stream_Open("sample.mp3",0, 0, 0); FSOUND_Stream_Play (0,handle); //wait until the users hits a key to end the app while (!_kbhit()) { } //clean up FSOUND_Stream_Close(handle); FSOUND_Close(); } 5.關(guān)閉 FSOUND_Close (); 參考: A Quick Guide to FMOD by Joachim Rohde(http://www.gamedev.net/reference/articles/article2098.asp) FMOD wiki(http://www.devmaster.net/wiki/FMod)
|