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