WAAPIの事例と使い方

オーディオプログラミング / Wwiseの使い方やツール

image5.png

今回はWAAPIのサンプルアプリを通して、WAAPIについて説明します。使うサンプルは簡単なウェブアプリケーションで、1つの可動ポイントでXYパッドの2次元座標に存在する2つのゲームパラメータを同時にコントロールできます。このアプリケーションは現在開いているプロジェクトに接続して、操作可能なゲームパラメータオブジェクトを表示させます。

このサンプルでは、次の機能を確認できます。

  • プロジェクトからオブジェクトの取得
  • オブジェクトのプロパティ値の設定
  • プロパティ値変更の更新

Wwiseプロジェクトの作成

このデモの長所は、どんなWwiseプロジェクトにでも使えることです。今回はまず、楽器のテルミンの実装の、簡単なWwiseプロジェクトを作ります。


新規プロジェクトの作成

image8.png

テルミン音の作成

Project Explorerを開いて

  • 新しい Sound SFX オブジェクトを作成する
  • オブジェクト名をThereminとする

image9.png

  • この新しいオブジェクトを選択する
  • Contents Editorで、Add Source >>ボタンをクリックする
  • Wwise Synth Oneを選択する

image11.png

  • オブジェクトThereminのProperty Editorで、Loopを有効にする

image1.png

ゲームパラメータをアサインする

  • オブジェクトThereminのRTPC タブを開く
  • “Volume”と“Pitch”の2つの新しいゲームパラメータを、Voice VolumeとVoice Pitchのプロパティにアサインする
  • Voice Pitchのカーブを、下図のように変更する:

image13.png

以上です。プロジェクトを保存してください!

WwiseでWAAPIを有効にする

WAAPIを使い始める前に、必ずUser PreferencesでWAAPIを有効にしてください:

  • メニューでProject > User Preferencesをクリックする
  • Enable Wwise Authoring APIをクリックする
  • OKをクリックする
  • Wwiseを再起動する

image10.png

WAAPIクライアント

それでは、ウェブアプリケーションの解説です。

image14.png

Wwiseに接続しながら、アプリケーションで表示される青い点を使って2つのゲームパラメータ値を変更します。一旦接続すると、サンプルアプリがプロジェクトからゲームパラメータのリストを取得します。今回の例で取得されるのは、 Pitch と Volumeの2つのゲームパラメータです。あとは、WwiseでPlayを押してから青い点を動せば、先ほどのテルミンを演奏することができます。

ソースコード

それでは、どのようにWAAPIを応用したのかを説明します。

なお、このアプリケーションの完全なソースコードは、Wwise 2017.1のSDKサンプルに入っています:

SDK/samples/WwiseAuthoringAPI/js/xy-pad.

是非readme.mdファイルを一読して、依存性(dependencies)のインストール方法やサンプルアプリの実行方法などを確認してください。依存性をインストールしないとサンプルは動かないので、これは重要なポイントです。

このアプリケーションのコードの大部分が、js/app.jsにあります。

WAAPIに接続する

WAAPIに接続するのは、簡単です。この例では autobahn.jsが使われ、JavaScriptで完全なWAMPインプリが提供されています。一番大事な要素が、WAAPIに接続するためのURLとなります。WAAPIサーバはWwiseオーサリングアプリケーションに組み込まれているので、接続する前にWwiseが稼働中であることを必ず確認してください。ここでは、ポート番号8080にlocalhostへの接続オブジェクトを作成しました。

image6.png

ここから、接続します:

image4.png

接続が確立されると、WAMPは以下の2種類のメカニズムを使ってやり取りします:

  • Remote Procedure Call (RPC): 引数を使ってファンクションをリモートで実行して、結果を取得する。
  • Subscribe/Publish (Pub/Sub): 特定のトピックに登録して、そのトピックについて何かがパブリッシュされた時に、通知を受領する。

autobahn.js を使ってRPCファンクションをコールするのも、とても簡単です。以下のエレメントを指定する必要があります:

  • Uri: RPCファンクションの固有名称
  • Args: ファンクションに対する引数で、JSONオブジェクトとして記載。各RPCコールに必要な全ての引数がWwise SDKドキュメンテーションに記載されています。
  • Options: ファンクションのオプション。空オブジェクトでも可。

コールファンクションでPromiseオブジェクトが返却されるので、これを使えば、サクセスコールバックを指定して結果を受領したり、エラーコールバックを指定してエラーを受領したりできます。

以下は、典型的なコールの例です:

image7.png

ゲームパラメータの取得

このサンプルの初期のコールの1つが、プロジェクトのゲームパラメータを全て取得するものです:

image3.png

リモートでURI ak.wwise.core.object.getをコールして、クエリオブジェクトを引数として扱い、指定されたオプションのオブジェクトのリストを返却します。このシナリオでは、クエリがソースを指定する(タイプが“GameParameter”である全てのオブジェクトの中から)と、全てのゲームパラメータが返却されます。

次にオプションコンポ―ントで、これらのオブジェクトから何を返却させるかを指定します。1回のクエリで情報を充分にキャプチャできます。

プロパティの設定

青い点をユーザーインターフェースで動かすと、RPCのuri ak.wwise.core.object.setPropertyがコールされますが、これは、全てのWwiseオブジェクトの全てのプロパティを変更できるものです。今回のシナリオでは、オブジェクトのID、変更するプロパティ、そして新しい設定値を指定します:

image12.png

プロパティ変更の通知

Wwise内で直接ゲームパラメータのシミュレーション値を変更すると、XYパッドのアプリケーションが自動的に更新されますが、これはトピック ak.wwise.core.object.propertyChangedにサブスクライブしているためです。青い点は、実際のGame Paremeter値に2方向バインディング(two-way bound)しています。

トピックにサブスクライブするのは簡単で、トピックのURLとサブスクリプションのオプションを提示するだけです。今回の場合は、欲しいオブジェクトとプロパティを指定します。以下のように、コールバックで何を返却させるかを指定することもできます:

image2.png

まとめ

今回のサンプルで取り上げたWAAPI機能は、氷山のほんの一角です。WAAPIドキュメンテーションに、利用できる全てのファンクションや、それに必要な引数と返される内容などが記載されています。

なお、WAAPIはランゲージやプラットフォームに依存しないので、様々なランゲージで、実質的にどのプラットフォームでも、クライアントをインプリできます。また、コミュニケーションプロトコルのWAMPを採用して、利便性やパフォーマンスを向上させることもできます。文字列だけのHTTP(bare HTTP)もサポートされています。実際、以下のようにコマンドラインにcURLを入れてHTTPでWAAPIを使うこともできます: 

curl -H "Content-Type: application/json" -X POST -d "{\"args\":{},\"options\":{},\"uri\":\"ak.wwise.core.getInfo\"}" http://localhost:8090/waapi

 

宿題

サンプルの変更

同じサンプルを使った演習問題です:

  • Play/Stopボタンを追加する(トランスポートの例を参考)。
  • XYビューに、グリッドを表示させる。

もっと知るには

javascriptクライアントアプリケーションの実装が、おもしろくてたまらない人もいれば、昔ながらのc++開発者にとっては不安の対象かもしれません。以下の分野について、ウェブでも勉強できます:

  • JavaScript、Promise、非同期コード(asynchronous code)。
  • Node.js: コマンドラインでJavaScriptを実行、ウェブサーバを実行。
  • Typescript: 安全なJavaScriptにするため。
  • Javascriptクライアントフレームワーク: React、Angular.js、Vue.js、aureliaなど。

ベルナール・ロドリグ(Bernard Rodrigue)

ベルナール・ロドリグ(Bernard Rodrigue)

AudiokineticDirector of DevelopmentBernard Rodrigueは、AudiokineticのDirector of Development(開発ディレクター)。2005年にAudiokinetic入社。Wwiseの基礎の開発に積極的に関わる。Wwiseの拡張と革新を進める複数のプロジェクトのリーダー。

 @decasteljau

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

Hitman 2 - 最新のCPU向けに、リバーブを強化

6コアや8コアのCPUが広く使われるようになり、余裕のある処理能力がゲームに提供されるようにました。 そのパワーの一部を、プレイヤーのオーディオ体験 ...

22.10.2019 - 作者 ステパン・ボエフ(Stepan Boev)

ImpacterとUnreal ゲームの物理でプラグインImpacterを動かす

はじめに Impacterはインパクト(衝突)をモデル化したWwise向けの新しいプラグインのプロトタイプで、紹介は こちら にあります。今回の記事は、 Unreal...

20.5.2021 - 作者 ショーン・ソラハン(SEAN SORAGHAN)

新WAQL(Wwise Authoring Query Language)の紹介

9.6.2021 - 作者 ベルナール・ロドリグ(Bernard Rodrigue)

Impacterクロスシンセシスのバリエーションを可視化

2.9.2021 - 作者 ライアン・ダン(RYAN DONE)

WAAPIとPythonを利用したチーム作業の紹介とその例

20.12.2022 - 作者 ユージン・チェルニー

Wwise Spatial Audio 2023.1 最新情報 | Reverb Zone

Reverb Zone入門 Wwise 2023.1ではWwise Spatial AudioにReverb Zoneという新しいツールが追加されました。Reverb...

10.1.2024 - 作者 トーマス・ハンセン

ほかの記事

Hitman 2 - 最新のCPU向けに、リバーブを強化

6コアや8コアのCPUが広く使われるようになり、余裕のある処理能力がゲームに提供されるようにました。 そのパワーの一部を、プレイヤーのオーディオ体験 ...

ImpacterとUnreal ゲームの物理でプラグインImpacterを動かす

はじめに Impacterはインパクト(衝突)をモデル化したWwise向けの新しいプラグインのプロトタイプで、紹介は こちら にあります。今回の記事は、 Unreal...

新WAQL(Wwise Authoring Query Language)の紹介