【转】为游戏而生的FMOD
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:Pointer;//指针
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:Pointer;virtual;
...
public
.....
function system_createSound(file:pchar;flags:integer;p1,p2:Pointer):Pointer;
.....
end;
大概就是以上模型,最关键的FMOD内核对象由派生类实现,封装其他函数后就可以有TCanvas的灵活性和方便了。
阅读全文
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:Pointer;//指针
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:Pointer;virtual;
...
public
.....
function system_createSound(file:pchar;flags:integer;p1,p2:Pointer):Pointer;
.....
end;
大概就是以上模型,最关键的FMOD内核对象由派生类实现,封装其他函数后就可以有TCanvas的灵活性和方便了。
类别:游戏编程 查看评论

浙公网安备 33010602011771号