版本

menu_open
警告:系统已根据您所用大版本 (2023.1.10.8659) 自动跳转至最新文档。若想访问特定版本的文档,请从 Audiokinetic Launcher 下载离线文档,并在 Wwise 设计程序中勾选 Offline Documentation 选项。
Wwise Unreal Integration Documentation
WwiseProjectDatabase 模块

WwiseProjectDatabase 模块可用于未烘焙的工程(包括用在 Editor 中)。此模块提供基于内存的数据库视图,方便查看 Wwise 工程所生成 SoundBank 的当前状态。在 Project Database 中,可访问生成 SoundBank 时创建的 JSON 元数据文件中的所有值和信息。此视图仅仅是为了提供相关信息以供参考,其只有在更新所生成文件时才会发生变化。即便在异步加载新的数据库版本时,数据库中对结构的引用也不会影响到线程。

数据库中的信息有以下两种表示形式:

  • Metadata 结构:提供来自 JSON 文件的原始信息。
  • Ref 类:允许访问与元数据相关的周边信息。

Metadata 结构

Metadata 结构的定义跟描述所生成 SoundBank 元数据的 JSON 文件完全相同。其不提供任何上下文,也没什么便捷的工具。除了极个别的情况,这些结构中的成员名称跟 JSON 文件中完全相同。

对于文件定义本身,会先通过 WwiseMetadataRootFile 对象定义文件可声明的可选根对象类型。然后,由结构暴露可能出现的不同内部对象及相应的值。

在将其加载到内存中后,这些结构会以紧凑而高效的方式清晰呈现所生成的 SoundBank。

此信息只有一个副本保存在内存中的 FWwiseRootDataStructureFWwisePlatformDataStructure JSON 文件中。

Ref 类

Ref 类以描述如何找到必要元数据的形式再次定义每个元数据对象。借助该类,所生成 SoundBank 中的元数据可引用各种数据结构,确保只会写入很少的重复信息。由此,可获得以 ID 方式引用 Event 的媒体列表。对于媒体的元数据(如文件位置),则可在更高层面的 SoundBank 元数据中进行定义。

比如,为了指向 Event 的 Switch Container 值,Ref 类会将共享指针副本保存到文件的根目录,并包含相应的指示以便找到 Switch Container。这些指示可以很简单。比如,“此文件”、“SoundBank 中”、“第一个 SoundBank”、“声明的第四个 Event”、“声明的第三个 Switch Container”。

具体可参见以下示例代码:

struct WWISEPROJECTDATABASE_API FWwiseMetadataMediaAttributes : public FWwiseMetadataMediaReference
{
FName Language;
bool bStreaming;
EWwiseMetadataMediaLocation Location;
bool bUsingReferenceLanguage;
uint32 Align;
bool bDeviceMemory;
FWwiseMetadataMediaAttributes(FWwiseMetadataLoader& Loader);
private:
static EWwiseMetadataMediaLocation LocationFromString(const FName& LocationString);
};
struct WWISEPROJECTDATABASE_API FWwiseMetadataMedia : public FWwiseMetadataMediaAttributes
{
FName ShortName;
FName Path;
FName CachePath;
uint32 PrefetchSize;
FWwiseMetadataMedia(FWwiseMetadataLoader& Loader);
};

以及下述示例媒体:

"Media": [
{
"Id": "274591330",
"Language": "English(US)",
"Streaming": "false",
"Location": "Loose",
"ShortName": "Hello.wav",
"Path": "Media/English(US)/27/274591330.wem",
"CachePath": "Voices/English(US)/Hello_10C4C929.wem"
}

从本质上来说,Ref 类提供上下文信息。藉此,不仅可以获取 Switch Container 信息,还可获取有关父类的信息(Event、SoundBank 和文件)。

有些被引用类型会托管必要的辅助信息。比如,Platform Information 将相应信息拆分到了两个辅助文件(ProjectInfo.jsonPlatformInfo.json)中。因此,平台 Ref 自然包含两个不同的结构。同样,其他一些被引用类型可能会保存在多个位置。Ref 类会尝试兼顾这种特殊情况。

除此之外,Ref 类还提供其他的实用功能。若传递必要的全局映射,则可获取辅助信息以及相应 Wwise 对象内包含的 Ref 类。比如,您可以请求获取特定 Event 的定义中包含的必要媒体,并将媒体作为 Ref 来返回。

Ref 信息被声明为了基础结构体和派生结构体。在 Switch Container 中,可同时请求获取 Event 的所有 Switch Container 及同级对象的值。对 Event 中包含的其他类型的信息来说,也是如此。

AnyRef 类

AnyRef 类在更高层面上让指针指向任意类型的 Ref 结构。它包含相应的类型和共享指针。在 AnyRef 层面,只能执行有限的操作。比如,检索对象的 Short ID、GUID 及名称。对于其他操作,可请求将装箱的 Ref 对象转换为与之对应的类型。它可以指向 Null 对象。所以 AnyRef 并不是引用,而是指向 Ref 对象的指针。

访问信息:WwiseProjectDatabase 和 WwiseDataStructure

WwiseProjectDatabase 模块会通过其访问方法来处理查询。比如,您可以请求获取所有已知 SoundBank,也可请求获取特定的 SoundBank。数据本身保存在其 DataStructure 成员中。

在 Data 结构内,包含以下两种结构:

  • Root 结构包含特定工程的结构的各个平台的基本信息:
    • Platform 列表:包含工程的所有可用平台(即便其没有被加载)。
    • Language 列表
  • Platforms 结构映射包含工程的所有平台信息。

通常,WwiseProjectDatabase 中一次只会加载一个平台以供烘焙和打包;不过,在必要时可以加载不止一个平台。

注記: 在 Mac 上使用 Unreal Editor 处理工程时,只有 Mac 平台是必须加载的。

Data 结构的结构体会:

  • GeneratedPlatformFiles 属性中包含所有已加载文件名称的列表。
  • JsonFiles 属性中包含各个被解析 JSON 文件的唯一副本。
  • 同时包含每项可访问数据的 Ref。

此外,Data 结构还允许通过函数(如 GetRef)来进行模板化访问。


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