快速了解如何结合使用 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

评论

留下回复

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

更多文章

动态早期反射的声源成像法

在我们的博客《在Unreal 中使用 Wwise Reflect模拟基于几何信息的动态早期反射》中,大家了解了如何用Unreal Integration和Wwise Audio...

9.1.2018 - 作者:塔丽•凯克里基安(THALIE KEKLIKIAN)

关于音频复用和高效利用的几点经验分享

大家好,“如何对音频资源做有节制、更高效的利用”,应该是大家工作中都会考虑的问题。...

30.12.2019 - 作者:胡正伟

在Wwise中进行大批量音频管理的思路分享

在我的日常音频工作中,经常会遇到需要做大批量语音文件导入、配置的情况,由此产生的批量化处理需求大致可分为三种:...

11.5.2020 - 作者:葛鑫

Wwise Unity 速查表

今天我们来说说 Wwise Unity Integration。这些年来,相关学习资源越来越丰富,随时都可以拿来参考。就拿 Audiokinetic 官方资源来说,YouTube...

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

ReaWwise:连接REAPER和Wwise

介绍...

23.9.2022 - 作者:安德鲁·科斯塔 (Andrew Costa)

Wwise Spatial Audio 2023.1 新增功能 | 对 Aux Send 模型进行的完善

如果各位了解过 Wwise 2023.1 的新增功能,可能会注意到文档中有这么一句话:“对 Aux Send 模型进行的完善”。这个到底是什么意思呢?今天我们就来详细说说。在此,我会简要介绍对...

14.12.2023 - 作者:内森 哈里斯(NATHAN HARRIS)

更多文章

动态早期反射的声源成像法

在我们的博客《在Unreal 中使用 Wwise Reflect模拟基于几何信息的动态早期反射》中,大家了解了如何用Unreal Integration和Wwise Audio...

关于音频复用和高效利用的几点经验分享

大家好,“如何对音频资源做有节制、更高效的利用”,应该是大家工作中都会考虑的问题。...

在Wwise中进行大批量音频管理的思路分享

在我的日常音频工作中,经常会遇到需要做大批量语音文件导入、配置的情况,由此产生的批量化处理需求大致可分为三种:...