- 要使用AtomComponent播放音频前,您需要加载Atom Cue Asset和Atom Cue Sheet Asset。
在以下类实现了Atom Cue Asset和Atom Cue Sheet Asset。
- SoundAtomCue 类 : Atom Cue Asset
- SoundAtomCueSheet 类 : Atom Cue Sheet Asset
參照Cue Sheet的类
- AtomComponent、SoundAtomCue和SoundAtomCueSheet是CRIWARE UE4插件中与音频相关的主要类。 下图显示其参照关系。
- 如上图所示,主要音频相关对象的参照关系如下。
- AtomComponent对象参照SoundAtomCue对象
- SoundAtomCue对象参照SoundAtomCueSheet对象
- SoundAtomCueSheet对象包含Raw ACB Data。Raw ACB Data是ACB文件内容的副本
- CRI Core Runtime是用C语言实现的原生库。正确名称为CRI Atom库
- CRI Core Runtime可以通过加载Raw ACB Data播放ACB中的Cue
- 请注意以下两个处理的明显区别。
- 加载Atom Cue Sheet Asset
- 在Atom Cue Sheet Asset中加载Raw ACB Data
加载Atom Cue Sheet Asset
使用UE4自动加载Asset
- Atom Cue Sheet Asset通常以 .uasset 文件的形式打包至应用程序。
如果在关卡上有硬性引用Atom Cue Sheet Asset的对象时, 此.uasset文件将由UE4自动从存储中读取并加载到内存中。
关于Asset引用的用语(硬性引用和软性引用等),请参照Epic Games公司的虚幻引擎4文档。
根据应用程序手动加载Asset
- 使用UE4完成加载了Asset时,则可以通过调用以下其中一個函数来获取有效USoundAtomCueSheet对象的指针。
- USoundAtomCueSheet* USoundAtomCueSheet::LoadAcb(FName AcbName, bool bAddToLevel)
- USoundAtomCueSheet* USoundAtomCueSheet::LoadAtomCueSheet(USoundAtomCueSheet* CueSheet, bool bAddToLevel)
- 如果沒有使用UE4加载Asset时,则USoundAtomCueSheet::LoadAcb() 函数将搜索指定的Atom Cue Sheet Asset文件 (.uasset) 包, 并将其加载到内存中。 但由于可能涉及文件I/O和巨大内存副本,可能会对性能产生负面影响。
可以使用以下方法避免或检测上述情况:
- 创建所需的Atom Cue Sheet Asset的硬件引用
- 创建所需的Atom Cue Sheet Asset的软件引用
- 使用 异步加载Cue表 的功能
- 将日志类别名称"LogCriWareRuntime"的日志输出设置为 Verbose(从.uasset加载时输出消息)
加载Asset中的Raw ACB Data
- 仅加载Asset不可能播放Cue。如上图所示,CRI Core Runtime需要加载Raw ACB Data。
本节将介绍关于加载Raw ACB Data的规格。
- 从CRIWARE UE4插件Ver.1.27.11.00起,使用CRI Core Runtime加载Raw ACB Data更改为异步运行。
隐式加載
- 指示AtomComponent播放Cue时,将自动加载所需的Raw ACB Data。本节称之为“隐式加载”。
执行隐式加载时,AtomComponent的执行内容如下。
- 确认CRI Core Runtime是否已加载Raw ACB Data
- 尚未加载时,将需要在AtomComponent内部加载Raw ACB Data(执行隐式加载)
- 执行隐式加载時,AtomComponent状态將显示为EAtomComponentStatus::Prep
- 加载完成后,AtomComponent在CRI Core Runtime请求Cue播放
- 于实际播放Cue之前会发生时间延迟
- 通过CRI Core Runtime开始播放时,AtomComponent的状态转换为EAtomComponentStatus::Playing
显式加载
- 可以调用以下函数之一来获取有效的USoundAtomCueSheet对象的指针。
- USoundAtomCueSheet* USoundAtomCueSheet::LoadAcb(FName AcbName, bool bAddToLevel)
- USoundAtomCueSheet* USoundAtomCueSheet::LoadAtomCueSheet(USoundAtomCueSheet* CueSheet, bool bAddToLevel)
- 调用上述函数后,返回值的USoundAtomCueSheet指针尚未完成加载Raw ACB Data。
USoundAtomCueSheet提供了FOnLoadCompleted委托作为检测加载完成的方法。
同时,也可以调用USoundAtomCueSheet::IsLoaded() 函数来确认。