游戏音频技术备忘 (四) Wwise Unreal Engine 集成代码浅析 (一)

  在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其他插值轨道类型,基本为增删改关键帧与播放器逻辑相关功能。

时间: 2024-10-24 23:49:47

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

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

当前受众较广的商业游戏引擎有 Unreal Engine.Unity.cocos2d-x等,在音频领域的第三方中间件则有Wwise.FMOD.Criware等,言多且烦,我们首先集成Wwise到 Unreal Engine 中去. 在https://github.com/EpicGames/UnrealEngine上可以抓取到Unreal Engine的源代码,前提条件是需要有一个 organization 加入EpicGames 的github账号,这就需要在https://www.unrea

游戏音频技术备忘 (一) 关于游戏

大家好,随着游戏工业的发展,游戏音频相关技术变得越来越复杂,然而中文世界里相关的学习资料与文档始终难以找寻,游戏音频相关技术相较图形编程渲染领域在游戏开发技术中处于比较次要的位置,同时深耕声学音乐学与计算机相关学科难以实现兼顾平衡导致音效师,作曲家与程序员之间存在较为明显的分野,在个人的学习过程中也时常感到路途陡峭.在此整理分享一些过去积累的相关技术内容,如有疏漏不妥之处,尽请匡正. 暂且不考虑艺术和社会学范畴对游戏的定义,电子游戏作为一种特殊的计算机软件能够产生的交互,本质上与我们在电视机空调

游戏音频技术备忘 (二) 关于游戏开发

千里之行始于足下,一款游戏如何从无到有?诗人构思许久后动笔写作,音乐家在乐谱与乐器间来回修改,画家调节颜料比例涂抹在画布上,文学音乐绘画都要经历如上所述大致相同的创作流程.游戏不同与往,游戏杂糅了几乎所有艺术形式的特征,一方面我们还要进行传统的 文学音乐绘画创作,另一方面我们要额外考虑如何把这些各自分隔的内容糅合在一起,并且提供一套交互系统用以产生变化,这时候我们就需要一个工程师来实现这一目标. 作为电子游戏,建构虚拟世界的根基是各类的计算机硬件,我们需要一块屏幕用以显示图像,一只喇叭用以播放声

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

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

这是我们的Nmap备忘单的第四部分(Part 1. Part 2. Part 3).本文中我们将讨论更多东西关于扫描防火墙,IDS / IPS 逃逸,Web服务器渗透测试等.在此之前,我们应该了解一下防火墙的一些基础知识以便绕过它. 什么是防火墙? 防火墙是用来控制网络访问的软件或硬件.分为以下两类:1.基于主机的防火墙:2.基于网络的防火墙. 基于主机的防火墙 这是在单台主机上运行的软件,用来控制入站流量(从网络向主机)和出站流量(从主机向网络).这些软件安装于操作系统之上,常见例子就是Lin

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

这是我们的第二期NMAP备忘单(第一期在此).基本上,我们将讨论一些高级NMAP扫描的技术,我们将进行一个中间人攻击(MITM).现在,游戏开始了. TCP SYN扫描 SYN扫描是默认的且最流行的扫描选项是有一定原因的.它可以在不受防火墙限制的高速网络每秒扫描数千个端口 .同时也是相对不显眼的和隐蔽的,因为它永远不会完成TCP连接. 命令:NMAP -sS 目标 TCP连接扫描 当SYN扫描不可用的时候,TCP连接扫描是默认的TCP扫描类型.这是在用户不具有发送RAW数据包的特权的情况下.不是

ffplay for mfc 代码备忘

之前上传了一个开源播放器工程ffplay for mfc.它将ffmpeg项目中的ffplay播放器(ffplay.c)移植到了VC的环境下,并且使用MFC做了一套界面.它可以完成一个播放器播放视频的基本流程:解协议,解封装,视频/音频解码,视音频同步,视音频输出.此外还包含一些控制功能:播放,暂停/继续,前进,后退,停止,逐帧播放,全屏等:以及一些码流分析功能:视频解码分析和音频解码分析. 详细的软件使用就不仔细介绍了,本文简单介绍其中比较重要的模块的流程.以防长时间不看的话忘了~ 软件信息:

代码整洁备忘(一)

无聊在看<代码整洁之道>,找到了一些自己以前没有注意的地方,在这里记录下来,备忘一下. 目前看完了第九章. 1.重复很多的代码是不好的,需要仔细考虑去掉无用的重复. 2.变量,函数,类等的命名要足够精确,精简&易于搜索. 3.函数尽可能的少用参数(3个以内),&不要向函数内传递bool,因为这明确的说明了这个函数干的不是一件事!函数的职责应该是单一的.函数应该尽可能的短小,过长的函数是不好的. 4.注释,能不用就不用,能少用就少用.能用好的名字说明的问题就不要用注释来说明.标记

【UNREAL ENGINE 游戏开发】开篇之UE4的BLUEPRINT(蓝图)与C++(新童鞋必看)

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/unreal-engine-game/2164.html 首先Himi在这里解释下,为什么还是开篇- 原因主要有两点: 考虑到要写也要写点干货不是么?!但是由于官方文档写的真的够详细了,对于提到的基础知识我真的不想再赘述,因此希望各位新童鞋一定要先跟着文档动手过一遍!!!很重要!!!!!!!!!!! 另一方面,本想拿着UE4写点小项目练手,然后