|
发表于 2008-10-10 15:38:00
|
显示全部楼层
Re:音频引擎FMOD的使用(一)
class CMusic
{
public:
CMusic(void);
~CMusic(void);
private:
void ERRCHECK( FMOD_RESULT result ) // 错误检测
{
if (result != FMOD_OK)
{
char sz[1000];
sprintf_s( sz,1000,"FMOD出错! [%d] %s",result,FMOD_ErrorString(result) );
MessageBoxA( NULL,sz,"音效模块错误",0 );
exit(-1);
}
}
private: // FMOD的必要成员
FMOD::System* mSystem;
FMOD::Sound* mSound;
FMOD::Channel* mChannel;
public:
bool initMusic(); // 初始化音乐
void pause(); // 暂停
void play(); // 播放
void update(); // 更新
};
#include "Music.h"
#include "DBGlobalString.h"
using namespace FMOD;
// 包含库
#pragma comment( lib,"fmodex_vc.lib")
/**-----------------------------------------------------------------------------
* 为了安全起见必须要初始化指针为NULL
*------------------------------------------------------------------------------
*/
CMusic::CMusic(void):mSystem(NULL),mSound(NULL),mChannel(NULL)
{
}
/**-----------------------------------------------------------------------------
* 析构 释放对象
*------------------------------------------------------------------------------
*/
CMusic::~CMusic(void)
{
if( mSound )
mSound->release();
if( mSystem )
{
mSystem->close();
mSystem->release();
}
}
/**-----------------------------------------------------------------------------
* 初始化
*------------------------------------------------------------------------------
*/
bool CMusic::initMusic()
{
// 创建System对象并初始化
FMOD_RESULT result;
result = System_Create(&mSystem);
ERRCHECK(result);
unsigned version = 0;
result = mSystem->getVersion(&version);
ERRCHECK(result);
if( version < FMOD_VERSION ) // 检测版本信息
{
char sz[100];
sprintf_s(sz,100,"错误,您正在使用一个旧版本的FMOD %08x.这个版本需要 %08x\n",version,FMOD_VERSION);
MessageBoxA( NULL,sz,"FMOD版本错误",0);
return false;
}
// 初始化
result = mSystem->init( 1,FMOD_INIT_NORMAL,0 );
ERRCHECK(result);
// 建立流
result = mSystem->createStream( DBGlobalString::getStringValue("GAMEBACKGROUNDMUSICPATH").c_str(),FMOD_HARDWARE | FMOD_LOOP_NORMAL | FMOD_2D,0,&mSound );
ERRCHECK(result);
// come on ,let us go,every friend!!
result = mSystem->playSound( FMOD_CHANNEL_FREE,mSound,false,&mChannel );
ERRCHECK(result);
return true;
}
/**-----------------------------------------------------------------------------
* 暂停
*------------------------------------------------------------------------------
*/
void CMusic::pause()
{
bool paused;
mChannel->getPaused(&paused);
if( !paused ) // 如果paused == false,表示并未暂停
{
mChannel->setPaused(true);
}
}
/**-----------------------------------------------------------------------------
* 播放
*------------------------------------------------------------------------------
*/
void CMusic::play()
{
bool paused;
mChannel->getPaused(&paused);
if( paused )
{
mChannel->setPaused(false);
}
}
/**-----------------------------------------------------------------------------
* 更新 直接调用就可以了
*------------------------------------------------------------------------------
*/
void CMusic::update()
{
if( mSystem )
{
mSystem->update();
}
} |
|