FMOD工作室问题。基本概念,最佳实践等

时间:2014-05-02 19:06:00

标签: c++ fmod

我有几个问题,因为我正在尝试将FMOD Studio集成到我的一个项目中。

虽然我已经让项目播放音频文件,但是文档中提供的示例代码中有一些内容被视为预期用途。由于我是FMOD的新手,我发现API中的这些概念难以掌握。

有没有人知道在使用API​​时是否有任何形式的指导方针是什么最佳做法。

在哪里可以找到有关FMOD :: EventInstances的预期用途以及播放声音的相关接口/类的更多信息。基本上我在使用资源时负有什么责任,FMOD在内存管理等方面会做些什么。

您应该如何跟踪每种事件类型的FMOD :: ID / GUID。我是否需要为具有相应GUID的每个事件手动创建资产列表并为我的团队定义它们?这是一种更好的动态方式吗? (想到std :: map或类似的功能)。

1 个答案:

答案 0 :(得分:0)

完成后,您应该释放()任何 EventInstances 。如果您的声音事件是单击,您可以在开始播放后立即将其释放,并在声音完成播放后自动释放。例如:

Studio::EventInstance* instance;
if (FMOD_ErrorCheck(_eventDescription->createInstance(&instance)))
{
    FMOD_ErrorCheck(instance->start());
    FMOD_ErrorCheck(instance->release());
}

如果您想保留声音事件的句柄以便继续播放它,那么您应该只是保持 EventDescription 的句柄,并在每次想要播放时创建新的EventInstances它。

如果你不这样做,并保持 EventInstance ,那么启动声音会剪切声音并在每次尝试播放时重新启动它。

如果您不想维护FMOD Guids列表,那么您可以加载由FMOD生成的 Master Bank.strings.bank 文件(或称为.strings.bank文件的任何文件)工作室。然后,您可以从以下字符串中查找FMOD:ID:

Studio::ID AudioManager::getEntityId(std::string path)
{
    Studio::ID id = {0};
    FMOD_ErrorCheck(_studioSystem->lookupID(path.c_str(), &id));
    return id;
}

(假设_studioSystem当然是你的FMOD :: Studio :: System *指针)

这样做,您的团队永远不需要考虑事件ID,只需要考虑事件路径字符串。您可以通过在FMOD Studio中右键单击并选择复制路径来获取特定事件的路径。