Wwise SDK 2021.1.14
|
在本教程中,建议使用 Integration Demo 工程。在通过 Audiokinetic Launcher 安装 SDK 和 Visual Studio 平台后,可在 SDK 示例中找到该工程。不过,您也可以使用自己的工程或 Wwise 示例中的其他工程(如 Wwise Audio Lab 或《Wwise Adventure Game》)。
在很多地方都可以使用 WAQL。对于本教程,我们来以 List View 为例加以阐述。
在 List View 的搜索字段中键入以下查询:
$ where volume < 0
第一个字符为 $,用于告知 Wwise 要写入 WAQL 查询。Wwise 可藉此区分标准文本和 WAQL 查询。$ 之后的内容用于定义查询本身。
在本例中,使用 where 关键字开始查询。在使用 where 关键字开始时,WAQL 会自动获取工程的所有对象,并使用 where 之后定义的条件语句来加以筛选。作为筛选器,where 关键字只输出匹配的对象。
简写如下:
$ where CONDITION
CONDITION 是一个布尔表达式,其会返回 true 或 false。在上面的例子中,表示要将音量与数字值进行比较。若音量小于零,则查询返回 true。在此,将针对工程的所有对象验证该条件。在完成查询后,会列出所有音量小于零的对象。
补充练习:
技巧: 若要了解 WAQL 属性名称,请参阅 Wwise 对象参考 章节。 |
目前只使用了数字值条件。下面来试下字符串条件:
$ where name = "hello"
字符串条件会将两个字符串的内容进行比较。在使用等号运算符执行比较时,不区分大小写。若文本相同(不区分大小写),则认为条件成立。您可以使用该表达式来查找特定的内容。
除此之外,也可只比较字符串的部分内容:
$ where name : "hello"
此查询中使用了冒号而非等号作为比较运算符。冒号用于定义单词搜索运算符。若在所查看的元素内找到指定的单词,则返回 true。在此示例中,若在名称中找到 hello,则返回 true。
补充练习:
Wwise 对象具有两种类型的属性:
您可以使用点号运算符将两项属性结合在一起。例如:
$ where parent.name = "Music"
或者
$ where parent.volume < 0
甚至,还可将多个属性结合在一起:
$ where outputbus.parent.name = "Master Audio Bus"
备注: 在将属性结合在一起时,确保把要返回值的属性放在最后一个点号之后。至于要返回另一对象的属性,则可放在序列中的任何位置。 |
补充练习:
目前,我们都是筛选整个工程中的对象。不过有时需要缩小搜索范围,将目标限定为一组特定的对象。
键入以下查询:
$ from type sound
此查询会列出工程中的所有 Sound 对象。from 关键字用于定义从哪里开始查询。这样可以有效地缩小搜索范围。藉此,WAQL 可将迭代限定为指定的源。
甚至,还可指定多种对象类型:
$ from type randomsequencecontainer, switchcontainer, blendcontainer
同时,还可使用 where 关键字为前述查询写入筛选器:
$ where type = "randomsequencecontainer" or type = "switchcontainer" or type = "blendcontainer"
不过,执行筛选时必须查询所有工程对象,包括 Event、Bus、Sound 等等。这样的话执行速度会比较慢。
补充练习:
键入以下查询:
$ from type sound where volume < 0
此查询会获取工程中的所有 Sound 对象,并在筛选之后只列出音量小于零的声音。
其中 from 关键字仅可用在 WAQL 查询的开头,where 关键字则要添加到 from 的后面。
补充练习:
WAQL 可进一步限定查询源。
在 List View 中键入以下查询:
$ from object "\Actor-Mixer Hierarchy"
此查询会使用对象路径来返回单个对象。
为了使语句更加紧凑,WAQL 还支持省略 from object 部分。因此,可直接键入:
$ "\Actor-Mixer Hierarchy"
此查询会返回指定的对象。
当然,也可列出多个对象:
$ "\Master-Mixer Hierarchy", "\Actor-Mixer Hierarchy"
补充练习:
前面尝试了从不同的源执行 WAQL 查询,接下来我们看看如何选择对象。通过选择对象,可从初始对象序列获取其他对象。
在 List View 中键入以下查询:
$ "\Actor-Mixer Hierarchy\Default Work Unit" select children
此查询会获取 Default Work Unit,并返回其所有的直接子对象 (children)。
下面来尝试获取更多对象:
$ "\Actor-Mixer Hierarchy\Default Work Unit" select descendants
此查询会在结果中获取 Default Work Unit 的所有下级对象 (descendant)。这些下级对象包括所有以递归方式获取的子对象。
补充练习:
前面学习了 WAQL 的基本概念,下面我们来尝试构建具体的示例。在本例中,我们将尝试枚举 Event 引用的所有声音。
首先,枚举工程中的所有 Event:
$ from type event
然后,从 Event 对象获取 Event 动作(直接子对象):
$ from type event select children
然后,获取各个动作的目标(引用命名目标):
$ from type event select children select target
然后,获取目标本身(使用 this 关键字)及其下级对象:
$ from type event select children select target select this, descendants
最后,通过筛选类型来仅保留 Sound 对象:
$ from type event select children select target select this, descendants where type = "sound"
补充练习:
下面我们来从 Sound 对象开始查询,并列出所有可播放该对象的 Event:
$ from type sound
然后,获取所有声音本身及其上级对象 (ancestor)。之所以在意上级对象,是因为其同样可被 Event 引用。比如,父级 Random Container 便可作为 Event 的目标。
$ from type sound select this, ancestors
然后,获取所有引用目前所获元素的对象:
$ from type sound select this, ancestors select referencesTo
这样基本上相当于查找所有引用(类似于 Reference 视图),不过需要筛选并仅保留 Event 动作,因为其他对象(如 SoundBank 或 SoundCaster 会话)也有可能包含对它们的引用:
$ from type sound select this, ancestors select referencesTo where type = "action"
最后,获取各个动作的父对象(即 Event):
$ from type sound select this, ancestors select referencesTo where type = "action" select parent
补充练习:
下面我们来总结一下本教程中所学的内容。
关于 WAQL 查询的构成:
关于 Wwise 对象:
下一步?您可以使用 WAQL 执行很多其他操作: