在Wwise中进行大批量音频管理的思路分享

游戏音频 / Wwise 技巧和工具

在我的日常音频工作中,经常会遇到需要做大批量语音文件导入、配置的情况,由此产生的批量化处理需求大致可分为三种:

  • 第一种,大批量的多性别语音文件的导入及配置需求,例如:游戏中已存在男、女和少女三种性别,需要在Wwise中使用Switch Container来做切换管理,包括新增Switch Container,分配Switch GroupAssign Objects,简单讲:为已有性别进行批量资源导入与Switch配置;
  • 第二种,在现有的Switch Container里面重新批量插入一种新增性别的语音文件,简单讲:增添新的性别类别后资源的批量导入与Switch配置;
  • 第三种,由于项目语音文件数量庞大,我们采用动态分包加载Soundbank的方式,经常会需要按照地图位面IDMapID)来批量重新调整音频事件与Soundbank之间的归属。

由于项目的DAU非常高,出于“稳定优先“的考虑,我们让Wwise版本停留在了2016。然而由于此版本的Wwise中还没有WAAPI功能(2017.1才加入),因此当发现每两个月就有两三千句左右的语音需要进行上述三种批量处理的时候,声音设计师心态简直要炸裂了,所以必须要找到办法解决这个问题。以下便是我的处理思路的分享,仅供参考。

注:”位面”在游戏《天涯明月刀》指剧情分支得以展开的地图副本。

需求一的解决思路

针对需求一,可以使用Wwise自带的Template模板功能,将每一句台词三种性别版本的语音文件放到一个文件夹里,再用这个文件夹来新建Switch Container,从而可以批量套用现有的Switch Container的模板。这样做还可以套用模板的Switch Container里的Bus通道设置、流媒体wem设置、Switch GroupSwitchAssign Objects情况等设置,非常实用。如图,两千句语音文件几秒钟便可导入、配置完毕。Template的功能帮我们解决了很多配置的套用,很赞。

1封装好的文件夹全选后,选择要套用的模版
2开始批量套用模版来新增Switch Containers

然而有一个问题不能忽视:面对两三千的语音文件,将不同性别的语音文件移动到一个文件夹并使文件夹命名与其子项中相同的字段一致,也是个不小的工作量,这时候便需要程序同事帮忙开发一个小工具——AudioGenerateFolder.exe(这里要给同事+鸡腿1)。这个小工具可以批量将不同后缀标记的源文件封装在同一个文件夹,并且新增同名文件夹。

注:

  • 小工具的做法很多种,本文只是聊下思路;
  • 若使用具备WAAPI的Wwise版本,Bernard Rodrigue提供了用于解决此类需求的Python工具:https://github.com/decasteljau/waapi-python-tools-1/tree/master/auto-rename-container;
  • Hou Chenzhong提供了带GUI的该工具的二进制版本,可直接在这里下载使用。
3批量新建封装文件夹的小工具 
4不同后缀文件封装前后的示意图

需求二的解决思路

针对需求二——将新增文件插入到已有Switch Container里,我们可以通过修改Wwise工程中与语音相关的WorkUnit xml文件(下文中统一以项目中采用的Voice.wwu指代)的内容来实现。

5已有Switch Container

单个或多个文件的拖拽添加是很容易,但当你有大量的新增的Switch选项需要插入到已有的Switch Container里,数量多到几千个的时候,查找到原有的Switch Container就要耗费大量时间(尽管可以用List View,后来的版本也可以直接在Container Editor里搜索),就更别提一个一个拖拽插入后再做Switch分配设置了。这时候你需要程序同事帮忙开发一个小工具,AudioMoveSwitch.exe(为同事+鸡腿2)。

注:小工具的做法很多种,本文只是聊下思路。

6批量修改移动Switch归属的小工具

原理其实就是通过批量修改了Actor-Mixer Hierarchy下的Voice.wwu文件来实现的。

7Wwise里面SwitchContainer和待添加的语音

比方说我们现在要把0331_L移动到同名的Switch Container里面,先打开Voice.wwu,搜索关键词0331就会看到SwitchContainer Name="0331",和他的两个“孩子”躺在ChildrenList里。

8Voice.wwu里已有的SwitchContainer结构图

 这时候新生儿”0331_L躺在外面,如图:

9新增语音文件在Voice.wwu里的结构图

然后我们打开工具里文档,写下新生儿”0331_L的名字

10批处理工具的文档截图

然后再打开Voice.wwu文件就会发现新生儿”0331_L回到了“妈妈”的怀抱了。

11Voice.wwu中三个“孩子”的样子
12Wwise工程中三个“孩子”的样子

给几个新生儿找妈妈或许还算容易,给几千个新生儿找到妈妈让他们乖乖躺在摇篮里,通过手动的方式就不容易了。通过截图,大家应该也能明白,把新增语音先导入Wwise中,在Voice.wwu表格中获得ID等信息,然后就是顺着名字做归类,放到同名的SwitchContainer下的ChildrenList里面就好了。

需求三的解决思路

