简介
在 Wwise 中构建较为复杂的由 RTPC 驱动的 Event 时,我们经常会面临无法快速加以测试和验证的困境。
我们无法保证能够使用鼠标一次性控制一个以上的参数,并且在将参数映射到 MIDI 控制器或使用 MIDI 自动化操作时,效果可能不如预期。
如果没有便捷的方式来跳到想要测试的场景,或者音频设计所面向的系统还不完备或根本不存在,直接在游戏中测试可能会很麻烦并且会拖慢迭代流程。
Cycling74 开发的 Max 可以帮助解决所有这些问题。借助 NodeJS,可直接通过 WAAPI 连接到 Wwise,以便调用 Event 并更新 RTPC。
另外,它还提供有很多实用的图形 UI 对象(如曲线、滑杆、按钮、刻度盘)。它设有内置快照保存功能,方便存储不同参数配置的预设,并允许模拟参数随时间的变化。藉此,可为快速设计原型提供绝佳的环境。
在深入探究之前,提醒大家一下:文章末尾列有工程的 github 链接 :)。
%20with%20Max%208/waapi1.png)
准备工作
要阅读本文并充分运用所学知识,您需要:
- 安装最新的 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 脚本中轻松引用。
%20with%20Max%208/waapi2.png)
然后,将 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。
%20with%20Max%208/waapi3.png)
接着,按住 CTRL 双击打开 index.js,将 wwise.js 文件的路径更新到本地副本,并包含 max-api 模块,最后将 console.log() 调用替换为 Max.post() 调用来输出到 Max 控制台。
%20with%20Max%208/code.png)
接下来,就要测试连接了;为此,要在 Wwise 中启用捕获功能,并转到 Profiler 视图中日志窗口的 WAAPI 分区,然后测试连接,看能否将 script start 消息发送到 Max 中的节点对象。
如果一切顺利,Max 控制台应当会输出 Hello 消息、Wwise 版本以及 Wwise Log。
(国内观赏视频通道)
注意,在 SDK 示例提供的 index.js 中,会立即再次关闭连接。
为此,需要修改 onopen() 函数来缓存 akSession,并为节点进程添加 exit 处理程序以在节点脚本停止时关闭连接。
%20with%20Max%208/waapi4.png)
接着,添加 MaxHandler 以便通过 UUID 发送 Event 并更新 RTPC。我特意选择了使用 UUID,因为在通过名称发送 RTPC 时遇到了一些问题。
%20with%20Max%208/waapi5.png)
接下来,需要获取要通过 Max 调用的 Event 和 RTPC 的 UUID。幸运的是,Wwise 提供了 WAQL。借助这种复杂精细的查询语言,所有这一切都会变得非常简单。我们来添加两个额外的 Max 处理程序,以此返回所有的 Event/RTPC,并将其发送到 Max 节点对象的第一个输出引脚。我们可以将其连接到 Max 词典,并将词典永久嵌入到修补程序中,以便在稍后需要时随时访问 UUID。
%20with%20Max%208/waapi6.png)
%20with%20Max%208/waapi7.png)
现在,我们有了 UUID。接下来,就可以试着发送 Event 了。我们来使用 NYC 环境声 Event 测试一下。postEvent() 处理程序会获取三个参数、一个 Event 名称、一个 UUID 和一个对象 ID。
这个对象 ID 在后面很重要。对于稍后要发送的 Play/Stop Event 及 RTPC 更新,全部都要匹配。否则,Stop/RTPC 更新会不起作用,因为 Wwise 会认为它们不相关。
以下是前述示例工程的最终视频,其展示了如何驱动 Wwise SampleProject 的 NYC 环境声上的 Time 和 Rain_Intensity 参数。
(国内观赏视频通道)
下面是示例工程的 github 链接。直接将其下载为 .zip 并在 Max 8 中打开即可。
下一步?
当然,所有这些仍然需要进行很多手动设置,才能在 Max 补丁中构建好 Wwise Event。不过,Max 同时支持通过 JavaScript 编写修补程序脚本,包括以编程方式创建对象等。所以,所有这些其实都可以自动完成。
我已经开始尝试设法自动创建 Event 按钮等,如果成功的话,可能会做成小的 Max 数据包。
各位也来试试吧!

评论