Wwise SDK 2022.1.18
|
このチュートリアルに使うのは、Audiokinetic LauncherでSDKやVisual StudioプラットフォームをインストールしたあとにSDKサンプルに入っている、Integration Demoプロジェクトが適切です。なお、ご自分のプロジェクトや、WwiseサンプルにあるWwise Audio LabやWwise Adventure Gameなど、ほかのプロジェクトを使うことも可能です。
WAQLは様々な場所で使えますが、このチュートリアルではList Viewを使うことを推奨します。
Tip: A brief video tutorial on WAQL usage in the List View is available. See Finding Objects using WAQL. |
List Viewのサーチフィールドに、以下を入力します:
$ where volume < 0
最初の文字の $ は、WwiseにWAQLクエリを書いていることを伝えるものです。これで、Wwiseが標準のテキストサーチとWAQLクエリを区別できます。そして $ のあとにくるものが全て、クエリ自体を定義するものとなります。
この例では、クエリを where キーワードで始めています。最初に where キーワードがあると、自動的にWAQLはプロジェクトの全オブジェクトを対象に、 where のあとに定義する条件文を使いオブジェクトにフィルタを適用します。キーワード where は、一致するオブジェクトだけをアウトプットするフィルタです。
まとめると:
$ where CONDITION
CONDITIONは、trueまたはfalseを返すブール式です。前の例では、ボリュームを数値と比較しています。ボリュームがゼロ未満であれば、クエリはtrueを返します。この条件で、プロジェクトの全オブジェクトを検証します。クエリの結果は、ボリュームがゼロ未満の全てのオブジェクトとなります。
追加の演習問題:
Tip: WAQLのプロパティ名について知るには、 Wwiseオブジェクトリファレンス を参照してください。 |
ここまで、数値的な条件しか使っていません。それでは、文字列の条件を使ってみます:
$ where name = "hello"
文字列の条件では、2つの文字列の内容を比較します。イコール演算子は、大文字小文字を区別しないで比較します。この条件では、テキストが同じであれば、大文字小文字に関係なくtrueと評価されます。特に具体的なものを探しているときなどに、便利です。
また、以下のように、文字列の一部を比較することもできます:
$ where name : "hello"
このクエリの比較演算子は、イコールでなくコロンです。コロンは、単語検索の演算子を定義します。サーチ対象の要素のなかに、特別な単語が見つかれば、trueを返します。この例では、nameに"hello"が含まれると、trueを返します。
追加の演習問題:
Wwiseオブジェクトには、以下の2種類のプロパティがあります:
別のWwiseオブジェクトを返すプロパティ(リファレンスとも呼ばれる):
dot 演算子を使ってプロパティを組み合わせることができます。例:
$ where parent.name = "Music"
または
$ where parent.volume < 0
以下のように、複数のプロパティを組み合わせることもできます:
$ where outputbus.parent.name = "Master Audio Bus"
注釈: プロパティを組み合わせるときは、値を返すプロパティが必ず最後のドットのあとにくるようにします。別のオブジェクトを返すプロパティは、シーケンス中のどこにでも入れられます。 |
追加の演習問題:
ここまでは、フィルタの対象がプロジェクト全体のオブジェクトでした。一方、サーチの対象オブジェクトの範囲を狭めることもできます。
以下を入力します:
$ from type sound
このクエリで、プロジェクトの全てのサウンドオブジェクトがリストに表示されます。この from キーワードが、クエリを開始するソースを定義してくれます。サーチの範囲を絞るための非常に効率的な方法です。WAQLは、イテレーションを、指定したソースに限定することができます。
また、以下のように、複数のオブジェクトタイプを指定することもできます:
$ from type randomsequencecontainer, switchcontainer, blendcontainer
先ほどのクエリは、以下のように、 where キーワードを使ったフィルタサーチで書くこともできます:
$ where type = "randomsequencecontainer" or type = "switchcontainer" or type = "blendcontainer"
ただしフィルタ処理がイベント、バス、サウンドなど、全てのプロジェクトオブジェクトに対して実行されます。このため、実行時間が長くなります。
追加の演習問題:
以下のクエリを入力します:
$ from type sound where volume < 0
プロジェクトの全てのサウンドオブジェクトを対象にフィルタにかけ、そのうち、ボリュームがゼロ未満のサウンドのみを残します。
from キーワードは必ずWAQLクエリの最初にきますが、 where キーワードは from のあとに加えることができます。
追加の演習問題:
WAQLでは、クエリソースをさらに絞ることができます。
List Viewで、以下を入力します:
$ from object "\Actor-Mixer Hierarchy"
このクエリは、オブジェクトパスを使い、1つのオブジェクトを返します。
さらにコンパクトにするために、WAQLでは以下のように'from object'の部分を省略できます:
$ "\Actor-Mixer Hierarchy"
これで、指定したオブジェクトが返されます。
複数のオブジェクトを並べることもできます:
$ "\Master-Mixer Hierarchy", "\Actor-Mixer Hierarchy"
追加の演習問題:
異なるソースのWAQLクエリをつくれるようになったので、さっそくオブジェクトを選択してみます。オブジェクトをselect(選択)すると、最初の一連のオブジェクトから、別のオブジェクトを取得できます。
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の全てのdescendants(子孫)を取得します。子孫に、全ての子が再帰的に含まれます。
追加の演習問題:
WAQLの基本概念が分かったところで、具体的な例を構築してみます。次の例では、あるイベントがリファレンスする全てのサウンドを列挙します。
最初に、プロジェクトの全てのEventを列挙します:
$ from type event
次にEventオブジェクトから、Eventアクション(直下のchildren)を取得します:
$ from type event select children
次に、各アクションのtarget(リファレンス名target)を取得します:
$ from type event select children select target
次に、そのtarget自体(キーワード this を使用)と、そのdescendantsを取得します:
$ from type event select children select target select this, descendants
最後に、soundオブジェクトだけを残すために、typeのフィルタを適用します:
$ from type event select children select target select this, descendants where type = "sound"
追加の演習問題:
それでは、soundオブジェクトから開始して、それを再生するイベントを全て並べてみます:
$ from type sound
次に、それらのsound自体と、そのancestors(祖先)を取得します。ここでancestorsも対象とするのは、イベントがそれらも参照できるからです。例えば、親のランダムコンテナが、イベントのターゲットとなることがあります。
$ from type sound select this, ancestors
次に、これまで取得されたものをreference to(参照先)とする、全てのオブジェクトを取得します:
$ from type sound select this, ancestors select referencesTo
これは基本的にfind all references(Referenceビューに似ている)を行っているのですが、これを参照するものは、SoundBankやSoundCasterセッションなど、ほかのオブジェクトもあるかもしれないので、イベントactionだけが残るようなフィルタが必要です:
$ from type sound select this, ancestors select referencesTo where type = "action"
最後に、個々のactionの親、つまりイベントを、取得します:
$ from type sound select this, ancestors select referencesTo where type = "action" select parent
追加の演習問題:
このチュートリアルの内容をまとめます。
WAQLクエリの仕組みについて:
Wwiseオブジェクトについて:
次は何?WAQLでできることは、これ以外にも多数あります: