|
FMOD是一套专业多媒体声音引擎库。可以回放采样和对声音进行各种效果处理。尤其是在游戏方面得到了众多应用。 FMOD包括众多平台的支持:Windows,Windows 64,Sony PlayStation 2,Microsoft Xbox,Nintendo Gamecube,Microsoft Xbox 360。 这也就意味着同样一套API换用不同的链接库可以在多种平台上应用。 FMOD支持现今主流音乐格式。 关于FMOD就介绍到这,具体可到它的官网去了解一下。因为现在在写游戏,就把尘封以久的FMOD翻开研究了 一番。也许Delphi真的没落了,居然不提供Delphi的例子,只有以Pascal语言声明的接口文件。没有办法只好翻译C++源代码的例子了。 以下是一断最简单的FMod for C++的例子。
FMOD_RESULT result; FMOD::System *system; FMOD::Channel *channel;
result = FMOD::System_Create(&system); // 创造FMOD的系统内核对象 ERRCHECK(result);
result = system->setSpeakerMode(FMOD_SPEAKERMODE_5POINT1); // 设置5.1声道模式 ERRCHECK(result);
result = system->setSoftwareChannels(100); // 调整软件混合 ERRCHECK(result);
result = system->setHardwareChannels(32, 64); // 调整硬件混合 ERRCHECK(result);
result = system->init(200, FMOD_INIT_NORMAL, 0); // 初始化FMOD,音量大小为200 ERRCHECK(result);
result = system->createSound("../media/wave.mp3", FMOD_DEFAULT, 0, &sound); //载入磁盘文件到内存,(全部载入后返回) ERRCHECK(result);
result = system->playSound(FMOD_CHANNEL_FREE, sound, false, &channel);//播放 ERRCHECK(result);
system->Release;//释放
把他翻译成Delphi var system,channel ointer;//指针
if FMOD_System_Create(system)<>FOMD_OK then exit; // 创造FMOD的系统内核对象
FMOD_system_setSpeakerMode(system,FMOD_SPEAKERMODE_5POINT1); // 设置5.1声道模式
FMOD_system_setSoftwareChannels(system,100); // 调整软件混合
FMOD_system_setHardwareChannels(system,32, 64); // 调整硬件混合
FMOD_system_init(system,200, FMOD_INIT_NORMAL, 0); // 初始化FMOD,音量大小为200
FMOD_system_createSound(system,"../media/wave.mp3", FMOD_DEFAULT, 0, sound); //载入磁盘文件到内存,(全部载入后返回)
FMOD_system_playSound(system,FMOD_CHANNEL_FREE, sound, false, channel);//播放
FMOD_system_Release(system);//释放
由于语言风格的差异造成Delphi代码上有点那么的不优雅,其实这些API可以很方便的封装成类。至于用什么 设计模式我想用TCanvas中的place holder封装最恰当不可。
TFMOD=class private ... function CreateSystemObject ointer;virtual; ... public ..... function system_createSound(file:pchar;flags:integer;p1,p2 ointer) ointer; ..... end;
大概就是以上模型,最关键的FMOD内核对象由派生类实现,封装其他函数后就可以有TCanvas的灵活性和方便了。 |
|