在Engine\Plugins\Wwise\Source下为主要Wwise相关代码,AkAudio文件夹下为运行时相关代码,AudiokineticTools下为编辑器工具相关代码,AudiokineticTools.Build.cs为用于UnrealBuildTool的相应代码,与音频直接相关位于 AkAudio文件夹下。
 
  Unreal Engine提供若干宏来实现GC、序列化、网络等需求,譬如声明为UPROPERTY()的变量与UFUNCTION()的函数即可由引擎实现变量复制和远端调用 ,详细内容可参阅Unreal Engine文档UE4中的C++编程介绍。
 
 
  AkAmbientSound类为基本的预埋环境点声源对象,继承自AActor类并拥有一个用于在游戏世界内作为声音播放承载的组件对象AkComponent,一个StartAmbientSound()函数用于播放,StopAmbientSound()函数用于停止,对于性能方面需求可以实现相关逻辑,来控制一定范围内的点声源的播放量( 由于Wwise本身提供一个性能相关的图形化管控方案所以这方面也不用过多考虑)。一般来说如果不需要单个控制点声源播放可以通过AkGameplayStatics的StartAllAmbientSounds()及相应的停止函数来控制环境声源的播放。该类对象的实例化可通过在Unreal Editor内直接添加 AkAmbientSound到场景来实现。
 
  AkAudioBank类作为Unreal Engine的资产对象来实现暴露Wwise的.bnk格式数据包(由于Unreal Engine对资产统一封装为uasset,因此需要该种方式实现管理,实际 .bnk 声音数据默认生成在UE工程的Content\WwiseAudio下),通过Load()函数实现加载到内存,考虑到磁盘IO及内存性能,默认的AutoLoad属性为true在文件较小时可保留,建议实现一定的加载卸载逻辑,并依据具体情况划分不同的.bnk文件(具体.bnk内数据的管理在Wwise编辑器内SoundBank页面)。
 
  AkAudioEvent类 作为Unreal Engine的资产对象来实现暴露Wwise的.bnk格式数据包中的Event对象,Event为一种Wwise的抽象封装对象,把实际静态的音频数据与动态的音频行为结合在一起,实现了利用消息机制来管控音频相关的播放,在使用Wwise的情况下,运行时逻辑层不再对实际的音频资源进行直接操作,而是通过对Event的控制传达消息给Wwise底层,Wwise进而通过由Wwise编辑器定义的各个Event的具体内容来进行音频相关行为。 RequiredBank变量需要手动在UE编辑器内配置,需要相同于Wwise编辑器内该Event所在的SoundBank。
 
  AkAuxBus类 作为Unreal Engine的资产对象来实现暴露Wwise的.bnk格式数据包中的 AuxBus 对象,一般用于在某些情况下需要对音频插入Bus的控制时(例如不同游戏环境下混响的变化)创建额外的这一资产,同样需要配置 RequiredBank变量。
 
  AkBankManager类 主要定义了Wwise SoundBank底层回调相关数据结构和 加载释放函数。
 
  AkComponent类 基础的Wwise组件,作为附属对象从属于某一Actor来实现诸多逻辑层功能,继承自USceneComponent因此可实例化在场景里,进而也能拥有位置信息用于3D声音相关功能。StopWhenOwnerDestroyed变量控制是否在所从属对象销毁后也一并停止声音;PostAssociatedAkEvent()函数实现向Wwise底层发出消息告知需要播放关联给该 AkComponent的Event,此时需要AkAudioEvent变量有值;也可通过PostAkEvent()直接播放某一Event;Stop()停止当前 AkComponent播放的声音;SetRTPCValue()传递某一变化的连续数值给Wwise底层,进而实现游戏参数驱动声音实时变化(例如动态天气系统相关的声音),数值与声音如何对应在Wwise编辑器内实现配置;SetSwitch()则传递离散数值给Wwise底层,用以实现不连续的声音播放逻辑变化(例如不同表面类型的脚步声音);AttenuationScalingFactor变量为3D声音衰减范围的倍率因子,由于在Wwise中定义的3D声音衰减范围不一定符合游戏需求,通过这一变量可以较为快捷地实现范围调整;SetOcclusion()函数进行简单的视线检查实现一个基础声障声笼模型。
 
  AkGameplayStatics类 定义了若干可在蓝图层面进行调用的函数,基本类同于以上几个类的成员函数, 对于SetRTPCValue()、 SetSwitch()需要注意其关联的对象将是该函数的Actor参数的根组件;SpawnAkComponentAtLocation()函数为在具体空间位置创建一个 AkComponent,常用于创建短暂的即播即销毁音效(例如武器撞击声);StartOutputCapture()相关函数可实现按照Wwise的监测文件格式输出一段时间内的具体监测数据,可在Wwise编辑器内重放用以排错调优。
 
  AkReverbVolume类 定义了一个混响体积对象,可在游戏世界内实例化,用以标识不同的混响区域,需要配置AuxBus变量,如果出现了 混响区域叠加的状况由Priority变量决定选择哪一个,同时可存在的 混响区域类型上限 在Edit-Project Settings-Wwise下可配置。
 
  AkSettings 类 定义相关全局路径配置。
 
  Interp四类 用于实现在Unreal Engine Matinee动画模块中编辑配置播放Wwise Event对象,各函数用途可参照 Matinee其他插值轨道类型,基本为增删改关键帧与播放器逻辑相关功能。
 

