在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. ZOJ 3940 Modulo Query

    0--M对某个数字取模,相当于把0--M区间进行切割,每次暴力切割一下.结果的算的时候二分一下即可... 看了官方题解才会... #include<cstdio> #include< ...

  2. MediaScanner

    http://blog.csdn.net/hellofeiya/article/details/8255898 http://www.cnblogs.com/halzhang/archive/2011 ...

  3. SVN第二篇-----命令集合

    16.switch  代码库URL变更 svn switch (sw): 更新工作副本至不同的URL. 用法:  1.switch URL [PATH]         更新你的工作副本,映射到一个新 ...

  4. S3C2440 ADC详解

    S3C2440拥有八通道的十位ADC, 最大转换率为2.5MHz A/D转换器时钟下的500KSPS.A/D转换器支持片上采样-保持功能和掉电模式的操作. 八个通道中有四个通道适用于电阻屏的触摸屏触摸 ...

  5. Spring MVC之Action输入参数

    第一部分:Action输入参数Spring MVC 通过@RequestMapping注解映射请求,最终的真正执行代码为处理器方法,即@RequestMapping注解的方法.Spring MVC方法 ...

  6. js生成随机数

    //生成n以内的随机数 function getRandom(n){ return Math.floor(Math.random()*n+1) } //生成1000以内的随机数 alert(getRa ...

  7. JavaScript(一)---- 概述

    JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...

  8. UVa 10986 - Sending email

    题目大意:网络中有n个SMTP服务器,有m条电缆将它们相连,每条电缆传输信息需要一定的时间.现在给出信息的起点和终点,计算所需的最小时间. 有权图上的单源最短路问题(Single-Source Sho ...

  9. UVa 750 - 8 Queens Chess Problem

    题目大意:八皇后问题,在一个8*8的棋盘上,放置8个皇后,使得任意两个皇后不在同一行上.不在同一列上.不在同一条对角线上,不过这道题预先给定了一个位置放置一个皇后,让你输出所有可能的答案. 经典的回溯 ...

  10. drag file upload xhr 拖拽异步上传文件

    <div id="droptarget" style="width: 500px; height: 200px; background: silver"& ...