|
Posted on 2008-10-19 11:38 Condor 阅读(910) 评论(0) 编辑 收藏 引用
现代游戏已经不能没有声音,所以音频引擎成为游戏引擎中不可缺少的一部分.这是一篇介绍现代音频引擎的文章(http://hard.zol.com.cn/labs/2003/0520/60986.shtml).FMOD音频引擎(http://www.fmod.org)是一个非常不错的音频引擎,其使用也比较简单,下面做一些简单介绍: 一.基本准备 它是免费的,你可以从它们的主站上下载API等文件.之后,你需要添加头文件和库文件,如下(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头文件后就可以使用了. 二.开始使用 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)
|