FMOD Studio User Manual 2.02

16. 高级话题

16.1 自动控制参数

一个参数可通过三种方式由另一个参数控制。

16.2 空间化选项

将音频处理为似乎来自 3D 空间中的可变位置称为“空间化处理”。空间化处理通过使游戏中对象的可听位置更好地匹配玩家在屏幕上看到的位置,帮助创建一个身临其境且逼真的音效世界。空间化处理能够将游戏内对象的距离和方向信息传达给玩家。

在 FMOD Studio 中,空间化处理通常是通过使用音效来实现的: FMOD 空间化效果器效果、FMOD 对象空间化效果器效果以及 Resonance Audio 音频源效果等第三方插件音效。将其中一种音效添加到事件音轨可以空间化经过该音轨的信号,因此将单个此类音效添加到事件的主音轨是一种常见做法。这样可以确保事件的输出是被空间化的。

因为空间化处理会导致事件的输出根据事件实例相对于听者的位置而发生变化,所以向事件添加空间化音效会使该事件成为3D音效。

某些形式的空间化处理可以产生环绕声 7.1.4 声道格式的音效,或者需要特定于平台的对象空间化技术才能实现效果。有关在 FMOD Studio 中试听对象空间化效果器效果和 7.1.4 格式音效的信息,请参阅本章的试听对象空间化和高度平移部分.

16.2.1 FMOD 空间化效果器效果

FMOD 空间化效果器效果是空间化处理的默认解决方案,适用于绝大多数事件和游戏。该方案将通过的信号进行两种空间化处理: 一是根据听者朝向和事件实例位置的夹角调整信号的声像,二是根据事件实例与听者之间的距离对信号进行衰减。

此外,空间化效果器效果会将其输入信号上混或下混到目标平台的环绕扬声器模式,以确保整个项目的子混音一致。

与大多数其他空间化效果器效果不同,FMOD 空间化效果器效果不会中断音轨的信号链。空间化效果器效果的输出被传递到音轨信号链中的下一个音效或平移器

空间化效果器效果图

通过 FMOD 空间化效果器效果应用于信号的平移可以轻松区分事件实例在听者左侧或右侧的方向,但在使事件实例听起来像在听者之前或之后的声音方面效果较差,完全无法使声音听起来像是来自上方或下方。尽管如此,空间音效还是适用于绝大多数事件和游戏。

16.2.2 FMOD 对象空间化效果器效果

FMOD 对象空间化效果器效果旨在与特定于平台的对象空间化处理技术配合使用,例如 Dolby Atmos、DTS:X、Sony 3D Audio 和 Windows Sonic。其功能是将信号和事件的 3D 位置信息直接路由到对象混音器,而不是通过事件通常路由到的音轨和总线。因此,该信号不会遇到对象空间化效果器“下游”的任何音效或发送

对象空间化效果器效果图

因为空间音效旨在充分利用特定于平台的对象空间化技术,所以对象空间化效果器可以比空间化效果器音效更准确地对音频进行空间化处理。但由于大多数平台仅支持有限数量的对象空间化效果器,因此最好仅在需要高度精确空间化的事件中使用对象空间化效果器,并在所有其他事件中使用空间化效果器效果。

与 FMOD 空间化效果器效果不同,对象空间化效果器不会自动将信号上混到项目的环绕扬声器模式。相反,输出格式完全取决于所使用的技术。例如,如果目标平台的技术支持该格式,则可使用 FMOD 对象空间化效果器效果来对环绕声 7.1.4 格式的内容进行空间化处理。

在没有专门的对象空间化技术的平台上运行时,FMOD 对象空间化效果器效果会与 FMOD 空间化效果器功能相同,但仍将其信号直接路由到混音器而非通过事件原本遵循的正常路由路径。

有关使用 FMOD 对象空间化效果器效果试听事件的信息,请参阅本章的试听对象空间化和高度平移部分。

16.2.3 Resonance Audio 音频源音效

Resonance Audio 音频源音效是一个第三方插件,其功能类似于 FMOD 对象空间化效果器效果: 该音效通过将信号和事件的 3D 位置信息直接路由到项目混音器中的 Resonance 听者音效发挥作用,而非通过事件本来遵循的正常路由路径。因此,信号不会遇到 Resonance Audio 音频源的“下游”的任何效果器或发送。

与 FMOD 空间化效果器效果不同,Resonance Audio 音频源不会自动将信号上混到项目的环绕扬声器模式。相反,其输出格式是听者所在位置的双耳立体声。

空间化效果器音效图

