引子
相信很多声音设计师在使用 Wwise设计软件进行音频整合的时候,会遇到一些重复性很强的工作,比如:大量的导入/替换样本,生成事件,设定 Switch 等等。特别是当这些重复工作的量堆叠上去以后,会占用比较多的工作时间,同时,繁复的机械操作也容易带来工作上失误。
我是一名游戏声音设计师,在了解到WAAPI 后, 发觉结合脚本批处理是可以明显的提升上述类型工作的效率的。于是,我尝试一边学习Python,一边来编写WAAPI脚本。这里给大家分享这个近期编写完成的WAAPI工具程序:CA_Waapi_Tools。
WAAPI,全称 Wwise Authoring API,WAAPI 可以通过编程语言与 Wwise 设计工具进行互动或执行命令。关于WAAPI, Audiokinetic博客上已经有很多的文章了,前人珠玉在前,我也就不重复的造轮子了。如果需要更多的了解WAAPI、学习WAAPI, 非常推荐阅读溪夜撰写的《人人都能用 WAAPI(一)概述》。
简要说明
CA_Waapi_Tools使用Python 3.7进行编写,使用了waapi-client 库来实现各项功能。程序已上传[GitHub],欢迎大家下载使用。
CA_Waapi_Tools 是一个面向游戏音频设计师的拥有可视化界面的Wwise批处理工具,可以批量化的执行一些常见的Wwise操作。说起批处理,我们很多时候会想到使用XML表作为批处理操作时的数据来源,但是考虑到数据表本身也会带来较大的编写和管理成本,我在设计这个工具设计的时候,便以文件的命名作为绝大部分的功能的数据来源,尽可能的减少复杂的步骤。
CA_Waapi_Tools功能
两种方式的 Events 批量生成,并重命名
监控 Window 文件夹,自动更新 Wwise 工程中的音频文件
批量自动导入音频并生成事件
新导入的音频文件会按照 Random Container 的方式进行组织
多语言的本地化样本批量导入
Switch的批量自动设置
Soundbank 批量设置或生成
限制
没有涉及到互动音乐的批量导入与整合
若文件命名不规范,会影响一些功能的使用
样本的命名不要重名,否则Auto-Update功能可能难以使用
Switch的自动设置功能在Wwise 2017.1.x 上不支持
准备工作与工具启动
Wwise中需开启Waapi,可在User Preferences页面做如下配置:
如无法正常连接, 请参考官网的相关页面进行规范的配置,Wwise 2017界面略有不同
对于第一次使用本工具的用户,建议使用前先在SVN/Git/P4v备份Wwise工程以防出现设想之外的工程修改
大部分较复杂功能的按钮都有Tips,请注意查看
工具的启动非常简单:先打开 Wwise 工程,再打开CA_Waapi_Tools,如CMD界面没有出现未连接等提示,即为正常,并会呈现主界面,如下图
主界面功能模块
① 对特定类型的Containers批量生成Events 并重命名
适用场景:在Audio Import时选择 Template, 或者选中需要生成Events的父级Hierarchy,可以一键生成大量 Events, 且不需要二次命名。
②监控某一Window 文件夹下的 Wav文件的新增或修改,可一键更新Wwise工程中的同名 Wav 文件,或新增Random Container并同步生成Event
适用场景:新建工程时大量样本的快速导入和创建事件;更新工程时大量样本的自动替换和更新;多语言的本地化样本批量导入
③对选中的Containers依据命名进行Switch的自动指配
适用场景:大量的Containers需要配置到各自的 Switch Container下并设置
④ 对选中的Events 批量生成同名Soundbanks;批量修改 Soundbanks的Inclusion
适用场景:Soundbanks的批量生成或修改
点击菜单Options –> Config 打开Config界面:
⑤功能②的Windows监控目录以及 Containers, Events自动导入/生成的目标Wwise Path⑥功能①和②的 随机规则的自定义选项⑦功能①模块的Events自动生成的目标Wwise Path⑧功能①模块的 重命名规则的配置xml⑨功能④模块的SoundBanks 自动生成的目标Wwise Path
功能模块①:面向Container 的Event 批量生成
本模块可实现:
选中Folder或者Actor-Mixer后,可以对其所有指定类型的子级Containers批量生成Events,并根据重命名规则进行重命名;
开启订阅模式后,将记录下新增(包括Audio Import导入)的指定类型Containers。可以对这些Containers批量生成Events并重命名。
步骤:
1. 在红色区域选择好需要批量生成的Container类型:
如果对象类型需要是 Sound, 请在下拉框选择
如果对象类型不是Sound,下拉框请选择 Except Sound,并且勾选需要的Container类
型
,可以多选
2. 在勾选完Container类型后可以:
在Wwise的Audio面板中选中一个或多个的 Folder或者Actor-mixer, 然后点击
,便可将其子级中符合步骤1) 设定的Containers批量生成Events, 并重命名
订阅新增Containers:
点击
按钮,开启订阅模式,此时会开始记录下任何新增的、在步骤1)中所设定的Containers
点击
按钮,会将这些记录下来的Containers批量生成Events,同样会重命名
扩展选项:
:由于很多时候Random Container的命名不适合过长,而子级Sound 的命名往往与wav源文件相同,因此以Random Container的子级来执行重命名是更优的默认选项。
假如在订阅模式下需要清除已记录的Containers, 可以点击
关于重命名的规则可以在Config页面进行配置
功能模块②:自动Update音频文件,批量生成相关Container, Events
步骤:
点击按钮
,开始监控Windows文件夹(需要手动建立默认路径D:\MonitorWavsFolder,可在Config面板内修改):此时在这个文件夹内新增或修改的wav文件都会被记录
点击
按钮, 会将步骤1)中记录下的wav文件,自动根据随机命名的规则进行整理,并更新到Wwise工程中去,会发生以下三种情况:
-
如工程中有相同命名的Sound SFX, 该SFX会被自动替换
如工程中没有同命名Sound SFX, 但是存在符合随机命名规则的兄弟Sound SFX, 会添加到其父级Random Container层级下
如工程中没有任何Sound SFX满足以上两种情况,则视为新增样本,将会以Random Container 的结构导入,并自动生成Event
扩展选项:
a. 除了常用的以SFX导入外,也支持以 Voice导入,并可以指定导入的 Language(注意:Language如果自定义输入的话,命名必须与Wwise工程中一致)
b. : 对于需要多语言的Wwise工程,在导入Voice的时候要格外注意导入的 Language,在默认配置(即不启用这个选项)的时候需注意:
-
SFX 和 Voice 最好不要一次 Auto-Update
不同language 的Voice 也不要 一次性的 Auto-Update
不同language的同一句话,即一个Sound下的不同Language样本,推荐使用完全一样的名字, Auto-Update 会自动导入同一个Sound内
c.启用选项:该模式适合所有样本,包括不同Language都没有重名的命名风格。Auto-Update时会完全根据wav文件的命名导入,而不受 扩展选项a) Imports As 设定的影响
d. 在Auto Update遍历Wwise工程时,可以选择不同的 “Inclusion Option” 方案来定义有效的Sound(SFX or Voice):
-
Only Currently:这个模式下,仅会Update 当前平台Inclusion Enable的Sound
Within Unlinked: 默认模式,只要有一个平台的 Inclusion是 Enable的,即为有效,可以被Auto -Update
Ignore Inclusion: 无视Inclusion选项, 只要是Sound,都会 Auto -Update
e.:可以勾选新增的Containers是否要自动生成Events
功能模块③:Auto Switch Assignment
假如你有一堆Container_X需要拖放至各自的Switch Container 下,并需要设定其绑定到Switch_ABC中的 Switch_a(一个Switch Group中的某个Switch), 这个功能可以帮你批量化快速完成!(注意:Wwise 2017.1.x 不支持该功能)
事前准备:
Container_X 的命名必须包含有:Switch_a 和SwitchContainer(想要指派的Switch Group及Switch)
这些SwitchContainer需要放置在一个Actor-Mixer下
步骤:
选中一个SwitchGroup,即例子中的Switch_ABC,并点击
选中一个包含SwitchContainers的 Actor-mixer, 并点击
在wwise工程中,选中所有Container_X后,点击
扩展选项:
:该模式下,在步骤3)中,也可以选中Container_X的父级Hierarchy后进行Auto Switch Assignment. 并且可以筛选Hierarchy下特定类型的Containers
假如勾选了
,在步骤3)之后,会自动的将 Containers的命名成Switch_a
(例如Container名:CharactorA_Dialogue_Map002_Line015_oldman, 最后会命名成Switch_a的名字: oldman)
功能模块④:批量Soundbanks 生成与修改
本模块可以批量生成或修改Soundbanks
步骤:
在面板
勾选Soundbanks所需要包含的 Inclusion 类型
选择好Inclusion类型后可以:
Wwise工程中选中SoundBanks或者包含SoundBanks的Folder, 然后点击
,便可批量修改所选的SoundBanks的Inclusion类型
通过下拉框
, 选择SoundBanks批量生成的模式:
Folder模式:在Wwise工程中选中Folders或者WorkUnits,然后点击
,便可一键生成Folders/WorkUnits 各自对应的Soundbanks
Single Events模式:在Wwise工程中选中Events或者包含Events的Folders, 然后点击
, 便可一键生成每个Events所对应的Soundbanks
其他:
菜单 File -> Get Project Size可以检测工程规模大小(Event 和Sound的数量),与Auto-update功能类似,也是有三种 Inclusion模式,工程体量的数据会在命令行中显示
菜单 WAAPI -> Connect/Disconnect 可以连接或断开Wwise工程的 Wappi 连接
关于随机命名方案面板:
(图中的规则为:最后两位为数字,倒数第三位为短折号或下划线)
只要命名满足后x位分别是各自的字符类型的,则视为满足随机规则,其中:
-,_ 为短折号和下划线
0~9 为阿拉伯数字
A~O 为大写英文字母 A 到O
a~o 为小写英文字母 a 到o
在功能模块②, 使用Auto-Update功能时,会以这里随机命名的规则为依据,查找兄弟Sound或者构建全新的Random Container
已知问题:
功能模块1:
仅能启动一次,且启动后变更 Container 类型无效。
如需要修改Container类型, 请重开程序。
功能模块2:
仅能启动一次。如启动后变更Windows监控文件夹,请保存设置并重开程序。
结语
作为一名声音设计师,这是我第一次使用编程语言去开发这种小工具。和音频设计工作很不一样的是,编写代码非常考验逻辑思维能力。在编写代码的这一整个过程中,让我对Wwise设计软件的各个模块和数据类型也有了更深的理解和认知。而这些新收获,所学到的新知识也会帮助我更好的完成游戏音频整合工作。
希望这个小工具能够去帮助声音设计师更省力的完成一部分游戏音频整合工作。也欢迎大家和我交流在 Wwise 整合过程中遇到的各种工作难点和痛点,我会尽量的把这个工具做的适用性更强。
本文作者![6eb1fd6ec446cbc7d7b9b552912b58b9.png](https://i-blog.csdnimg.cn/blog_migrate/4ea106c3eb597eca749a4271a686cc0d.jpeg)
![0636c247f78098ebc30ec8515366d5ce.png](https://i-blog.csdnimg.cn/blog_migrate/b59dbf9555b5522c08cdc3ce4bd63922.png)
楼哲文
声音设计师,腾讯CROS Audio,从11年开始从事游戏声音设计工作,目前在腾讯CROS Audio担任高级音频策划。一名金属乐爱好者,专注于游戏音频整合工作,对于技术音频和线性编辑都有抱有强烈的热爱。
![be8914fc42f43e7a55ab621f68d61548.png](https://i-blog.csdnimg.cn/blog_migrate/e54fda250e5d7706189e4ba3595a5ebf.png)