Cockatiel技術ブログ

株式会社ピュアサウンドのオーディオソリューション。いろいろ音を鳴らしています。

Wwise

AndroidのNativeActivityでWwiseを動かしてみる-実装編

投稿日:2019年2月19日 更新日:

AndroidでのWwise実装の続きです。
前回はCMakeファイルを書き換えたりして、準備を整えるところまで進みました。
今回はいよいよ処理内容を実装していきます。

前回に引き続き、付属サンプルおよび下記記事を参考にさせていただいております。
Wwise 導入日誌 – Qiita

Wwiseクラスの実装

先にWwise.hの内容を掲載します。
基本的にIntegrationDemoの書き方を踏まえたシングルトンのクラスです。

個別の処理を解説していきます。
(クラスの初期化に関しては割愛します)

サウンドエンジンの初期化

だいぶ長い内容になってしまいました。
サンプルに忠実に、個々の下準備は外で処理したほうがよいかも。(汎用性の面でも)
サンプルやヘルプの内容を参考に以下の順番で処理しています。

メモリマネージャ(AK::MemoryMgr)

ストリームマネージャ(AK::StreamMgr)

低レベルI/O(CAkFilePackageLowLevelIOBlocking)

サウンドエンジン(AK::SoundEngine)

ミュージックエンジン(AK::MusicEngine)

通信(AK::Comm)

言語設定やリスナー作成、Initバンクのロード

個々の細かな設定はIntegrationDemoサンプルのままです。
通信だけコメントアウトしているのは、現状ではエラーが出てしまっているためです……
ここは何とか解決したいですが、ひとまず先へ進みます。

レンダリングプロセス

RenderAudioを呼ぶだけです。
シンプルですが、毎フレーム呼ぶことでWwiseの処理が更新されるという重要な役割です。

サウンドバンクのロード

今回鳴らすインタラクティブミュージックのバンクをロードしています。

インタラクティブミュージック開始

AK::EVENTS::IM_STARTイベントを投げる=インタラクティブミュージックの演奏開始、です。

インタラクティブミュージックの切り替え

呼ばれるごとにインタラクティブミュージックの別イベントが投げられる、という仕組みにしています。

サウンドバンクの解放

インタラクティブミュージックのバンクを解放しています。

サウンドエンジンの終了

初期化時とは逆の順番で各要素を終了していきます。

通信

ミュージックエンジン

サウンドエンジン

ストリームマネージャ

メモリマネージャ

ちなみに低レベルI/Oはデストラクタ内で開放するようにしています。

mainへの実装

Wwiseクラスの準備が整ったので、main.c内に必要な処理を入れていきます。
まず手始めに、以下の内容を追加します。

AK内はプラットフォーム依存で、必要なコードのようです。
独自にWwiseの初期化完了フラグ変数も追加しています。

engine_handle_cmd内

メソッド内部は状態で分岐していますが、まずAPP_CMD_INIT_WINDOW時にサウンドエンジンの初期化、バンクのロード、ミュージックの開始処理を。

APP_CMD_TERM_WINDOW時にバンクの解放とサウンドエンジンの終了処理を追加します。

engine_handle_input内

タップするたびに切り替えイベントが呼ばれる形です。
ただこのままだとシングルタップでも二回分検出されてしまうので、調査改良の余地ありです。

android_main内

無限ループ内にレンダリングプロセスを入れています。

動作確認

いよいよ動作確認をしてみましょう!

無事鳴っていますね!
タッチのたびに曲調も変化しています(ダブルタッチ扱いになってしまっていますが……)。
ビルドがうまくいかない場合は、ライブラリのリンクの順番を調整するとうまくいく可能性があります。

終わりに

以上、二回にわたりAndroidのNativeActivityによるWwise組み込みを紹介してきました。
仕組みさえできてしまえば、あとはバンクやイベントを入れ替えて様々に音を鳴らすことができるはずです。

繰り返しになりますが、UnityやUnrealEngineではWwise公式の、他のゲームエンジンでもそれぞれのインテグレーションサービスがありますので、今回のようにゼロから組み込むということは滅多にないと思われます。
やむを得ず自前実装が必要となった際、インテグレーションサービスの助けを借りられない際などに、頭の片隅にでもとどめておいてもらえれば……と思う次第です。

それでは、お疲れ様でした!

-Wwise
-, ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

19 + fourteen =

関連記事

no image

AndroidのNativeActivityでWwiseを動かしてみる-準備編

ふと思い立ったので、AndroidのNativeActivityでWwiseSDKの実装を試してみたいと思います。 Wwise | Audiokinetic Wwiseの実装に関してはUnityやUn …