Resonance Audio 音频源音效要求项目的混音器中至少存在一个 Resonance Audio 听者音效。此音效通常位于项目主总线的信号链中,或路由到主总线的组总线信号链中。不建议在项目中使用多个 Resonance Audio 听者音效,避免导致播放断断续续或失真。

16.3 试听对象空间化与高度平移

使用 FMOD 空间化效果器效果进行了空间化处理的事件可在 FMOD Studio 中试听,而无需进行任何特殊准备,但使用 FMOD 对象空间化效果器效果进行空间化处理的事件只有在运行 FMOD Studio 的机器上存在并正确配置了对象空间化技术的情况下才能试听。如果尝试在 FMOD Studio 中试听专门利用对象空间化处理的事件,且没有事先将项目和机器配置为试听该类型的内容,那么该试听将反映 FMOD 空间化效果器效果的行为,而非该对象空间化技术的行为。

同样,虽然大多数常见声道格式的内容可以在 FMOD Studio 中试听,无需进行任何特殊准备,但 7.1.4 格式的内容只有在运行 FMOD Studio 的机器上存在并正确配置了适当的技术时才能试听。如果尝试试听 7.1.4 声道格式的内容,且没有为播放该类型内容而事先配置项目和机器,那么输出将缩混为不同的环绕声或立体声格式。

换言之,如果想在 FMOD Studio 中试听对象空间化事件或 7.1.4 声道格式的音效,则必须满足某些要求:

不同的对象空间化技术以不同的方式将音效空间化处理。因此,虽然使用 Windows Sonic 进行试听可以听到 FMOD Studio 中的空间化音效,但如果游戏使用不同的对象空间化技术,则可能听起来与游戏中的试听音效有所不同。

16.4 资源文件夹

FMOD Studio 项目的资源文件夹包含音频文件及其事件中使用的其他文件。资源文件夹的内容显示在资源浏览器 中。

每当将文件导入项目时,该文件就会自动复制到项目的资源文件夹中。导入的文件可在发声器中使用,并在构建项目时作为音频数据包含在项目库中。

通过使用程序员发声器可在运行时播放未导入项目中的文件。有关程序员发声器的信息,请参阅对话和本地化章节。

如果团队使用源代码控制,并且未选中首选项对话框源代码控制选项卡中的“启用资源源代码控制集成”复选框,则在同步项目时,对项目资源文件夹中文件所作修改不会在团队成员之间自动同步。

启用资源和已建项目库源代码控制集成复选框

有关在源代码控制中使用资源文件夹的更多信息,请参阅使用源代码控制章节。

16.4.1 使用外部资源文件夹

默认情况下,项目的资源文件夹是 FMOD Studio 项目文件夹的资源子目录。可通过在首选项对话框的资源选项卡中指定不同的相对或绝对路径来更改资源文件夹。

资源文件夹属性

如果将资源文件夹更改为外部目录,可以将音频资源与 FMOD Studio 项目分开存储。这可能有利于团队将其音频资源存储在共享网络驱动器上。

然而,如果 FMOD Studio 项目被移动到另一台机器,但外部资源文件夹没有随之移动,或者项目资源文件夹使用相对路径并且项目被移动到不同的目录但没有移动其资源文件夹,那么该项目将无法再访问该文件夹中的资源。以这种方式丢失的资源将在资源浏览器中被标记为“#丢失”。

将项目的资源文件夹设置为网络驱动器可能会导致性能下降和报错,具体取决于网络的可用带宽和延迟。

将项目的资源文件夹设置于包含其他项目所使用文件的路径是不安全的。处理 FMOD Studio 项目经常会导致更改项目的资源文件,从而可能使其他项目无法访问这些文件。相反,其他项目对这些文件所做的更改可能会使 FMOD Studio 项目无法访问这些文件。此外,将 FMOD Studio 项目不需要的文件保存在该项目的资源文件夹中可能会导致性能下降。

如果团队使用源代码控制,则每位成员都可将其资源目录设置为不同的路径。如果团队使用外部资源文件夹是为了减小项目在磁盘或源代码控制存储库中的大小,则请确保团队的每位成员都使用外部资源文件夹。如果用户将文件存储在项目文件夹的 资源 子目录中,那么只要项目同步,这些文件就会自动添加到存储库中。因此,即使所有其他用户的资源文件夹位于不同的位置,也会增加项目的大小。

有关在源代码控制中使用资源文件夹的更多信息,请参阅使用源代码控制章节。

16.5 窃取和虚拟化

虚拟语音系统可限制和控制同时播放事件实例的数量。可在单个事件和混音器总线上设置实例限制。

限制能同时播放的事件实例数量能为玩家提供了一种不那么混乱的聆听体验,并允许您将重点音频放在重要的游戏项目或事件上。这样还能提供资源管理的额外好处,减少玩家机器的压力。

