Cockatiel技術ブログ

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

Wwise

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

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

ふと思い立ったので、AndroidのNativeActivityでWwiseSDKの実装を試してみたいと思います。

Wwise | Audiokinetic

Wwiseの実装に関してはUnityやUnrealEngine向けに提供されているインテグレーションサービスを使うのが一般的でしょうから、自前でネイティブ実装する機会というのはよほどのことがない限り訪れないかと思います。(実際情報も少ないですし……)
よってこの記事自体も実験的な内容であるうえ、調査が不十分なところも多分にある、ということを先にお断りしておきます。

具体的には、NDKのサンプルに含まれるnative-activityプロジェクト上で、WwiseSDKのサンプルに含まれるサウンドを鳴らすことを目標とします。
準備編(本記事)と実装編の全二回でお送りします。

今回使用した環境は、以下の通りです。(2019年2月現在)

  • OS:windows10
  • Wwise:2018.1.5.6835
  • Android Studio:3.3
  • Android SDK Tool:26.1.1
  • Android NDK:r19
  • Wwiseサンプルのビルド

    とりあえず前段階として、WwiseSDKのサンプルIntegrationDemoがAndroid向けにビルドできるか試してみることにします。
    (直接実装に入る場合は、ここは読み飛ばしてOKです)

    WwiseSDK内のヘルプによると、「samples\IntegrationDemo\Android内でビルドを実行すればよい」とあるのですが……

    おおっと、早速失敗してしまいました。
    メッセージを確認して対処していきましょう。
    「gnustl_staticはもうサポートしてないよ! c++_staticかc++_sharedに置き換えてね!」という感じでしょうか。
    確かにNDKのリリースノートによると、r18よりgnustlがリムーブされたと書かれていますね。
    NDK Revision History  |  Android NDK  |  Android Developers

    IntegrationDemo/Android/jni/Application.mk内の該当部分を書き換えます。
    (書き換えが不安な場合はバックアップを取ることをオススメします)

    APP_STL := gnustl_static

    APP_STL := c++_static

    ビルドのリベンジをしてみましょう。

    うーん、また失敗してしまいました。
    今回の原因は、「GCCはもうサポートしてないよ!」という具合でしょうか。
    書かれているURLでの情報によると、NDK_TOOLCHAIN_VERSIONの設定行を削除するだけで大丈夫みたいです。
    Clang Migration Notes

    またApplication.mk内の該当部分を書き換えて、再度ビルドをしてみると……

    無事成功しました!

    組み込み開始

    実機なりエミュレータなりでWwiseの機能が体験できたところで、いよいよ自前でのWwise組み込みを始めていきたいと思います。
    今回の実験に使うNDKのサンプルは、ここからダウンロード可能です。

    なお以降の内容執筆に際しては、付属サンプルのほかに下記記事も参考にさせていただいております。
    Wwise 導入日誌 – Qiita

    ライブラリ諸々のリンク

    native-activityのCmakeList.txtを改造して、リンクするライブラリやインクルードファイルの設定を追加していきます。
    (Cmakeに関しては、手探りで書いているのでいろいろとご容赦を……)
    WwiseSDKのヘルプと、IntegrationDemo内のIntegrationDemo.mkを参考に以下を追加しました。

    こちらはインクルードパスや共通ライブラリの設定。
    SDKのパスは適宜読み替えてください。

    こちらはターゲット別ライブラリの設定。

    最終のリンク指定に、上記追加したライブラリと、ヘルプによるとOpenSLES、zライブラリも必要そうなのでまとめて加えます。

    一旦この状態でビルドしてみると、エラーが出てしまいました……

    上の方のエラー、「res変数が初期化されてないよ!」ということですが、ひとまずオプション指定で回避します。
    下記ブログを参考にさせていただきました。
    clang で初期化されていない変数を使った場合に警告を出す (-Wuninitialized) – yokaze.github.io

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -Werror")

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11 -Wall -Werror -Wno-uninitialized")

    ライブラリ周りはひとまず問題がなくなったかと思います。

    必要なリソース類追加

    Wwiseのリソースをサンプルから引っ張ってきてapp/src/main/assetsに投入します。
    Wwise_IDs.hはサンプルからコピーしてきても、該当フォルダをインクルード対象に追加してもOKです。
    今回は手っ取り早くコピーして使用しています。

    Wwiseの処理は独立したクラスにしておきましょう。Wwiseクラスを新設します。
    ファイルを追加したので、CmakeListのリンク指定も忘れずに。

    add_library(native-activity SHARED main.cpp)

    add_library(native-activity SHARED main.cpp Wwise.cpp)

    プロジェクトの構成はこのようになりました。

    今回はここまでです!
    次回はいよいよソースコードを書いていきます。

    ※2019年2月19日追記
    実装編はこちら

    -Wwise
    -,

    執筆者:


    comment

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

    nineteen − ten =

    関連記事

    no image

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

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