版本

menu_open
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 之旅