menu
 
版本
2021.1.14.8108

2024.1.4.8780

2023.1.12.8706

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open
警告:此页面上某些受保护的信息未予显示。
若为特定平台的授权用户,请确保已登录相应的帐户。
Wwise Unreal Integration Documentation
使用 AkAudioMixer 模块

简要说明

AkAudioMixer 模块旨在提供一个跨平台 Unreal Audio Mixer,以便最终能够同时运行 Unreal 和 Wwise 混音器。

Unreal Audio Mixer 并不依赖于平台本身的配置,其在 Windows、Mac、Android 和主机上都一样运行。为此,Unreal 使用了 Mixer Platform 来处理平台硬件和跨平台代码之间的交互。Unreal Audio Mixer 和 Wwise SDK 会自动初始化并处理平台的音频。不过,大多平台并没有办法同时接收来自多个音频源的音频,尤其是仅初始化某个特定音频系统的主机;若初始化两次,有些平台会崩溃,有些会允许两个系统不加区分地与同样的对象进行交互。

到目前为止,Wwise 文档给出的解决方案是对要使用 Wwise 的工程禁用 Unreal 的 Audio Mixer(参阅 常见问题解答 章节)。 AkAudioMixer 模块提供了一个兼容并包的跨平台解决方案,允许 Unreal 的 Audio Mixer 默认平台(XAudio2、SDL Audio、AudioOut 等)改用 Wwise 平台。如此一来,Wwise 便可正常初始化 Platform Sound Engine 以便 Unreal 处理音频。

此模块提供两个不同的输入组件,两者均通过基础的 AkAudioInputComponent 进行处理。

有关详细信息,请参阅 Wwise 301 课程中的发送 Audio Input 章节。

主混音 (FAkMixerPlatform)

FAkMixerPlatform 允许使用 Wwise Sound Engine 来替代 Unreal Audio Mixer 的平台特定构件。藉此,以立体声馈送形式获取 Unreal 下混的最终结果并将其用作 Wwise Audio Input。

之前禁用 Audio Mixer 的解决方案存在一定的限制,因为没有向 Unreal 提供音频时钟,自然也就无法驱动音频反馈。如此一来,Unreal 便无法生成音频。通过以某种方式 (FAkMixerPlatform) 驱动 Audio Mixer,整个 Unreal 音频子系统能够与 Wwise 音频系统一起充分发挥功能。

当前解决方案仅可以立体声形式提供 Unreal 音频。在这种情况下,Unreal 下混内容在 Wwise 中会被静音。所以,其只能作为权宜之计。同时使用两种不同的空间化方式会导致音频问题,因此这一解决方案只是迫不得已的临时变通之法。一旦正确设置了 FAkMixerPlatform,工程就可在需要为对象提供实际输入时使用 Unreal 子混音。

组件子混音 (UAkSubmixInputComponent)

AkSubmixInputComponent 允许将 Unreal 子混音轻松与 Wwise Audio Input 组件关联。藉此,可获取部分混音(如电影的音频)并单独发送给 Wwise。子混音可依据 Wwise 需要以任何声道配置提供。当然,在将音频从 Unreal 推送到 Wwise 时也存在一定的限制和性能考量因素。因此,可能的话最好直接在 Wwise 中配置整条音频流。

建议使用 UAkSubmixInputComponent 从各个 Actor 获取 Unreal 音频。通过平常所用的 Wwise Unreal Integration,可将 Audio Input Component 与其 Actor 位置关联,然后使用 Wwise 集成的空间化功能(在 2021.1 及更高版本中甚至还可使用基于对象的管线),来获得工程所需的音频属性和音频品质。

此组件可独立使用,并不需要 FAkMixerPlatform。不过要注意,在同时使用两条音频管线的情况下一并初始化 Unreal 的平台专有音频和 Wwise 的平台专有 Sink 仍会导致某些平台发生崩溃。

初始化

FAkMixerPlatform 和 UAkSubmixInputComponent 均通过 Wwise “Play” Event 初始化。这样将允许 Wwise Sound Engine 对 Unreal 组件进行轮询。

注意,启用 Event 即会启动轮询处理,而且这一处理不能模棱两可:要么启动,要么终止。FAkMixerPlatform 输入组件要始终处理播放状态,否则 Unreal 音频管线将无法正常运行。

轮询顺序

Unreal 轮询顺序示意图

一旦初始化完成,便可将整条音频管线视为树状结构(每隔几毫秒执行一次),来将下一音频片段提供给硬件。

在树状结构中,平台硬件会先请求从 Wwise Sink 获取音频缓冲区。然后,Wwise Sound Engine 会对所有正在播放的 Audio Input Component 进行轮询以获取音频。

此时会对 FAkMixerPlatform 进行轮询,请求从 Unreal Master Submix 获取下一缓冲区。继而将 Unreal 的循环音频缓冲区清空,以便整条管线能够持续工作。

音频缓冲

缓冲区示意图

同时使用两个时序系统会给终端混音带来一定的延迟。Unreal 会假定 A/V Component 按照自身速度进行播放,并使用循环缓冲区以 Audio Mixer 要求的速度提供音频。

为了确保以有效的速度提供音频,Unreal Master Submix 还在 Audio Mixer 的 FOutputBuffer 中设置了循环缓冲区。

因为各个子混音均由 Master Submix 推送,所以 Wwise 会同时请求获取其缓冲区。也就是说,Unreal 和 Wwise 都会推送请求。

最后,还会经过 Wwise Sink 进行缓冲(可通过代码进行自定义)。

FAkMixerPlatform 设置

Wwise Audio Input 源插件允许将来自外部源的输入用在 Wwise 中。对于任何给定输入,Wwise 端都会这样使用。

Master-Mixer Hierarchy
Actor-Mixer Hierarchy

为了捕获 Unreal Mix,我们必须创建一个 Wwise Audio Input 以及用来启动数据采集流程的 Event。

对此,建议在 Master-Mixer Hierarchy 创建总线,并创建使用 Wwise Audio Input 源插件的 Sound SFX 对象。您可以根据自身需要进行命名并采用不同的设置。但是,即便该组件所提供的音频最终会被弃用,最后也要连接到 Master Audio Bus。若要将最终结果静音,须确保声音不会被发送到虚声部。因为这会撤消必要的音频轮询,导致 Unreal Audio 管线无法持续运行。

Wwise 工程设置

Unreal_Input Source 的创建比较直接。一旦创建了空的 Sound SFX 对象,便可通过在 Contents Editor 中选择 Add Source >> 按钮来添加 Wwise Audio Input 源插件。

添加输入源

必要时可在音频源层级或直接在 Sound SFX 对象上设置音量偏置。

输入源所对应的 Contents Editor

在为 Sound SFX 设置好 Audio Input 源之后,需要将该声音输出到相应的 Output Bus(本例中为 Unreal Input Bus)。

输入源的属性

最后,还须添加用于播放此 Sound SFX 的 Event,否则会无法启动 Audio Input。另外,Unreal 中也会通过播放此 Event 来确定要针对 FAkMixerPlatform 使用哪个 Audio Input。

若要创建指向 Audio Input 插件的 Event,请选中 Sound SFX,然后右键单击并依次选择 New Event > Play。新建的 Event 会被自动命名为 Play_[SoundName]。不过,您可以根据需要对其进行重命名。

添加 Play Event
dangerous 警告: FAkMixerPlatform 须始终处于播放状态。这样才能驱动 Unreal 的 Audio Mixer 为组件处理音频。在 FAkMixerPlatform 没有处于播放状态时,Unreal 的循环缓冲区会被填满。这样可能会给音频带来延迟。若要将此声道静音,请确保其仍然处于播放状态,不会因为缺少音频而被发送到虚声部或终止。

若工程采用 Event-Based Packaging 工作流,系统会自动提供相应的 Event。若工程采用标准 SoundBank 打包工作流,则最先加载的 SoundBank 应包含 FAkMixerPlatform 的 “Play” Event 且从始至终都不能将其卸载。

Unreal 工程设置

您必须告知 Unreal 使用 Wwise 混音器而非平台自身的 Audio Mixer。对于各个平台,要将以下代码行添加到 <Project>/Config/<Platform>/<Platform>.ini <UE4_ROOT>/Engine/Config/<Platform>/<Platform>Engine.ini。注意,工程设置会覆盖引擎设置。如尚无该文件,可能需要新建。

Unreal Engine 配置

在激活相应的 Wwise Integration 后,须使用之前在 Project Settings 的 Audio Input Event 中创建的 Play Event。藉此,可将 Unreal 工程中的 FAkMixerPlatform 组件与 Wwise 声音引擎绑定:

Unreal Input Event

基本设置便是如此。之后,需在 Wwise 或 Unreal WAAPI Picker 中生成 SoundBank 并重新启动 Unreal Editor。注意,每次更改 Audio Input Event 都要重新启动,因为其只会被初始化一次。如在 Wwise 设计工具中针对 Unreal Player 启动 Profiler,应当可以看到 Audio Bus 的电平表数值变化。

FAkMixerPlatform 限制

Unreal 决定如何通过 ITargetPlatform 接口对音频进行编码。在每个平台上,Derived Data 系统都会调用 GetWaveFormatGetAllWaveFormats 方法来确定支持哪种音频格式。AkAudioMixer 系统不会将此覆盖。您需要确保通过此函数来提供支持的通用格式。为此,可自行覆盖必要的文件或确保满足使用通用编码(非平台特定编码)的条件。

倘若知道如何修改 Unreal 源代码,还可按照以下文件样式更改目标平台的音频格式: Engine/Platforms/<PlatformName>/Source/Developer/<PlatformName>TargetPlatform/Private/<TargetName>TargetPlatform.cpp

确保平台的音频格式与 FMixerPlatformWwise 的 CreateCompressedAudioInfo 方法中提供的相当。此方法可在以下文件中找到:

Plugins/Wwise/Source/AkAudioMixer/Private/AudioMixerPlatformWwise.cpp

UAkSubmixInputComponent 设置

Wwise 工程设置

UAkSubmixInputComponent 的 Wwise 工程准备工作与 FAkMixerPlatform 类似:在工程中,须创建新的 Wwise Audio Input Source 并设置要播放的 Event。此 Event 稍后要在 Blueprint(须自行创建)中与 Unreal 工程绑定。

dangerous 警告: 警告:跟 FAkMixerPlatform 输入一样,需确保 Wwise 对象不会被发送到虚声部或终止。只能由 Unreal 播放或终止该 Event。否则,Unreal 端会不断将缓冲区填满,导致出现延迟和内存用量峰值。

Unreal 工程的音频设置

创建和使用 Master Submix

本节将介绍如何设置 Unreal 工程来覆盖默认的 Master Submix 并自定义 Audio Submix 工作流。若仅完成此步骤但新的 Master Submix 保持原样而环境内没有构建任何树状结构,则 Default Master Submix 和新的子混音之间将不会有任何可辨的区别。每个 Unreal 工程只能有一个 Master Submix,其会由所有环境共用。

在工程中新建要用作 Master Submix 的 Sound Submix。您可以根据需要随意命名,但至少要标明其为 Master。本例中命名为了 MasterSubmix。

依次转到 Project Settings > Audio,然后在 Mix 分区中将 Master Submix 设为新建的 Audio Submix。

Unreal 工程子混音

现在有了空白的自定义 Master Submix,但还没有为其设置专门的通路。工程中的声音听起来应当跟使用 Default Master Submix 时一样。

捕获子混音

要想有效捕获 Unreal 内一组 Actor 的音频,必须为每个子混音类别创建两个新的子混音。鉴于 Unreal 中对子混音的处理方式,我们必须构建包含两个不同子混音的层级结构。这样可以确保子混音只包含自身音频而没有与其他任何音频预混。

为了确保恰当的命名规则,我们决定使用子混音本身的名称。对于第二个子混音,添加 Passthrough 后缀。在本例中,分别使用了 AmbianceSubmix 和 AmbianceSubmixPassthrough。对于自己创建的子混音,您可以根据需要自由使用任意给定名称。

将自定义子混音指派给 Master Submix

打开 创建和使用 Master Submix 章节中创建的自定义 Master Submix。然后,添加流程图以在真实的子混音和 Master Submix 之间设置不同的 Passthrough。您可以添加更多的子混音,并为子混音设置给定顺序。不过,要按照 Submix -> Passthrough -> Next in Tree 顺序设置。

比如,若有两个不同的子混音,则可按照下图进行设置:

Unreal 工程子混音

目前子混音尚未投入使用且未进行任何指派。工程中的声音听起来会跟之前一样,因为所有来自对象的音频仍会输出到 Master Submix。不过,一旦 Actor 将其音频发送到其本身的自定义子混音(比如此处定义的 DiscussionSubmix 和 AmbianceSubmix),音频便会被同时发送到 Discussion UAkSubmixInputComponent 和 Master Submix,导致音频重复。

为了避免这种重复,您需要将多重 Passthrough 混音的 Output Volume 设为 0。这样可以确保在下混期间不会将任何音频发送到 Master Submix,而是将 Discussion 和 Ambiance 子混音的全部音频发送到自定义的 Wwise Audio Input 组件。

Unreal 工程子混音音量

Unreal 素材子混音指派

向子混音添加音频很简单。在 Audio Effects 的 Submix 选项卡中,将素材的子混音设为所要使用的子混音即可。

dangerous

警告: 您可以将多个素材指派给任一 Submix,但要注意这些素材会先进行混音再发送到 Wwise Audio Input 组件。这也会让 Event 的 Play 和 Stop 更加困难,因为会有更多的 Actor 想要控制子混音。在这种情况下,定位的设置也会更加复杂。

若还是想将多个素材用于一个子混音,最好在关卡开头执行 Play Event,并在关卡结尾执行 Stop Event。这会对性能产生明显的影响。因为音频声道在该关卡会一直处于开放状态,若有很多音频声道,其全部都会将音频推送到 Wwise 以进行混音。

除此之外,也可设为由一个主组件决定音频数据传输的生命周期并在必要时让多个子组件提供音频。

WAV 素材

在本例中,我们将新的 WAV 文件导入到了 Unreal Content Browser,并更改了子混音来定义最终目标。

倘若按部就班地学习本教程,这时播放此 SoundWave 素材将不会生成任何音频。因为我们将 Passthrough 音量设为了 0,所以可闻的音轨并不会输出到 Master Submix。而且,现在还没设置用来 Play 和 Stop 所需 Audio Component 的 Event。

我们只是创建了组件,并未进行恰当的设置。所以,其在当前的 Unreal 环境中还没法使用。在以下章节中,我们将执行所需的操作。

Unreal Blueprint 设置

本节将举例展示如何设置 UAkSubmixInputComponent 以将创建的子混音与 Wwise Audio Input Component 绑定。对此,您可以根据工程的具体需要自由地进行设置。

在本教程中,我们将通过 "AmbientSound" Actor 提供音频。不过,可使用其他 Audio Component 甚至 Audio-Video 组件来将音频发送到子混音。

创建 AmbientSound Blueprint 类

首先,必须创建新的 Blueprint 类,并将 Unreal AmbientSound 设为父类。注意,这里还有一个可访问的 AkAmbientSound Actor。其用于创建 Wwise 专用 Ambient Sound,跟本教程没有关系。

info 注記: 出于性能方面的考虑,强烈建议在可能的情况下使用 AkAmbientSound。不过对 AkAudioMixer 来说并不需要,因为音频已在 Wwise 中播放和渲染。

在本例中,我们将 "AmbientSound" Actor 组件命名为了 AkSubmixAmbient。不过,您可以根据自己的命名方案来进行命名。

添加 AmbientSound

将之前创建的 SoundWave 与 Sound 分区中的 AmbientSound 对象关联(如下图右下角部分所示)。其目前还是一个通用组件,只是作为默认值来使用。

音频组件编辑器

应用 UAkSubmixInputComponent

我们必须设置用来控制 Play Event 和 Stop Event 的 Unreal 组件,并将子混音与 Wwise Audio Input Component 绑定。对此,可通过 "AkSubmixInput" Audio Component 来实现。

在 "AkSubmixAmbient" Blueprint 中,在根组件下添加 AkSubmixInput 组件。

添加子混音组件

在 Event Graph 中,务必在 BeginPlay 时发送 Ak Submix Input 组件的 Event,并在 EndPlay 时终止该组件。

组件的 Event Graph

这样可以确保在完成 BeginPlay 时激活音频数据传输,并在到达 End Play 时马上将其终止。在此,您可以根据自身需要灵活地加以优化。如要对此进行优化而非使用默认值,请遵循自身 Actor 的生命周期;仅在必要时启动和终止 Audio Input 处理。

接下来,便可编译并保存 Blueprint。

创建 Actor 并绑定 Event 和 Submix

在关卡中拖放新建的 Blueprint 来将其实例化。

在 Details 面板内,在 Sound 属性中根据需要设置 SoundWave。此项为实际值而非默认值。

设置 Sound Wave

选中 AkSubmixInput 组件。

设置子混音组件

此时,我们要定义 Ak Audio Event 以播放 Wwise Audio Input Component,并针对此 Component 设置 Submix to Record。在 Submix Input 分区中选择相应的 Submix to Record,并选择用于播放 Audio Input 的 Ak Event。

全部素材属性

就这么简单!到此,应将子混音用于播放 Ambient 声音且其目前应处于静音状态(因为在 Submix 树状结构中将输出音量设为了 0),同时应在 Wwise 中正确使用 Audio Input 来播放该对象的音频。


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