C++ FMOD工作室问题。基本概念、最佳做法等

C++ FMOD工作室问题。基本概念、最佳做法等,c++,fmod,C++,Fmod,我有几个问题,因为我正试图将FMOD Studio集成到我的一个项目中 虽然我已经让项目播放音频文件,但在文档中提供的示例代码中还遗漏了一些预期用途。由于我是FMOD新手,我发现API中的这些概念有些难以理解 是否有人知道,在使用API时,是否有任何形式的指导方针来确定最佳实践是什么 我在哪里可以找到更多关于FMOD::EventInstances和用于播放声音的相关接口/类的预期用途的信息。基本上,在使用资源时,我的责任是什么?FMOD在内存管理等方面负责什么 您应该如何跟踪每个事件类型的FM

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

虽然我已经让项目播放音频文件,但在文档中提供的示例代码中还遗漏了一些预期用途。由于我是FMOD新手,我发现API中的这些概念有些难以理解

是否有人知道,在使用API时,是否有任何形式的指导方针来确定最佳实践是什么

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

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

您应该在完成所有EventInstance后释放它们。如果您的声音事件是一次性的,您可以在开始播放后立即释放它,并在声音播放完成后自动释放。例如:

Studio::EventInstance* instance;
if (FMOD_ErrorCheck(_eventDescription->createInstance(&instance)))
{
    FMOD_ErrorCheck(instance->start());
    FMOD_ErrorCheck(instance->release());
}
如果您想保留声音事件的句柄以便可以继续播放,那么您可能只需要保留EventDescription的句柄,并在每次播放时创建新的EventInstance

如果不这样做,并且保留EventInstance,则启动声音将剪辑声音,并在每次尝试播放时重新启动

如果不想维护FMOD GUID列表,则可以加载Master Bank.strings.Bank文件或FMOD Studio生成的.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中右键单击特定事件并选择复制路径来获取该事件的路径