针对需求三,前面也已说到,在我们项目中,语音Soundbank是根据不同的地图位面信息(MapID)进行动态加载的,这要求我们根据MapID来命名Soundbank,从而方便负责程序同事对Soundbank进行查找比对与调用。因此一旦MapID有变更,音频也要做相应调整才能保证正确的调用(反之事件移动到了不同Soundbank亦然)。这种问题若是偶然出现的话还好,但当涉及的事件数量大到一定程度,搜索找到这些音频事件并且移动到正确的Soundbank就变得非常耗时。

为此,我们会首先监测拉取最近的分包比对表格,SoundbanksInfo.xml这时就显得特别有用了。

13音频事件在声音引擎和语音配置表格里的Soundbank差异对比

注: 我们的客户端,制定了位面场景ID编号和Soundbank 的命名关键词的一一对应关系,例如:进入一个ID为1000的位面场景,就会自动调用命名中含有关键词1000的Soundbank,例如DIALOG_1000便是依据这样的命名规则设置的。

在我们获取到哪些音频事件需要处理以及它们应该放置的Soundbank归属信息之后,这时候就需要程序同事帮忙开发一个小工具——AudioMoveBank.exe(给同事+鸡腿3)。

注:小工具的做法很多种,本文只是聊下思路。

14批量修改移动Soundbank的小工具和读取的信息表格

原理其实就是通过修改了Events路径下的Voice.wwu文件来实现,因为我的操作习惯是每一个Soundbank都会在Events页签下有一个对应的打包放置音频事件的文件夹。

15Soundbank的文件夹管理和打开Voice.wwu可以看到的文件夹结构

所以移动音频事件的Soundbank分包,只要在Voice.wwu里面批量修改Folder的归属就好了。

以上就是当我在大批量语音文件管理的思路,感谢Wwise,感谢程序大佬们的技术支持。

 

葛鑫

音频策划

北极光工作室

葛鑫

音频策划

北极光工作室

评论

黄 耀沛

October 31, 2020 at 12:30 pm

感谢经验!

黄 耀沛

October 31, 2020 at 12:30 pm

感谢经验!

留下回复

您的电子邮件地址将不会被公布。

更多文章

基于 State 的 Wwise 混音新功能——控制所有参数!

Wwise 2017.2 已经发布,在大量显著改进和幕后优化之中,包括一个令人激动的新功能——Wwise 中基于 State 的混音功能得到了拓展,能让你更加灵活有效地控制混音。在 2017.1...

14.3.2018 - 作者:布拉德利.梅尔(BRADLEY MEYER)

利用 Wwise 将两个 Audio Device 整合到 UE 游戏中

大家好,我叫埃德·卡辛斯基,是一名来自俄罗斯圣彼得堡的声音设计师和音乐家,目前在做一个非常有趣且重视声音表现的项目:这是一个名为《牧师与鬼驱人(Priest vs....

26.8.2020 - 作者:埃德·卡辛斯基 (Ed Kashinsky)

关于AudioLink的探索之旅

在去年 10 月的 GameSoundCon 上,我跟戴米安 (Damian) 在酒店拐角三明治店共进午餐的时候探讨着技术问题。我说“显然,现在我们可以将 MetaSounds 作为音频源在...

7.5.2024 - 作者:彼得·德雷舍 (Peter "pdx" Drescher)

在 Wwise 中构建环境声系统

简介 大家好!我叫刘易斯,是 Soundcuts 的声音设计师,同时也是 Airwiggles...

10.12.2024 - 作者:刘易斯•汤普森

利用 Wwise Time Stretch 插件驱动游戏中的过场动画

简介 这是徐若昊撰写的三篇技术系列博文的第一篇。该系列博文主要分享《逆向坍塌:面包房行动》背后的声音设计。在本文中,他深入探讨了如何利用 Wwise Time Stretch...

31.7.2025 - 作者:徐若昊(Jater Xu)

《Headbangers: Rhythm Royale》背后的声音设计 | 让鸽子跟着节奏肆意舞动

《Headbangers: Rhythm Royale》是全球首款竞技类在线音乐游戏。在游戏中,您将与另外 29...

17.9.2025 - 作者:Charles Bardin

更多文章

基于 State 的 Wwise 混音新功能——控制所有参数!

Wwise 2017.2 已经发布,在大量显著改进和幕后优化之中,包括一个令人激动的新功能——Wwise 中基于 State 的混音功能得到了拓展,能让你更加灵活有效地控制混音。在 2017.1...

利用 Wwise 将两个 Audio Device 整合到 UE 游戏中

大家好,我叫埃德·卡辛斯基,是一名来自俄罗斯圣彼得堡的声音设计师和音乐家,目前在做一个非常有趣且重视声音表现的项目:这是一个名为《牧师与鬼驱人(Priest vs....

关于AudioLink的探索之旅

在去年 10 月的 GameSoundCon 上,我跟戴米安 (Damian) 在酒店拐角三明治店共进午餐的时候探讨着技术问题。我说“显然,现在我们可以将 MetaSounds 作为音频源在...