AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,为该类的若干变量赋初始值,AkAmbientSound通过ObjectInitializer的子对象创建模板创建了一个AkComponent并作为根组件保存下来,同时初始化3D衰减倍率因子为1,表示不进行衰减范围缩放。
函数PostLoad()名称上带有Post,实际上和Wwise的Post概念无关,是一个父类AActor的成员函数,在该对象加载结束后被调用。
同样的PostInitializeComponents() 是一个父类AActor组件初始化后调用的函数,在这里调用 AkComponent的一个UpdateAkReverbVolumeList()函数实现检查当前AkAmbientSound是否处在一个混响体积之中。
StartAmbientSound()函数调用了StartPlaying()函数,通过这个函数的实现可以一窥基本的Wwise播放机制,即通过调用AkAudioDevice对象的一系列函数实现播放, AkAudioDevice是Wwise与Unreal Engine整合的一个单例类,作为Wwise引擎层之上的抽象层负责把大部分Unreal Engine规范的接口通过Wwise API实现。
AkAudioBank类的实现 可以看到该类分别提供了同步与异步加载/卸载Bank的四个函数,由于Wwise占用了几个线程,因此需要一些异步处理逻辑。由于.bnk数据的加载完全由Wwise自管理,因此在磁盘IO与内存优化方面只能主要依靠对.bnk数据的合理划分,当然Wwise也提供了若干全局变量用以控制读写磁盘与内存的频度,包括可选择是否使用Unreal的IO模块。
AkAudioDevice类的实现 作为最重要的整合代码部分,完成了连接两套软件系统的工作。在头文件包含部分可以看到Wwise自身还提供进一步的插件方案,由于传统数字音频技术建构的DAW+Plugins解决方案模式非常成熟,Wwise也借鉴这种设计思路,把许多信号处理功能封装为单一库,这样用户可以灵活依据自身需求搭建整个音频信号