假如你之前从来没用过 Wwise Authoring API (WAAPI),我觉得不妨接着往下读,说不定对你有帮助呢。
我也知道,对于非编程人员,WAAPI 好像有点超纲了,而且不那么容易理解。别着急,听我慢慢说。咱们来看看它会为现有工作方式带来怎样的巨大变化。
虽然会占用你一点时间,但我相信是值得的。
Wwise Authoring API 是什么?
你可能会好奇,为什么我那么推许 WAAPI,它究竟会带来怎样的便利。这个暂且不说,我们先来了解一下它是什么。
在 Wwise 2017.1 版本更新时,Audiokinetic 一同发布了 Wwise Authoring API。从名称不难看出,它是一种 API(译注:API 全称 Application Programming Interface,即应用程序编程接口),也就是用来影响另一程序的代码。对我们而言,这个程序就是 Wwise 设计工具。
WAAPI 的作用是通过网络与 Wwise 进行通信,在程序之间收发信息包。为此,它采用了支持多语言编程的 WAMP 通信方式(译注:WAMP 全称 Web Application Messaging Protocol,即 Web 应用程序消息传输协议)。说白了,就是让你可以使用不同的语言编写 WAAPI 代码,自由地选择以本地方式或通过网络与 Wwise 进行通信。
利用 WAAPI,你可以自动导入音频文件、创建 Event(事件)、大规模修改属性、生成 SoundBank(音频包),甚至创建自定义 GUI(比如打造个性化调音台)。如果你觉得这还不够,可以试试在多个 Wwise 程序之间进行通信(比如以此来对比新旧版本的工程)。没错,我自己就试过。
听起来很神奇,对吧?
对是对,不过它也并非完美无缺。
准入门槛
在 Audiokinetic 首次面向 Wwise 用户推出 WAAPI 时,我都有点不敢相信。这款 API 的潜在用途之广简直让我大开眼界,现在想来都是如此!只消稍微发挥一下想象,就会意识到它将可以用于各种各样的应用,而且会对工作流程带来巨大改进。
但是,我很快发现其他人有点…没闹明白。
Audiokinetic 详尽地阐述了 WAAPI 的各种用途 – 它可以用来完成好多操作!可是,我发现不少非编程人员对于它究竟是什么不甚了解。你可能以为它只是一项普通的 Wwise 新增功能,实际上它允许你根据自身需要灵活地创建自定义功能。
在你带着疑问查阅 API 文档时,可能会发生以下两种情况:
- 你会为它所提供的众多可能性感到惊叹。
- 如果你是一位编程新手,可能会望而却步,觉得它没法使用。
第二种情况让我很是担忧。
试想一下:
刚开始,你了解了 WAAPI 是什么,也知道它可以用来干嘛。然后,满心欢喜地想用它创建全新的实用功能。比如,设计一个可以按照计划自动生成 SoundBank 的工具。
接着,你开始仔细查阅 API 文档。开头的内容简单明了,至少各种函数的名称并不难理解。但是,看到 WAMP 示例代码部分的时候,立马就蒙了。
然后,你觉得有点招架不住了,心想“这工作应该交给程序员才对啊”!于是,就让程序员帮你实现自己的创新想法。
哎,等等…可能你们公司压根儿就没程序员这个物种。岂不完了…
就算有程序员,人家可能正忙着修复重大引擎漏洞,或者在设计面向游戏用户的新功能。
然后,就尴尬了…很快你会对 WAAPI 失去信心,懒得再费心研究下去。最后,跟很多人一样,虽然需要这项功能,也的确想用,但是觉得准入门槛太高了点。
这正是我当时要解决的问题。
降低门槛
在专业人士的帮助下,我开始着手简化 WAAPI,让它在 C# 环境下用起来更加简单。
下面就是我们所做的改进:
- 从公式中移除 WAMP 和 JSON,让最终用户不用直接面对这些难懂的东西。
- 降低 WAAPI 的使用难度,让音频设计师或音频实现人员可以轻松使用,而无需频频求助于专业程序员。
- 让它尽量与现有 WAAPI 语法保持一致。这样用户就可以直接参考 WAAPI 文档查阅对象属性等概念(文档中有详尽的列表)。
为了实现上述所有构想,我花几周时间创建了 WaapiCS 封装器(可直接与 WAAPI 进行交互的代码层)。现在通过 MIT 许可证就可免费使用 WaapiCS(也就是说,你可以把它用于商业用途、发布并进行更改 – 只要别忘了我这个原创作者就行)。如需下载源码,请单击文末链接。
那么,它到底好在哪儿呢?下面,我们来对比一下部分代码。
调用ak.wwise.core.getInfo
我们来看下 ak.wwise.core.getInfo 函数调用。在将此函数调用发送给 Wwise 后,将返回有关 Wwise 的常规数据。比如,当前运行的版本以及 Wwise.exe 的路径。
文档中最初提供的示例工程代码是这样的:
在使用 WaapiCS 时,代码是这样的:
就这么简单!在调用 ak.wwise.core.GetInfo 时,会返回 Dictionary,以供循环访问。只要你对 C# 编程有点了解,这都不是什么难事儿。
编程术语
在你准备大展拳脚之前,容我先解释一下我到底做了什么,又是怎么办到的。假如你想做一些远程扩展,可能仍需程序员提供一点帮助。要是根本不打算编辑框架,基本上就可以跳过这段了。
两个代码层
WaapiCS 在构建过程中整合了两个代码层。底层为 WaapiCS.Communication,用来通过 WAMP/JSON 与 Wwise 进行通信。它构建有一些简单对象:
- Connection – 在使用一次性调用时,与 Wwise 建立连接。
- Subscription – 调用特定 Wwise 函数,然后等待回调。
- Packet – 该对象包含用户提供的所有参数。在 WAMP 进程中,将发送并转换为 JSON。
- Results – 该通用 C# 对象包含所有回调的结果。Wwise 可能会返回多种类型的 JSON。在回调后从 JSON 转译时,可利用此对象将 JSON 强制转换为某一特定类型。
顶层(包含在命名空间 ak 内)提供了实际面向用户的 API 调用。为了尽量与 WAAPI 语法保持一致,我统一采用了静态调用方式(这样在 WaapiCS 构建完成后可以剥离或修改顶层)。底层的 Packet 对象通过用户提供的参数构建。假如 Wwise 返回结果,在函数调用结束后就会返回给用户。来看看下面的例子:
上面显示的是 ak.wwise.core.remote.Connect 调用。它首先使用了一个字符串参数,也就是想要远程连接的游戏主机 IP。然后,通过其余代码清理 Packet 对象的结果(用过之后要马上清理),设置 WAAPI 所要使用的过程,将主机 IP 添加至 Packet,声明 Wwise 要回调哪个函数,最后通过 connection.Execute 将 Packet 发送至 Wwise。在完成上述所有流程后,将再次清理 Packet 对象以供下次使用。API 中的每个函数都会采用类似方式重复这一模式。
当然,这套面向用户的静态调用可能并不适用于所有团队。正是考虑到这一点,我在构建 WaapiCS 时才采用了两个代码层。其中,底层用来通过 WAMP/JSON 与 WAAPI 进行通信,一般不需要编辑。倘若所在团队想以不同方式来编写面向用户的代码,则可完全剥离并重写顶层,而不会影响 WAMP 通信层。
用途
一般来说,你可以使用 WAAPI 和 WaapiCS 自动处理、批处理或重新构建 Wwise 设计工具相关功能。比如:
- 批量导入音频文件或创建 Event 和 SoundBank
- 对工程所用参数、总线等进行大规模修改
- 按照计划自动生成 SoundBank
- 在 Wwise 和各个程序之间进行通信
- 为 Wwise 设计工具创建自定义控制界面
- 批量创建 TTS VO,并自动导入到 Wwise 中
…诸如此类,不胜枚举。
为了展示 WaapiCS 的具体应用效果,我创建了一个简单的自定义混音界面。
以上所示 GUI 采用 C# 编写,可控制 Wwise 内各种总线或对象节点的音量。试想一下类似最新数字调音台的“页面”功能,在 Wwise 与游戏相连时,只需随便单击几下,就可深入整个 Wwise 层级结构,单独微调各个对象或上层混音总线。你将可以轻松保存自定义调音台快照,快速返回一组特定的推子、滑杆,进而调整相应属性或辅助发送。真可谓只有想不到,没有做不到啊!
上图虽未包含太多功能(它只是个原型),但很有条理不是吗?如果需要,你可以在 Wwise 之外轻松构建自定义调音台 GUI,把它设置成自己想要的样子。
当然,也不一定非得是 C# 原型 GUI 设计。您可以把它灵活地嵌入到 Unity、Unreal 或是自研游戏引擎中。甚至,还可映射至 OSC,然后直接在 iPad 或控制器上进行 Wwise 混音。
使用
如果你或所在团队还没想过使用 WAAPI,我希望此刻你能意识到它的必要性。我已经把 WaapiCS 发布到了网站上,虽然仍在不断完善,但不妨先下载下来试用。反正没有商用限制,也不会产生任何费用。
假如你也遇到了上面所说的情况,虽然很想创建一些实用工具,但是苦于没有时间或资源,不妨发邮件给我。我目前承接各种客户委托业务,非常乐意帮您把 Wwise 平台打造得更加易于使用。
评论
新兴 赵
August 29, 2018 at 04:46 am
这简直就是音频设计师的福音啊
新兴 赵
August 29, 2018 at 04:59 am
WaapiCS 已经不能下载了。可以再更新下下载地址吗?
新兴 赵
August 29, 2018 at 04:59 am
WaapiCS 已经不能下载了。可以再更新下下载地址吗?
新兴 赵
August 29, 2018 at 04:59 am
WaapiCS 已经不能下载了。可以再更新下下载地址吗?
Hou Chen Zhong
April 25, 2019 at 12:33 pm
https://github.com/adamtcroft/WaapiCS