每个事件和组主线都有一个窃取属性,
在播放实例的数量将超过其最大实例时,窃取属性将指定应该停止或虚拟化哪些事件实例。

16.5.1 窃取

每当播放新事件实例会导致同时发生的实例数超过事件或总线的最大实例属性时, FMOD 都会遵循与该事件或总线相关的窃取行为。窃取事件实例可将其停止、阻止或虚拟化。

总线或事件的窃取行为可设置为以下一种情况:

16.5.2 虚拟化

虚拟化事件实例是正在播放但不产生音频的事件实例。当一个事件不再是虚拟的并再次开始产生音频时,被称为“真实化”。虚拟化总是窃取最安静的事件实例。

与其他窃取行为不同,虚拟化不会停止任何现有的事件实例。虚拟化事件实例的主音轨是被静音的,但回放位置继续前进。当事件不再是播放中最安静的事件实例时,就变成了真实化事件。因为播放位置仍在通过事件前进,真实化后,就好像事件从未被静音,给人一种只是离开声音范围的错觉。虚拟化事件实例中的所有行为,例如游戏参数自动化条件,以及发声器触发正常执行。

需要注意的是,FMOD Studio 事件在播放音频时需要先创建声道。每个正在播放的单一发声器和程序员发声器都算作一个 声道,复合发声器和散布发声器的播放列表中的每个条目,事件发声器中的每条相关内容都算作一个声道。这些声道还具有虚拟化或真实化的能力,如果已达到最大语音限制,这可能会导致部分事件变为静音。可通过根据需要为每个事件分配优先级来避免这种情况。另请注意,事件发声器不会继承其父项事件的优先级,需要将其优先级设置为与父项事件匹配,以避免上述部分虚拟化。

如果使用 FMOD_INIT_VOL0_BECOMES_VIRTUAL 标志初始化 FMOD Engine,当通道的可听度低于FMOD_ADVANCEDSETTINGS vol0virtualvol 字段中指定的限制时,通道会自动进入虚拟状态.

有关虚拟化的更多信息,请参阅 FMOD API 用户手册虚拟语音系统部分。

如何计算可听度

虚拟化和最安静的窃取行为窃取最不具可听度的事件实例。可听度使用以下变量计算:

16.6 主项目库特别内容

为了让 FMOD Engine 播放事件,至少需要在游戏代码中始终加载一个主项目库

