快速了解如何结合使用 Wwise Authoring API (WAAPI) 和 Max 8

Wwise 技巧和工具

简介

在 Wwise 中构建较为复杂的由 RTPC 驱动的 Event 时,我们经常会面临无法快速加以测试和验证的困境。

我们无法保证能够使用鼠标一次性控制一个以上的参数,并且在将参数映射到 MIDI 控制器或使用 MIDI 自动化操作时,效果可能不如预期。

如果没有便捷的方式来跳到想要测试的场景,或者音频设计所面向的系统还不完备或根本不存在,直接在游戏中测试可能会很麻烦并且会拖慢迭代流程。

Cycling74 开发的 Max 可以帮助解决所有这些问题。借助 NodeJS,可直接通过 WAAPI 连接到 Wwise,以便调用 Event 并更新 RTPC。

另外,它还提供有很多实用的图形 UI 对象(如曲线、滑杆、按钮、刻度盘)。它设有内置快照保存功能,方便存储不同参数配置的预设,并允许模拟参数随时间的变化。藉此,可为快速设计原型提供绝佳的环境。

在深入探究之前,提醒大家一下:文章末尾列有工程的 github 链接 :)。

waapi1

准备工作

要阅读本文并充分运用所学知识,您需要:

  • 安装最新的 Wwise,包括 Sample Project
  • 安装 Max 8(试用版应该就可以,但是我并不确定)
  • 对如何使用 Max 有基本的了解
  • 熟练掌握 JavaScript 编程知识

注意,屏幕截图都是 OSX 上的。不过,Windows 上的步骤是一样的。

首先,要创建一个 Max 工程而非简单的 Max Patcher因为我们想把所有内容都包含在其自身的文件夹中。接着,在 Max 工程文件夹中创建 code 子目录,并从以下位置的 hello-wwise-node-wamp 示例工程复制内容:

<WwiseInstallationPath>/SDK/samples/WwiseAuthoringAPI/js/

同时,将 wwise.js 文件由

<WwiseInstallationPath>/SDK/include/js/

复制到 Max 工程的 code 文件夹,以便在 index.js 脚本中轻松引用。

waapi2

然后,将 node.script 对象添加到修补程序中,并让其指向随 hello-wwise-node-wamp 示例一并提供的 index.js 文件。接着打开对象帮助修补程序(按住 ALT 单击 Max 对象),并将节点调试工具复制到补丁中。

附注:在默认情况下,Max 会在其功能有限的内置文本编辑器中打开 js 文件。如果您跟我一样喜欢使用 VSCode 或别的编辑器,可以在 Max 的偏好设置中进行更改。

最后,向 node.script 发送 script npm install 消息。这时会安装 packages.json 文件中列出的所有节点模块。

