FMOD Studio User Manual 2.02
在收集了所有资源、创建了事件并调整了调音台设置之后,下一步就是将这些内容添加到游戏中。这个过程包括将事件分配给事件库,建立这类事件库,然后将这类事件库复制到游戏中。正确构建 FMOD Studio 项目有几个方面会影响其效率和整体功能。根据项目的规模和范围,一些规格可能需要在开发的早期进行规划,其他的可以在实现内容时应用。FMOD Studio 提供了各种设置,可确保有效的工作流程和高效的游戏性能。
为使内容可在事件中使用,需要将其内置到事件库中。事件库是项目中使用的元数据、资源、事件和其他内容的集合,用于在游戏中构建和使用。游戏代码通过调用库并操纵 FMOD Studio 事件产生声音。
FMOD Studio 不会自动将事件分配给事件库。如果在未先将项目事件分配给事件库的情况下运行构建过程,则生成的事件库文件将不包含这些事件。
要将事件分配给事件库,可在事件浏览器中右键单击事件,然后选择“分配给事件库...”,或可将事件从事件浏览器拖到事件库浏览器中,然后将其放到所选择事件库中。任何未分配给事件库的事件都标有#unassigned。
如何分配事件和设置事件库可显着影响项目的性能和效率。在使用该事件库中的任何事件之前,需要将事件库加载到内存中。事件库消耗的内存量取决于其内容。但项目可以包含的事件库数量或一次可以将多少事件库加载到内存中没有限制。
可在事件库浏览器中查看所有事件库并添加更多内容。
要创建新事件库,请在事件库浏览器的空白处右键单击并选择“新建事件库”。
也可右键单击事件库浏览器中的空白区域并选择“新建文件夹”来创建文件夹。默认情况下,将事件库放入文件夹不会影响构建过程,因为所有事件库都构建在[首选项对话框] (glossary.html#preferences-dialog)的构建选项卡中指定的“构建事件库输出目录”中。可通过选中首选项对话框构建选项卡中的“将事件库构建到镜像事件库浏览器层次结构的文件夹(可选)”复选框来覆盖此默认行为,这会导致构建的库被放置在与项目事件库库浏览器中文件夹相对应的文件夹中。有关构建事件库位置的更多信息,请参阅本章的构建会创建什么部分。
一些事件库是主事件库,其中包含与项目整体相关的数据,包括其调音台、总线和VCA。必须始终将至少一个主事件库库加载到内存中游戏才能正常运行。默认情况下,新创建的 FMOD Studio 项目有一个主事件库。
要将事件库设为主事件库,可右键单击该事件库并从右键菜单中选择“标记为主事件库”。
不建议将事件分配给主事件库。这是因为主事件库必须一直装载事件,即不可能为了节省存储空间而卸载事件。但在只需要一个事件库的小型项目中,将事件分配给主事件库可能更可行。
将事件库放入文件夹不会影响构建过程,因为所有事件库都构建在[首选项对话框] (glossary.html#preferences-dialog)构建选项卡中指定的文件夹中。
默认情况下,引用的事件及其样本数据会自动分配到与引用它们的每个事件相同的事件库中。即在构建之前不需要将引用事件专门分配给事件库。
可选择阻止引用的事件自动分配到其父项事件的事件库中。要启用此选项,请打开首选项对话框对话框并取消选中构建选项卡中的“在事件库中包含引用事件”选项。

启用此选项意味着必须手动将每个引用事件分配给事件库才能在游戏中使用它。通过将常用的被引用事件分配和构建到某个特定事件库,被引用事件及其样本数据仅会构建到该库中,并可由引用它的所有事件使用。这有助于减少构建事件库的文件大小。
事件库可包含两种类型的数据: 样本数据和元数据。样本数据是事件库事件使用的编码音频资源,而元数据是这些事件的所有其他定义特征。
游戏必须加载事件的示例数据和元数据才能播放该事件的实例。因此,默认情况下,事件库包含分配给它们的每个事件的元数据和样本数据。
此外,也可将元数据和样本数据构建到单独的事件库文件中。这将为项目中的每个事件库生成两个事件库文件。单独的元数据和样本事件库需要更多的资源开销,但也可独立更新,可用于修补游戏的元数据库,而无需在下载中包含样本数据库。要将项目的元数据和样本数据构建到单独的事件库文件中,请在构建项目之前在首选项对话框构建选项卡中的“构建事件库文件分离”下选择“通过构建元数据和资源分离事件库”选项。
一些游戏引擎还要求流媒体资源和非流媒体资源的样本数据位于不同的文件中。要将项目的元数据、流媒体资源样本数据和非流媒体资源样本数据构建到单独的事件库文件中,请在构建项目之前,在首选项对话框“构建事件库文件分离”构建选项卡中选择“构建元数据、非流媒体资源和流媒体资源到单独的事件库”选项。
所有事件库都是以二进制格式构建的,无论其是否包含元数据、样本数据或两者兼有,均不可读。
每个平台都有需要考虑的硬件和限制。例如,一些游戏机带有硬件音频解码器,用于节省处理能力,绝大多数手柄不需要 7.1 环绕声扬声器模式。FMOD Studio 可用于利用一个项目构建多个平台。
要将平台添加到构建列表,可右键单击首选项对话框构建选项卡中的“项目平台”列表,然后从“添加平台”列表中选择适当的平台。

可多次将同一平台添加到项目平台列表中,以表示多种硬件类型。例如,可有两个桌面平台,如有需要,可将一个命名为“Windows”,另一个命名为“Mac”。
可指定在构建到事件库中时如何压缩和编码资源。这会影响文件大小、加载时间和性能。压缩格式基于每个平台设置,并且可基于每个资源被覆盖。
可在首选项对话框中设置平台的默认编码设置。在事件选项卡下,在项目平台列表中选择所需的平台,然后选择默认编码设置。一些平台支持特殊的编码格式,例如 AT9 和 XMA。除PCM之外的所有编码设置都有压缩参与。
下表显示了每个可用平台及其推荐的编码器。
| 平台 | 推荐编码器 | 推荐理由 |
|---|---|---|
| 桌面 (Windows、Mac、Linux) |
Vorbis | 功能全面,可提供良好的压缩质量比。推荐用于所有音乐文件,无论平台如何。 |
| PlayStation 5 | AT9 | PS5 有一个 AT9 格式的硬件解码器,可以节省 CPU 周期。 |
| PlayStation 4 | AT9 | 与 PS5 一样,PS4 有一个 AT9 硬件解码器,可节省 CPU 周期。 |
| Xbox Series X|S | Opus | Xbox Series X 现在使用 Opus 硬件解码,可节省 CPU 周期。 |
| Xbox One | XMA | Xbox One 有一个 XMA 格式的硬件解码器,可节省 CPU 周期。 |
| Nintendo Switch | FADPCM | 轻量级编解码器,适用于 Nintendo Switch。 |
| 移动设备 (Android, iOS) |
FADPCM | 轻量级编解码器,适用于移动设备。 |
| 自定义 | 任何 | “自定义”平台兼容所有压缩格式,因此可用于上面所列平台以外的平台。 |
FADPCM 和 PCM 编码格式不允许调整压缩量,但可将采样率从 48.0kHz 更改为 4.0kHz。大多数平台不建议使用 PCM,但如果 FADPCM 的成本太高,仍然值得用于短声音。
AT9 是适用于 PlayStation Vita 和 PlayStation 4 的 Sony 独家编码格式。要使用 AT9 构建带有资源的事件库,需要将 libatrac9.dll 文件放在 FMOD Studio 安装目录的根目录中。使用 AT9 构建带有资源的事件库仅适用于 64 位 Windows 版本的 FMOD Studio。更多信息,请参阅随 FMOD API 提供的PlayStation Vita 和PlayStation 4 安装文档。
XMA 是一种 Microsoft 独有的编码格式,可用于 Xbox 360 和 Xbox One。使用 XMA 构建带有资源的事件库仅适用于 Windows 版本的 FMOD Studio。更多信息,请参阅随 FMOD API 提供的 Xbox 360 和 Xbox One 安装文档。
Opus 是某些平台支持的编码格式。请查阅目标平台的规范,确认其是否支持 Opus。
AT9、Opus、XMA 和 Vorbis 编码格式提供“质量”滑块,可用于控制构建时使用的压缩量。请注意,尽管质量滑块以百分比表示质量,但某些编码器的实际压缩比会固定在一定范围内。例如,当质量滑块设置在 40% 和 48% 之间时,AT9 编码的压缩率不会有任何差异。请参阅下文了解 FMOD Studio 如何确定压缩比:
有关如何基于每个资源覆盖编码设置的信息,请参阅管理资源部分。
将所有事件分配给相关事件库并根据需要定义所有构建设置后,就可以构建项目了。构建过程会收集项目的所有元数据、事件、音频表(及其键)和资源并将其捆绑到易于传输的事件库文件中。这些事件库文件是 FMOD Engine 经读取产生音频的内容。
要构建项目,可从“文件”菜单中选择“构建...”或“构建所有平台...”。“构建...”仅针对选定平台构建。“构建所有平台...”为项目平台列表中的所有平台构建事件库。
也可在事件库浏览器中右键单击事件库,然后选择“构建...”。这将只会将事件库构建到所选平台。
建立事件库所需的时间可能会有所不同,具体取决于事件库的资源、目标平台、压缩和编码设置和构建缓存。
如果在首选项对话框的构建选项卡中选择了“将元数据和资源构建到单个事件库”选项,则每个事件库都会构建到一个 .bank 文件中。每个 .bank 文件都包含分配给该事件库事件的元数据和样本数据。
如果选择了“将元数据和资源构建到单个事件库”选项,则每个事件库都会构建到一个 .bank 文件和一个 .assets.bank 文件中。每个.bank 文件包含分配给该事件库事件的元数据,每个.assets.bank 文件包含分配给该事件库事件的样本数据。
如果选择了“将元数据、非流媒体资源和流媒体资源构建到不同事件库”选项,则每个事件库都会构建到 .bank 文件、 .assets.bank 文件和 .streams.bank 文件中。每个 .bank 文件包含分配给该事件库事件的元数据,每个 .assets.bank 文件包含分配给该事件库事件的非流媒体样本数据,每个 .streams.bank 文件包含分配给该事件库事件的流媒体样本数据。
此外,构建主事件库会生成一个 .strings.bank 文件,其中包含每个事件的名称、路径和GUID项目,以及每个事件库的文件夹路径。虽然 .strings.bank 文件对于将声音加载到游戏中不是必需的,但它包含项目中事件的所有路径。没有它,只能通过事件的 GUID 查找事件,这可能不适合具体工作流程。

在上面的屏幕截图中,可看到 FMOD Studio 示例项目中的每个事件库都内置在一个.bank 文件中,还有一个Master.bank 和一个Master.strings.bank文件。
事件库文件是游戏用来产生音频的文件。构建完成后,不再需要 FMOD Studio 才能运行,并且可添加到游戏中。
通过使用 Unity 集成、Unreal Engine integration 或System::loadBankFile()API 调用,游戏将加载事件库并可访问分配给事件库的所有事件。加载后,可将播放事件分配给该事件库。
主事件库包含项目的所有元数据、调音台和收发数据。游戏运行时,必须始终将至少一个主事件库加载到内存中。
不需要将事件分配给主事件库。
构建项目时创建的文件会自动放置在项目的构建事件库输出目录中,如首选项对话框。如果未指定构建事件库输出目录,构建事件库将在 FMOD Studio 项目文件夹的“构建”子文件夹中创建。
在此文件夹中,构建的 .bank 文件被安放到以其所针对的平台命名的子文件夹中。此外,如果选中首选项对话框构建选项卡中的“将事件库构建到镜像事件库浏览器层次结构的文件夹”复选框,则构建的.bank 文件将放置在与项目事件库浏览器中的文件夹相对应的子文件夹中,位于每个平台的文件夹中。
任何版本的 FMOD Engine 都可加载在 FMOD Studio 中构建的事件库,该引擎与用于创建这类事件库的 FMOD Studio 副本以及所有更高版本共享相同的主要版本号和产品版本号。例如,在 FMOD Studio 2.00.03 中构建的事件库可以在 FMOD Engine 版本 2.00.00 和所有更高版本中加载,但不能在早期版本中加载。
在构建事件库并将其加载到游戏中之后,就可以播放事件了。
使用FMOD Unity Integration插件时,有两种方式播放事件。
第一种方法是将 FMOD Event Emitter 组件添加到游戏对象,选择要播放的事件以及播放时间。

第二种方法是使用FMOD Unity API从代码中调用事件。
使用FMOD for Unreal Engine Integration插件时,有几种播放事件的方式。
第一种方法是将事件从内容浏览器拖放到场景视口中。

第二种方法是使用 Blueprints 中的“在位置上播放事件”功能来触发任何给定的事件。
有关这两种方法的更多信息,请参见FMOD for Unreal Engine Integration 文档。
第三种方法是使用FMOD for Unreal Engine API来从代码中调用事件。
要通过 FMOD Studio API 播放事件,则需创建一个事件实例,然后指示启动。
system->getEvent("event:/UI/Cancel", &cancelDescription);
cancelDescription->createInstance(&cancelInstance);
cancelInstance->start();
cancelInstance->stop(FMOD_STUDIO_STOP_ALLOWFADEOUT);
有关详细信息,请参阅FMOD API 文档。