主项目库包含 FMOD Studio 项目的全局混音器。全局混音器包括项目中使用的所有组主线辅助主线VCA和[快照] (glossary.html#snapshot)。

最重要的是,主项目库包含项目的主总线。由于主总线将输出到机器的扬声器,任何不通过全局混音器的信号都无法输出到扬声器。因此,必须始终加载主项目库,以使所有事件都可听到。

主项目库也可获得分配来的事件。在这种情况下,主项目库还包含这些事件及其引用音频数据。游戏代码可以用与访问任何其他项目库相同的方式访问这些事件。

16.7 播放状态

事件实例的播放状态是该实例当前正在执行的操作: 当前是正在播放、已暂停、正在停止或已停止。事件实例的播放状态会影响其加载到内存的方式和时间、消耗的内存量以及所需的语音数量。因此,详细了解播放状态有助于提高游戏性能。

每个播放状态都与某些行为相关联。

正在播放 事件实例输出到混音器。其时间线播放位置会自动前进,直到遇到延音点。如果其参数之一设置为新值,则该参数的回放位置会以该参数的寻道速度接近新值。如果其任何参数有速度,则这些参数的播放位置会自动前进。

可使播放事件实例进入暂停、即将停止或已停止的播放状态。如果非持久事件的播放实例在其时间线播放位置的右侧没有内容并且该事件实例中当前没有发声器正在产生输出,则该播放实例会自动进入停止播放状态。

已暂停 事件实例不会产生输出,但会继续消耗系统资源,如正在播放一样。其时间线和参数的播放位置不会自动前进。如果其参数值之一发生更改,则该参数的播放位置会在事件实例下一次取消暂停时更新。正在停止的暂停事件实例在取消暂停时恢复停止。

暂停的事件实例可以取消暂停,从而进入暂停之前的播放状态。立即停止暂停的事件实例会使其进入已停止播放状态。

正在停止 事件实例的行为与正在播放的事件实例相同,只是事件属性上AHDSR 调制器的释放周期应用于这些属性,并且一旦所有这些释放周期完成并且所有混响和延迟效果的尾音都播放完,事件实例就会自动进入已停止的播放状态。

可以使正在停止事件实例进入暂停或停止播放状态。一旦事件属性上的所有 AHDSR 调制器的释放周期完成,正在停止事件实例会自动进入已停止的播放状态。

已停止 事件实例不会产生输出。其播放位置不会自动前进。如果其参数值发生更改,这些参数的播放位置会立即移动到新的位置。

可以使已停止的事件实例进入正在播放的播放状态。

16.7.1 播放状态和 FMOD_STUDIO_PLAYBACK_STATE

在 FMOD Studio 中用于音效设计的播放状态与FMOD Studio API中的[FMOD_STUDIO_PLAYBACK_STATE]使用的“播放状态”略有不同。要将 FMOD Studio 播放状态转换为 FMOD Studio API 播放状态,请参见下文。

FMOD Studio 播放状态 等效的 FMOD_STUDIO_PLAYBACK_STATE 备注
正在播放 FMOD_STUDIO_PLAYBACK_PLAYING 当前正在播放的事件实例处于FMOD_STUDIO_PLAYBACK_PLAYING回放状态。
已暂停 FMOD_STUDIO_PLAYBACK_PLAYING
FMOD_STUDIO_PLAYBACK_SUSTAINING
FMOD_STUDIO_PLAYBACK_STOPPING
已暂停事件实例通过Studio::EventInstance::getPaused和[Studio::EventInstance::setPaused](%api%studio-api -eventinstance.html#studio_eventinstance_setpaused),而不是FMOD_STUDIO_PLAYBACK_STATE。因此,暂停的事件实例具有与取消暂停时相同的 FMOD_STUDIO_PLAYBACK_STATE
正在停止 FMOD_STUDIO_PLAYBACK_STOPPING 已被告知停止但在完全停止之前正在播放其 AHDSR 调制器释放周期的事件实例处于FMOD_STUDIO_PLAYBACK_STOPPING 播放状态。
已停止 FMOD_STUDIO_PLAYBACK_STOPPED 当前停止的事件处于FMOD_STUDIO_PLAYBACK_STOPPED 播放状态。

要将 FMOD Studio API 播放状态转换为 FMOD Studio 播放状态,请参见下文。

FMOD_STUDIO_PLAYBACK_STATE 等效的 FMOD Studio 播放状态 备注
FMOD_STUDIO_PLAYBACK_PLAYING 播放中
已暂停
暂停一个事件实例不会改变其FMOD_STUDIO_PLAYBACK_STATE,所以一个处于FMOD_STUDIO_PLAYBACK_PLAYING 状态的事件实例即使也被暂停也处于那个状态。
FMOD_STUDIO_PLAYBACK_SUSTAINING 播放中
已暂停
延音点会改变事件实例的 FMOD_STUDIO_PLAYBACK_STATE,但不会改变其在 FMOD Studio 中的播放状态。暂停一个事件实例不会改变其 FMOD_STUDIO_PLAYBACK_STATE,所以一个处于FMOD_STUDIO_PLAYBACK_SUSTAINING状态的事件实例即使也被暂停也会处于该状态。
FMOD_STUDIO_PLAYBACK_STOPPED 已停止
FMOD_STUDIO_PLAYBACK_STARTING 不适用 没有与 FMOD Studio API 的FMOD_STUDIO_PLAYBACK_STARTING播放状态等效的 FMOD Studio 播放状态。
FMOD_STUDIO_PLAYBACK_STOPPING 正在停止
暂停
暂停一个事件实例不会改变其FMOD_STUDIO_PLAYBACK_STATE,所以一个处于FMOD_STUDIO_PLAYBACK_STOPPING状态的事件实例即使也被暂停也会处于该状态。

有关 FMOD Studio API 中的 FMOD_STUDIO_PLAYBACK_STATE 和播放状态的更多具体信息,请参阅FMOD API 文档中的FMOD_STUDIO_PLAYBACK_STATE

16.8 音效链

音效链是一种特殊类型的预设音效,包含自身的信号链和其他音效发送侧链。将经常使用的一系列音效放入音效链中,可以更轻松地在整个项目中的多个位置使用该系列音效。

空音效链

可通过右键单击音效浏览器,并从上下文菜单中选择“新建预设 > 新建音效链”,将音效链添加到项目中。此外,可通过右键单击音效浏览器中的预设音效,然后从上下文菜单中选择“裹入音效链”将现有预设音效转换为包含该音效的音效链。此外,还可通过在事件编辑器窗口中选择一个音轨,右键单击控制面板,然后从上下文菜单中选择“添加音效链”来创建新的音效链。

新音效链上下文菜单命令

音效链的所有实例都具有相同的音效、发送和侧链,具有相同的属性设置,包括任何自动化调制器。由于音效链中的音效和发送属性可以进行自动化和调制,因此音效链的不同实例可能具有不同的当前属性值。如果音效链使用游戏参数(例如,用于自动化),则这些参数会自动添加到包含该音效链实例的每个事件中。

可通过右键单击控制面板中的音效链并从上下文菜单中选择“插入音效”、“插入发送”或“插入侧链”来将音效、发送和侧链添加到音效链。此外,如果正在事件编辑器窗口中查看包含音效链的音轨控制面板,则可单击并将信号链中其他位置的音效、发送和侧链拖到音效链上,将其添加到该音效链中。无法将预设音效、发送到事件中的辅助轨道的发送器以及其他音效链添加到音效链中。

带内容的音效链

可通过右键单击音效链并从上下文菜单中选择“删除”,从音效链中删除音效、发送和侧链。此外,如果正在事件编辑器窗口中查看包含音效链的音轨控制面板,则可将音效链内部的音效、发送或侧链拖到控制面板中的其他位置,以将其从该音效链中移除。如果音效链中只有一个音效,则可通过右键单击音效浏览器中的预设音效并从上下文菜单中选择“展开音效链”,从预设音效中删除音效链。

可通过拖动音效链中的效果器、发送和侧链到新的位置来更改他们的顺序。

在项目中的任何位置编辑任何音效链都会影响整个项目中该音效链的每个实例。如果要更改音效链的内容而不影响项目中其他音效链的其他实例,请右键单击音效链并选择“从预设中分离”。这将使用一系列音效、发送和侧链替换该音效链的实例,这些音效、发送和侧链与该音效链中的音效、发送和侧链相同,但没有链接到预设音效。

16.9 GUID 和路径

要在游戏代码中访问 FMOD Studio 项目中的分项,则需要通过名称和路径或 GUID 来识别这些分项。

在本节中,项目中使用 GUID 和路径的分项将被称为“对象”。

其中一些对象可将其 GUID 或路径复制到剪贴板。可从中复制 GUID 和路径的项目中的对象包括:

-事件
-项目库
-组总线
-辅助总线
-VCA
-快照

要在项目中查找对象的 GUID 或路径,请右键单击对象并选择“复制 GUID”或“复制路径”,然后将其粘贴到所选的文本编辑器中。此外,还可将其拖放到搜索栏 或文本编辑器上,自动粘贴其 GUID 和路径。

16.9.1 GUID

FMOD Studio 项目中的所有对象都包含名为GUID 的标识符。GUID 是指“全局唯一标识符”。每个 GUID 都是与 FMOD Studio 项目中的对象相关联的独一无二的系列字符和数字,可用于标识该对象。这意味着在同一位置多次创建的对象每次都具有完全不同的 GUID。例如,如果 event:/Music/Complex/Situation_Oriental 中的事件“Situation_Oriental”被删除并替换为另一个具有相同名称的事件,则两个事件具有相同的路径,但两个 GUID 不同。

请注意,并非项目中具有 GUID 的所有对象都会在其上下文菜单中具有“复制 GUID”的选项。

除了前面提到的上下文菜单中的“复制 GUID”选项,还可在脚本中使用ManagedObject.id 找到对象的 GUID。

FMOD Studio API 只能在加载了strings.bank文件时通过名称和路径识别事件。如果游戏没有加载strings.bank 文件,则需要使用 GUID 来访问事件。

16.9.2 路径

路径是 FMOD Studio 项目中对象的唯一位置。

路径是访问游戏代码中事件的最常用方法。

路径包括分层结构,例如文件夹、快照组或组总线,以及所引用对象的名称,例如总线名称、事件名称等。例如,示例项目中“Situation_Oriental”事件的事件路径是 event:/Music/Complex/Situation_Oriental

与 GUID 不同,路径不是为项目中对象的每个实例唯一创建的。例如,如果删除了上述“Situation_Oriental”事件,然后创建了一个具有相同名称的新事件,则任何引用 event:/Music/Complex/Situation_Oriental 的游戏代码仍然可以访问新创建的事件。

在游戏代码中使用路径而非 GUID 可以更轻松地识别正在访问的对象。请注意,要在游戏代码中使用路径,需要加载strings.bank 文件。

16.9.3 使用 GUID 和路径

在游戏代码中,可以使用 GUID 和路径来获取事件、总线和其他此类对象。

    // 通过路径检索事件
    FMOD::Studio::EventDescription* explosionDescription = NULL;
    ERRCHECK( system->getEvent("event:/Explosions/Single Explosion", &explosionDescription) );

    // 还可使用 getEvent() 检索快照
    FMOD::Studio::EventDescription* snapshotDescription = NULL;
    ERRCHECK(system->getEvent("snapshot:/IngamePause", &snapshotDescription));

    // 通过其 GUID 检索总线
    FMOD::Studio::Bus* sfxBus;
    ERRCHECK( system->getBus("{d320eb98-3d4a-4cd9-a001-fdb4e071c58e}", &sfxBus));

有关在游戏代码中使用 GUID 和路径创建事件的更多信息,请参阅FMOD API 文档

使用 FMOD Studio脚本 时,可使用ManagedObject.id 查看任何对象的 GUID。可使用studio.project.lookup() 通过 GUID 或路径查找对象。

    var myEvent = studio.project.lookup("%GUID%"); // 将 %GUID% 替换为事件的 GUID。

16.10 用户属性

事件可以具有用户属性。用户属性是由您或其他 FMOD Studio 用户定义的变量,可通过游戏代码进行检查。用户属性最常用于标记事件以供游戏进行特殊处理。

每个用户属性都有一个名称和一个值。用户属性的名称始终是一串字母和/或数字,而用户属性的值可以是字符串或浮点数。如果用户属性的值为数字,FMOD Studio 会自动将用户属性的类型设置为浮点数。同样,如果用户属性的值包含任何非数字字符,FMOD Studio 会自动将用户属性的类型设置为字符串。

用户属性

要将用户属性添加到事件,首先在事件编辑器窗口事件浏览器中选择该事件以查看其用户属性概览面板。单击最后一个用户属性准备文本输入,输入属性名称,按“Enter”,然后输入属性值。

可以编辑现有用户属性,方法是单击其名称或值,然后键入新名称或值。

将具有用户属性的事件构建到项目库后,游戏代码可以使用Studio::EventDescription::getUserPropertyStudio::EventDescription::getUserPropertyByIndexStudio::EventDescription::getUserPropertyCount检查事件的用户属性。

用户属性不能被自动控制经调制的,并且不能在运行时更改。

16.11 FMOD Studio 命令行工具

FMOD Studio 带有一个命令行工具。该命令行工具可在以下位置找到:

在安装了 32 位 FMOD Studio 的 64 位 Windows 操作系统上,此路径将为 C:\Program Files (x86)\FMOD SoundSystem\FMOD Studio

为了可以在 Mac 上导航到该应用程序包,请在安装文件夹中运行 cd FMOD\ Studio.app/

在 Windows 中打开命令提示符,或在 Mac 上打开终端,然后导航到安装 FMOD Studio 的文件夹。进入正确的目录后,就可运行 FMOD Studio 命令行工具。在这两种操作系统上,只需运行 fmodstudio 后跟一个或多个选项以及一个项目 .fspro 文件的路径。

以下选项有效:

16.11.1 例子

fmodstudio -build foobar.fspro #为项目“Foobar”构建所有平台的所有项目库

fmodstudio -build -banks “Master, SFX, Music” foobar.fspro # 仅为“Foobar”项目的所有平台构建“Master”、“SFX”和“Music”项目库

fmodstudio -build -banks “Master” -platforms “Desktop” foobar.fspro # 只为项目“Foobar”构建桌面平台的“Master”

fmodstudio -build -platforms “Desktop, XboxOne, PS4” foobar.fspro # 为项目“Foobar”构建仅适用于台式机、Xbox One 和 PS4 的所有项目库

fmodstudio -build -banks “Master, Dialog” -ignore-warnings foobar.fspro # 只构建“Master”和“Dialog”项目库,忽略项目“Foobar”的所有警告

fmodstudio -build -banks “Master, Dialog” -export-guids foobar.fspro # 只构建“Master”和“Dialog”项目库,为项目“Foobar”导出两个文本文件的 GUID

fmodstudio -build -shared-audio-source-dir “C:/audio assets” foobar.fspro # 使用项目“Foobar”的自定义资产文件夹构建所有平台的所有项目库

fmodstudio -script foo.js foobar.fspro # 在项目“Foobar”中运行脚本“foo.js”

fmodstudio -diagnostic foobar.fspro # 针对项目“Foobar”运行诊断

16.12 迁移 FMOD Studio 项目

FMOD Studio 的主版本之间迁移项目通常需要进行项目迁移。打开使用早期版本创建的项目时,系统会提示迁移该项目。

项目迁移对话框

此过程可能需要相当长的时间,具体取决于项目的大小和版本。迁移过程不具破坏性,即在保存项目之前不会覆盖任何内容,但强烈建议在开始迁移项目之前对项目进行备份。

项目迁移并保存后,将无法使用早期版本的 Studio 加载项目。

如果将项目迁移到新版本的 FMOD Studio,则可能需要更新游戏使用的 FMOD Engine 的版本。FMOD 版本号 分为三部分,格式为: 产品版本.主版本.次版本。FMOD Studio 版本生成的内置文件与具有相同主版本号和产品版本号的任何 FMOD Engine 版本兼容。例如,在 FMOD Studio 版本 2.00.03 中构建的库与 FMOD Engine 版本 2.00.03、2.00.00 和 2.00.10 兼容,但与版本 1.10.14、1.00.03 和 2.01.03 不兼容。

16.12.1 与团队合作

如果有多个用户处理项目,则应指定一个人来管理项目迁移。在迁移之前,所有用户都应将未完成的更改提交到版本控制服务器。如果使用的是共享驱动器或云存储,则应确保驱动器或云存储上的项目版本包括所有用户的未完成更改。提交所有更改后,项目迁移管理员应获取项目并执行迁移。项目迁移并保存后,迁移管理员应将项目的更新版本提交到版本控制服务器。对于不跟踪文件更改的其他形式的项目共享(例如共享驱动器或云存储),应将项目目录替换为新迁移的目录,以删除任何过时的文件。



16.13 迁移 FMOD Designer 项目

FMOD Studio 支持将 FMOD Designer 项目迁移到 FMOD Studio 项目格式。迁移过程可通过使用“文件 > 打开...”对话框并选择 FMOD Designer 项目或 FMOD Designer 工作区来启动。

对于包含多个 FMOD Designer 项目的工程,应首先将项目添加到可整体迁移的 FMOD Designer 工作区。迁移 FMOD Designer 工作区可确保合并相关 FMOD Designer 项目中的共同类别并相应地分配事件。

FMOD Designer 项目迁移对话框

16.13.1 不支持的功能

FMOD Designer 项目的大多数元素都以某种形式迁移到 FMOD Studio。然而,有些功能目前不受支持,因此不会得以保留或迁移。

音乐

迁移过程目前不支持 FMOD Designer 中的音乐系统。

效果

FMOD Studio 目前不支持或仅部分支持以下效果。因此,可能不会迁移效果及其任何相关包络。

事件属性

层叠属性

音效定义属性

当前不支持或部分支持音效定义的以下属性。有关 FMOD Studio 中播放模式行为的更多信息,请参阅多发声器的描述。

参数属性

延音点

FMOD Studio 目前仅支持时间线上的延音点,因此任何带有延音点的 FMOD Designer 参数都将迁移到时间线。迁移过程还要求具有延音点的参数具有非零速度。如果 FMOD Designer 事件包含多个带有延音点的参数,则从顶部开始的第一个参数的延音点将被迁移,其余的延音点将被忽略。

16.14 为游戏设置不同的音频配置

允许玩家自选音频配置类型的游戏非常常见。这样游戏可以针对玩家的收听方式进行混音上的特定调整。例如,如果音频系统缺少低音炮,则可能需要增强低音。如果使用的是手机扬声器,将混音合并为单声道可能会更好。创建自定义音频配置不仅允许特定于输出的混音获得最佳音频体验,还可用于在每种配置的基础上自定义资源成本。

可以通过利用 FMOD Studio 为多个平台构建内容的能力来设置这类配置,从某些平台中排除内容,并在构建项目库时将项目的元数据与其资源分开。

16.14.1 支持多扬声器配置

首选项对话框中的构建平台列表可有多个相同的平台。平台的每个副本都可代表该平台的不同硬件配置。例如,在首选项对话框的构建选项卡中,可进行以下设置:

示例项目平台列表

16.14.2 平台排除

通过在某些效果或音轨上使用平台排除功能,可将输出配置特定的混音应用到这些平台。例如,可在主总线上使用多频段“EQ”来增强电视扬声器的低音,同时可在耳机上添加通道混音效果减少 LFE 信号量。

右键单击音轨或音效,然后选择“包括在...”。从此子菜单中,可以选择将其包括或排除的平台。设置了排除属性的音轨和音效将增显加号和减号图标。

带有排除音效的排除音轨

某些效果会在信号链中的位置改变信号的通道格式。从平台中排除这类音效可防止其改变该平台上的信号,但不会阻止其改变信号的通道格式。例如,如果平台的环绕扬声器模式设置为 5.1 环绕声,则空间化效果器音响效果会自动将信号上混到该平台上的 5.1 环绕声格式,即使这类空间化效果器效果已从该平台中排除。可以改变通道格式的音效包括 FMOD Convolution Reverb、FMOD Channel Mix、FMOD Panner、FMOD Spatializer、FMOD Transceiver 和 Resonance Audio Soundfield 音效。

每个 FMOD Studio 窗口的右下角是平台下拉菜单。通过从此下拉菜单更改平台,可以听到该输出配置在游戏中的声音。

16.14.3 在已建项目库中分离元数据和资源

默认情况下,每次为平台构建项目库时,FMOD Studio 都会将资源和元数据捆绑到同一个库文件中。当使用多个相同平台时,拥有资源文件副本可能会占用不必要的空间。通过分离元数据和资源,可以在平台之间共享一套资源库。要分离元数据和资源,请在首选项对话框的构建选项卡中启用“构建元数据和资源分离项目库”选项。

启用此选项后,每个平台的每个库都会构建两套 —— 一套用于元数据,一套用于资源。由于资源在输出配置之间是相同的,因此游戏项目中的目标平台只需要一组assets.bank文件。

例如,如果一个资源库将供多平台共用,可以将其移出平台特定的元数据库所在文件夹,放到独立的文件夹中,从而生成如下文件夹结构:

├─PC 资源库
│      Master.assets.bank
│      Music.assets.bank
│      SFX.assets.bank
│
├─PC 耳机
│      Master.bank
│      Master.strings.bank
│      Music.bank
│      SFX.bank
│
├─PC 电视扬声器
│      Master.bank
│      Master.strings.bank
│      Music.bank
│      SFX.bank
│
├─Xbox 资源
│      Master Bank.assets.bank
│      Music.assets.bank
│      SFX.assets.bank
│
├─Xbox 耳机
│      Master.bank
│      Master.strings.bank
│      Music.bank
│      SFX.bank
│
└─Xbox TV Speakers
       Master.bank
       Master.strings.bank
       Music.bank
       SFX.bank

使用上面的示例,可以加载一次assets.bank文件,然后为所选输出配置加载必要的元数据.bank文件。要交换输出配置,可以卸载当前加载的元数据.bank文件并加载所需的元数据.bank,保持assets.bank文件不变。

此设置允许游戏在每个平台上拥有一套资源数据,并且可以根据用户需要加载几种不同的组合。

请注意,卸载主元数据库会移除当前加载的混音器,并停止并释放当前正在播放的任何事件。因此,建议避免在游戏过程中切换音频配置,并只在选项菜单中切换。

16.15 项目库加密

构建完成的项目库不支持“解压缩”或“反编译”“解压缩”或“反编译”,并且不包含足够的数据来反转构建过程,重造构建项目库的 FMOD Studio 项目。尽管如此,具有足够编程知识并熟悉FMOD API的人理论上可以创建一个从游戏的项目库文件中读取音频数据的程序。此类程序可用于获取游戏的音频剧透,或创建游戏受版权保护音频内容的非法副本。

可通过在首选项对话框的构建选项卡中为 FMOD Studio 项目设置项目库加密密钥来防止这种情况。项目库加密密钥可包含任何数量、类型和组合的字符,包括空格和符号以及字母数字字符。

项目库加密密钥

如果项目带有项目库加密密钥,在创建项目时,项目库文件就会使用该密钥进行加密。经加密的项目库文件只能由FMOD_STUDIO_ADVANCEDSETTINGS结构包含正确加密密钥作为其encryptionkey成员的游戏项目加载。例如,如果将 FMOD Studio 项目的项目库加密密钥设置为“密码 1234”,则项目库只能由FMOD_STUDIO_ADVANCEDSETTINGS结构的encryptionkey成员也是“密码 1234”的游戏加载。

请注意,项目库加密是一种干扰手段,只能增加从项目库读取数据的难度,但不能阻止玩家在玩游戏时录下音频。但不能阻止玩家玩游戏和录音。

16.16 匿名使用数据

默认情况下,FMOD Studio 会自动收集用户使用其不同功能的数据,并将其发送给Firelight Technologies FMOD Studio 的开发者。

FMOD Studio 不会收集任何可用于识别用户身份或用户游戏的数据,也不会收集可用于重现用户项目的详细信息。例如,每次重命名一个事件,FMOD Studio 都会对事件的重命名进行记录,但不会记录该事件的新名称或旧名称。同样,每当单击自动化节点并将其拖动到新位置时,FMOD Studio 都会记录自动化节点的拖动,但不会记录移至或移出的位置。

从 FMOD Studio 的所有用户收集的数据经汇总用于显示 FMOD Studio 每项功能的使用频率。我们使用这些信息用于确定为 FMOD Studio 的未来版本要开发哪些新功能和改进。

如果不想发送匿名使用数据,则可选择“帮助 > 欢迎”,打开欢迎对话框,然后取消选中对话框底部的“允许收集匿名使用数据”复选框。选择不收集匿名使用数据不会阻止 FMOD Studio 从 联系支持对话框崩溃报告对话框 向 Firelight Technologies 发送日志文件和崩溃报告。