【3D技术宅公社】XR数字艺术论坛  XR技术讨论 XR互动电影 定格动画

 找回密码
 立即注册

QQ登录

只需一步,快速开始

调查问卷
论坛即将给大家带来全新的技术服务,面向三围图形学、游戏、动画的全新服务论坛升级为UTF8版本后,中文用户名和用户密码中有中文的都无法登陆,请发邮件到324007255(at)QQ.com联系手动修改密码

3D技术论坛将以计算机图形学为核心,面向教育 推出国内的三维教育引擎该项目在持续研发当中,感谢大家的关注。

查看: 3004|回复: 0

为游戏而生的FMOD

[复制链接]
发表于 2006-3-6 16:51:07 | 显示全部楼层 |阅读模式
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,channelointer;//指针

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 CreateSystemObjectointer;virtual;
...
public
.....
function system_createSound(file:pchar;flags:integer;p1,p2ointer)ointer;
.....
end;

大概就是以上模型,最关键的FMOD内核对象由派生类实现,封装其他函数后就可以有TCanvas的灵活性和方便了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|3D数字艺术论坛 ( 沪ICP备14023054号 )

GMT+8, 2025-6-24 09:10

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表