(国内观赏视频通道

在 Wwise 工程中,首先要确认是否在 Wwise User Preferences 中启用了 WAAPI。

waapi3

接着,按住 CTRL 双击打开 index.js,将 wwise.js 文件的路径更新到本地副本,并包含 max-api 模块,最后将 console.log() 调用替换为 Max.post() 调用来输出到 Max 控制台。

code

接下来,就要测试连接了;为此,要在 Wwise 中启用捕获功能,并转到 Profiler 视图中日志窗口的 WAAPI 分区,然后测试连接,看能否将 script start 消息发送到 Max 中的节点对象。

如果一切顺利,Max 控制台应当会输出 Hello 消息、Wwise 版本以及 Wwise Log。

(国内观赏视频通道

注意,在 SDK 示例提供的 index.js 中,会立即再次关闭连接。

为此,需要修改 onopen() 函数来缓存 akSession,并为节点进程添加 exit 处理程序以在节点脚本停止时关闭连接。

waapi4

接着,添加 MaxHandler 以便通过 UUID 发送 Event 并更新 RTPC。我特意选择了使用 UUID,因为在通过名称发送 RTPC 时遇到了一些问题。

waapi5

接下来,需要获取要通过 Max 调用的 Event 和 RTPC 的 UUID。幸运的是,Wwise 提供了 WAQL。借助这种复杂精细的查询语言,所有这一切都会变得非常简单。我们来添加两个额外的 Max 处理程序,以此返回所有的 Event/RTPC,并将其发送到 Max 节点对象的第一个输出引脚。我们可以将其连接到 Max 词典,并将词典永久嵌入到修补程序中,以便在稍后需要时随时访问 UUID。

waapi6

waapi7

现在,我们有了 UUID。接下来,就可以试着发送 Event 了。我们来使用 NYC 环境声 Event 测试一下。postEvent() 处理程序会获取三个参数、一个 Event 名称、一个 UUID 和一个对象 ID。

这个对象 ID 在后面很重要。对于稍后要发送的 Play/Stop Event 及 RTPC 更新,全部都要匹配。否则,Stop/RTPC 更新会不起作用,因为 Wwise 会认为它们不相关。

以下是前述示例工程的最终视频,其展示了如何驱动 Wwise SampleProject 的 NYC 环境声上的 TimeRain_Intensity 参数。

(国内观赏视频通道

下面是示例工程的 github 链接。直接将其下载为 .zip 并在 Max 8 中打开即可。

下一步?

当然,所有这些仍然需要进行很多手动设置,才能在 Max 补丁中构建好 Wwise Event。不过,Max 同时支持通过 JavaScript 编写修补程序脚本,包括以编程方式创建对象等。所以,所有这些其实都可以自动完成。

我已经开始尝试设法自动创建 Event 按钮等,如果成功的话,可能会做成小的 Max 数据包。

各位也来试试吧!

其他资源

迈克尔•哈通 (Michael Hartung)

迈克尔•哈通 (Michael Hartung)

迈克尔•哈通 (Michael Hartung) 是一名来自德国慕尼黑的技术音频设计师。自 2015 年以来,他一直在独自开发各种独立游戏和 VR 游戏,并为 Formosa Interactive UK 和 Dynamedion Germany 的各种项目提供技术音频设计服务。

hartung.studio

评论

留下回复

您的电子邮件地址将不会被公布。


更多文章

Wwise Authoring Query Language 简介

“Wwise 不过是张电子表格”。作为用户体验团队成员,我们经常会听到有人这样说。事实上,Wwise 不仅是款声音设计工具,Wwise...

20.7.2021 - 作者:伯纳德 罗德里格 (Bernard Rodrigue)

Wwise 2021.1 中值得一试的 10 项新增功能

在不久前,我们推出了 Wwise 2021.1 以供通过 Launcher 下载。该版本增添了基于对象的管线、Radial Emitter、Impacter 插件、WAQL...

3.8.2021 - 作者:麦斯·麦雷蒂·桑德鲁普 (Mads Maretty Sønderup)

WAAPI+TTS—语音临时资源自动构建流程

前言 在大型项目的生产过程中,自动化是很常用的手段。 在一个上百人的团队中,反复沟通、 来回协作,是非常容易出错的。使用自动化流程取代机械化的人为操作,可以大大减少出错的概率,提高生产效率。...

23.11.2021 - 作者:黄超

对白 | 基于Wwise与Unreal Engine的语音设计

21.12.2021 - 作者:杰克•盖米林 (Jake Gamelin)

Impacter 交叉合成的可视化展示

欢迎继续阅读我们的 Impacter 插件系列博文。在前两篇博文中,我们主要介绍了插件的相关物理参数,以及如何与游戏的物理系统紧密结合。在这篇博文中,我们将着重探讨 Impacter 的交叉合成功能。...

18.1.2022 - 作者:瑞恩•多恩 (Ryan Done)

ReaperToWwise | Marc Hasselbalch 开发的游戏音频整合工具

简介 大家好,我叫马克•哈塞尔巴尔赫,是一名来自丹麦的声音设计师。我很高兴能在此跟大家介绍自己构建的游戏音频整合工具 ReaperToWwise 并分享其背后的设计思路。简单来说,这个工具是个自定义的...

12.11.2025 - 作者:马克•哈塞尔巴尔赫

更多文章

Wwise Authoring Query Language 简介

“Wwise 不过是张电子表格”。作为用户体验团队成员,我们经常会听到有人这样说。事实上,Wwise 不仅是款声音设计工具,Wwise...

Wwise 2021.1 中值得一试的 10 项新增功能

在不久前,我们推出了 Wwise 2021.1 以供通过 Launcher 下载。该版本增添了基于对象的管线、Radial Emitter、Impacter 插件、WAQL...

WAAPI+TTS—语音临时资源自动构建流程

前言 在大型项目的生产过程中,自动化是很常用的手段。 在一个上百人的团队中,反复沟通、 来回协作,是非常容易出错的。使用自动化流程取代机械化的人为操作,可以大大减少出错的概率,提高生产效率。...