快速了解如何结合使用 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 2019.2 现已上线!

Wwise 2019.2 现已上线并可以在 Wwise Launcher 的 Wwise 标签页进行下载!以下是关于此版本的新功能摘要。 ...

14.2.2020 - 作者:Audiokinetic (音频动能)

人人都能用 WAAPI(二)wwise.core 分支

大家好,我是溪夜。 在《人人都能用 WAAPI(一)概述》中,我们用思维导图对 WAAPI 进行了重新归纳,并在配置好开发环境后,一起用 Python 写了几个简单的小程序,体验了 WAAPI...

29.10.2020 - 作者:汪洋

Wwise语音管理探究

游戏的角色语音管理是一项细致且繁琐的工作。从项目的前期到后期,会遇到对角色语音的增删改查、添加动态效果处理及创建不同语种间的切换等需求。建立一套稳定可靠的语音管理流程会为工作带来效率。...

2.3.2021 - 作者:吉吉(徐喆)

在 Wwise 中调试并监控 Audio Object 的 9 个简单步骤

如果各位想了解 Wwise 中最新引入的基于对象的音频管线但又不知从哪里入手,不妨参考下述在 Windows 上使用 Wwise 设定并分析 Audio Object 的 9...

22.9.2021 - 作者:戴米安·卡斯特鲍尔(Damian Kastbauer)

Wwise+GME游戏语音方案:解锁更多语音玩法,让玩家“声临其境”

导语:...

4.11.2021 - 作者:腾讯云

教你如何选择适合自己的编解码器

9.9.2024 - 作者:马修.让(MATHIEU JEAN)

更多文章

Wwise 2019.2 现已上线!

Wwise 2019.2 现已上线并可以在 Wwise Launcher 的 Wwise 标签页进行下载!以下是关于此版本的新功能摘要。 ...

人人都能用 WAAPI(二)wwise.core 分支

大家好,我是溪夜。 在《人人都能用 WAAPI(一)概述》中,我们用思维导图对 WAAPI 进行了重新归纳,并在配置好开发环境后,一起用 Python 写了几个简单的小程序,体验了 WAAPI...

Wwise语音管理探究

游戏的角色语音管理是一项细致且繁琐的工作。从项目的前期到后期,会遇到对角色语音的增删改查、添加动态效果处理及创建不同语种间的切换等需求。建立一套稳定可靠的语音管理流程会为工作带来效率。...