在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. Struts2 JSP中将list,set ,Map传递到Action然后遍历(三十五) - 雲淡風輕 - ITeye技术网站

    1.使用Strut2的的集合对象:在jsp初始化action中的list然后提交到action2.使用Struts标签,实现多个用户同时注册(注意属性配置文件)3.pojo package com.s ...

  2. CodeForces 621B Wet Shark and Bishops

    记录一下每个对角线上有几个,然后就可以算了 #include<cstdio> #include<cstring> #include<cmath> #include& ...

  3. golang中container/list包源码分析

    golang源码包中container/list实际上是一个双向链表 提供链表的一些基本操作,下面就结合定义和接口进行下说明 1. 定义 // Element is an element of a l ...

  4. 关于 HTML5、Jquery、Phonegap 跨域问题的研究

    近期研究Phonegap的相关技术,遇到了服务资源访问的跨域.经过尝试使用服务器端的代理,Phonegap打包后不能够访问到相应资源.在搜索引擎的帮助下,找到了Jquery的jsonp的方式,尝试发现 ...

  5. 3、手把手教你Extjs5(三)MVVM特性的简单说明

    下面我们来看一下自动生成的代码中的MVVM架构的关系.Main是一个可视的控件,MainController是这个控件的控制类,MainModel是这个控件的模型类. 在上面的图片中,左边是Main. ...

  6. iOS Socket第三方开源类库 ----AsyncSocket

    假如你也是一个java程序员,而你又不是很懂Socket. 下面我的这篇文章也许能帮助你一些. http://xiva.iteye.com/blog/993336 首先我们写好上面文章中的server ...

  7. iReport折线图

    1.拖动组件面板chart到Summary   2.右击-->chart data  单出   3.   4.X轴和Y轴必须是数字 series:系列 连续,串联 category:类型.部门. ...

  8. 编写高质量JavaScript代码的基本要点记录

    原文:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 1.最小全局变量(Minimizing Globals)的重要性 JavaScript通过函数管理作用域.在 ...

  9. LIBPNG

    libpng 库的源码包中有个 example.c ,里面包含PNG文件读/写的示例代码,参考示例代码和注释(虽然是英文的),可以了解大致的用法. 以下是读取PNG图片的图像数据的代码,使用前还需要按 ...

  10. async & await 的用法

    async 和 await 出现在C# 5.0之后,给并行编程带来了不少的方便,特别是当在MVC中的Action也变成async之后,有点开始什么都是async的味道了.但是这也给我们 编程埋下了一些 ...