游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)的更多相关文章

  1. 游戏音频技术备忘 (五)Wwise Unreal Engine 集成代码浅析 二

    AkAmbientSound类的实现 Unreal Engine提供了一个基本对象的构造器ObjectInitializer,一般来说用户创建的类总是拥有很多变量,因此 AkAmbientSound  ...

  2. 游戏音频技术备忘 (三) 集成Wwise到Unreal Engine

    当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Un ...

  3. 【iBeacon】iBeacon前沿初探技术备忘

    iBeacon是工作在蓝牙4.0(BLE)硬件下的一种协议,属于蓝牙4.0广播协议的一种,通过该协议和一个蓝牙模块可以实现非接触的身份识别.位置检测等. How does BLE communicat ...

  4. 【游戏周边】Unity,UDK,Unreal Engine4或者CryENGINE——我应该选择哪一个游戏引擎

    在digital-tutors看到的一篇文章,很多初学者都有这样的疑问,因此翻译到这里. 原文:http://blog.digitaltutors.com/unity-udk-cryengine-ga ...

  5. 英特尔帮助优化 Epic 的《堡垒之夜》* 和 Unreal Engine*

    您可能知道,Epic 的游戏<堡垒之夜>是 Unreal Engine* 技术的绝佳示例,<堡垒之夜>的开发团队正不断改进游戏,增加支持平台的数量并将信息反馈给引擎.为此,英特 ...

  6. 工作效率-十五分钟让你快速学习Markdown语法到精通排版实践备忘

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...

  7. Nmap备忘单:从探索到漏洞利用(Part 4)

    这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下 ...

  8. Nmap备忘单:从探索到漏洞利用(Part 2)

    这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫 ...

  9. VR中为什么需要把游戏音频放在聚光灯里?

    VR中为什么需要把游戏音频放在聚光灯里? 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/de ...

随机推荐

  1. ArcEngine 关于缩放至一定比例显示地图的问题

    有这一句就行了.axMapControl.get_Layer(i).MinimumScale=j;i为该图层的indexj为比例尺的分母

  2. 关于服务器跨域问题(使用cors解决)

    1.配置cors依赖 pom中加入 <dependency> <groupId>com.thetransactioncompany</groupId> <ar ...

  3. ZOJ 3537 Cake

    区间DP. 首先求凸包判断是否为凸多边形. 如果是凸多边形:假设现在要切割连续的一段点,最外面两个一定是要切一刀的,内部怎么切达到最优解就是求子区间最优解,因此可以区间DP. #include< ...

  4. 《javascript语言精粹》——第6章数组

    [1].数组字面量 var empty=[]; var num=[ 'zero','one','two','three','four','five','six','seven','eight','ni ...

  5. CSS判断不同分辨率显示不同宽度布局CSS3技术支持IE6到IE8

    CSS判断不同分辨率浏览器(显示屏幕)显示不同宽度布局CSS3技术支持IE6到IE8.将用到css3 @media样式进行判断,但IE9以下版本不支持CSS3技术,这里DIVCSS5给大家介绍通过JS ...

  6. MySql5.6设置慢查询

    ---恢复内容开始--- 在my.cnf中 mysqld节点下 #开启慢查询 slow_query_log = ON #设置超时时间 slow_launch_time = 2 #记录日志 slow_q ...

  7. DTCoreText

    背景:使用DTCoreText实现epub阅读器的内容排版 基础准备:coretext,HTML+CSS渲染机制,epub文件格式 一:ios端epub实现:主要是两种,coretext,webvie ...

  8. vuejs 子组件传递父组件的第一种方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Bagging和Boosting 概念及区别

    Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法.即将弱分类器组装成强分类器的方法. 首先介绍Boot ...

  10. dubbo框架揭秘之服务引用

    ApplicationConfig config = new ApplicationConfig("hello-worldp"); RegistryConfig reg = new ...