在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

感谢经验!

留下回复

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

更多文章

从 UI 设计角度探讨如何制作 UI 音频 - Part 1

在有些情况下,游戏的用户界面最终只会对玩家的整体体验产生很小的影响。在其他情况下,比如对很多手游来说,几乎整个游戏都是围绕 UI...

14.10.2019 - 作者:约瑟夫·马尔丘克 (Joseph Marchuk)

我如何在 12 天内运用 Wwise 和 Unity 完成互动拟音设计

每次单击鼠标都会生成具有不同外形、姿态和构成的行走角色,这对拟音师来说既是求之不得的机会又是困难重重的挑战。 不管怎么说,接了活总得做。之前,本杰明·维德恩 (Benjamin Vedrenne)...

9.12.2019 - 作者:皮埃尔·玛丽·布莱恩德(Pierre-Marie Blind)

关于如何在团队工作环境中使用 WAAPI 和 Python

在本文中,我想说说自己很长一段时间以来是如何使用 WAAPI 的。这当中用到了 Python、命令扩展 (Command Add-on) 和一个小的辅助程序 (Helper) 库。藉此,能以比...

11.5.2022 - 作者:尤金•乔尔内 (Eugene Cherny)

关于AudioLink的探索之旅

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

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

Speechless | 利用 Wwise 集成 VO 素材管理

大家好,我叫拉乌尔 (Raoul),是一名拥有九年游戏行业工作经验的旁白 (VO) 设计师,主要从事 AAA...

25.6.2024 - 作者:Speechless

教你如何选择适合自己的编解码器

9.9.2024 - 作者:马修.让(MATHIEU JEAN)

更多文章

从 UI 设计角度探讨如何制作 UI 音频 - Part 1

在有些情况下,游戏的用户界面最终只会对玩家的整体体验产生很小的影响。在其他情况下,比如对很多手游来说,几乎整个游戏都是围绕 UI...

我如何在 12 天内运用 Wwise 和 Unity 完成互动拟音设计

每次单击鼠标都会生成具有不同外形、姿态和构成的行走角色,这对拟音师来说既是求之不得的机会又是困难重重的挑战。 不管怎么说,接了活总得做。之前,本杰明·维德恩 (Benjamin Vedrenne)...

关于如何在团队工作环境中使用 WAAPI 和 Python

在本文中,我想说说自己很长一段时间以来是如何使用 WAAPI 的。这当中用到了 Python、命令扩展 (Command Add-on) 和一个小的辅助程序 (Helper) 库。藉此,能以比...