FMOD音頻引擎簡單使用
現代游戲已經不能沒有聲音,所以音頻引擎成為游戲引擎中不可缺少的一部分.這是一篇介紹現代音頻引擎的文章(http://hard.zol.com.cn/labs/2003/0520/60986.shtml).FMOD音頻引擎(http://www.fmod.org)是一個非常不錯的音頻引擎,其使用也比較簡單,下面做一些簡單介紹:
一.基本準備
它是免費的,你可以從它們的主站上下載API等文件.之后,你需要添加頭文件和庫文件,如下(C/C++):
(參考:http://www.gamedev.net/reference/articles/article2098.asp)
之后,只要添加fmod.h頭文件后就可以使用了.
二.開始使用
1.初始化
開始播放聲音前,需要進行初始化,很簡單:
FSOUND_Init (44100, 32, 0);
第一個參數是輸出HZ,第二是最大軟件信道數可以不管也不會增加CPU負擔,第三個參數可以設置一些標志可以不設置則賦值為0.
2.基本常識
FMOD將音頻分為聲音(sound)和音樂(music)兩種.前者如:.MOD, .S3M, .XM, .IT, .MID, .RMI, .SGT or .FSB
等,后者如: .WAV, .MP2, .MP3, .OGG or .RAW等.二者使用不同的函數處理.都可以通過采樣后流的方式來處理.不過小文件一般通過采樣方式,它可以多次播放但占用內存.大文件通過流方式,減少內存消耗.
3.播放音樂
首先定義一個FMUSIC_MODULE類型變量來作為文件句柄.然后就可以通過FMUSIC API來實現,如:
裝入文件:
handle=FMUSIC_LoadSong("YourFileName");
FMUSIC_PlaySong(handle);
音量控制:FMUSIC_SetMasterVolume (handle, 255);后面的參數在0~255之間,值越大聲音越大.
暫停播放:FMUSIC_SetPaused (handle, true);
重開始:FMUSIC_SetPaused (handle, false);
循環播放:FMUSIC_SetLooping (handle, true);
停止播放:FMUSIC_StopSong (handle);
釋放音頻內存:FMUSIC_FreeSong (handle);
下面是一個命令模式下的例子:
#include <conio.h>
#include "inc/fmod.h"
FMUSIC_MODULE* handle;
int main ()
{
// 初始化
FSOUND_Init (44100, 32, 0);
// 裝如
handle=FMUSIC_LoadSong ("canyon.mid");
// 只播放一次
// 播放midi文件時請關閉循環播放
FMUSIC_SetLooping (handle, false);
//播放
FMUSIC_PlaySong (handle);
// 按任一鍵結束
while (!_kbhit())
{
}
//釋放
FMUSIC_FreeSong (handle);
FSOUND_Close();
}
4.播放聲音
4.1 采樣(Sample)方式
先定義FSOUND_SAMPLE類型變量,然后就可以使用FSOUND系列函數來實現,如:
裝如文件:
handle=FSOUND_Sample_Load (0,"YourFileName",0,0,0); //除文件名外的參數用于多采樣或其它等
FSOUND_PlaySound (0,handle);
設置音量:FSOUND_SetVolume (handle, 255);
暫聽:FSOUND_SetPaused (handle, true);
重新開始:FSOUND_SetPaused (handle, false);
停止:FSOUND_StopSound (handle);
釋放:FSOUND_Sample_Free (handle);
下面是一個簡單的例子:
#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);
// 按任一鍵結束
while (!_kbhit())
{
}
// 釋放
FSOUND_Sample_Free (handle);
FSOUND_Close();
}
4.2 流(stream)方式
先定義一個FSOUND_STREAM 類型變量,然后:
裝入文件:
handle=FSOUND_Stream_Open("YourFileName",0, 0, 0);
FSOUND_Stream_Play (0,handle);
提示:3.7版本之前的方式是不一樣的.
停止:FSOUND_Stream_Stop (handle);
釋放:FSOUND_Stream_Close(handle);
其它和前面是一樣的.下面是一個簡單的例子:
#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.關閉
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)