
マイケル
みなさんこんにちは!
マイケルです!

エレキベア
こんにちクマ〜〜〜

【Unity】サウンドミドルウェアに依存しない設計を考える【CRI ADX・Wwise】
2024-03-27

マイケル
以前の記事にて、UnityAudio、CRIADX、Wwiseで切り替え可能なサンプルプロジェクトを作成しました。
今回はその中でも「Wwiseを使用した基本動作の実装方法」について紹介していきます!
具体的には下記のような再生サンプルの実装方法になります。

▲サンプル1:基本機能

エレキベア
UnityAudioやCRIADXで実装した内容と比較すると違いが分かりやすそうクマね

【Unity】第一回 UnityAudioを使いこなす 〜サウンド再生処理編〜
2024-01-22

【Unity】第二回 UnityAudioを使いこなす 〜AudioMixer活用編〜
2024-01-22

【Unity】第一回 CRI ADXを使用したサウンド制御 〜基本動作、周波数解析編〜
2024-03-28

【Unity】第二回 CRI ADXを使用したサウンド制御 〜インタラクティブミュージック編〜
2024-03-28

【Unity】サウンドミドルウェアに依存しない設計を考える【CRI ADX・Wwise】
2024-03-27

マイケル
作成したサンプルのリポジトリと、Wwise関連処理は下記になります!
こちらも合わせてご参照ください!
GitHub - unity-multi-audio
▲サンプルプロジェクト
フォルダ | 内容 |
---|---|
Wwiseプロジェクト | |
APIを実行する処理 | |
サンプルゲーム固有のオーディオ関連処理 | |
サンプルゲームに関する処理 | |
Wwiseプロジェクトから出力したサウンドデータ |

エレキベア
中々ボリュームのあるサンプルクマ
参考書籍

マイケル
今回実装するにあたり、下記書籍を参考にさせていただきました!


マイケル
Wwiseには触れていませんが、UnityAudioとCRIADXを使用した実装について紹介されているためサウンドミドルウェアを使用するイメージが掴めると思います!

エレキベア
Unityでのサウンド実装について幅広く知れる一冊クマね
Wwise、Unityの基本設定

マイケル
まずは基本となるWwiseとUnityでの使用方法について簡単な流れを記載します。
詳細については公式サイトのチュートリアルやマニュアルをご参照ください!


エレキベア
Wwiseのチュートリアルは 101、301とかいろいろあるクマね
Wwise側

マイケル
まずはWwise側で音源を取り込み、Soundbank、Eventというものを作成します。
Eventが実際にゲーム側から指定して再生する単位で、SoundbankはEventをまとまりごとに管理するものになります。
参考:Wwise 101 - レッスン 1:クイックスタート - サイレンスからサウンドへ

▲Soundbank、Eventを作成して使用する

マイケル
そして作成したSoundbank等の情報を書き出し、それをUnity側で読み込んで使用する流れになります。
CRIADXの例にはなりますが、下記のようなイメージです。

▲CRIADXの場合のイメージ(公式サイトからの引用)

マイケル
データの書き出しはWwiseの画面上からGenerateボタン押下で行えます。

▲Soundbank情報の書き出し

エレキベア
Wwiseで編集して書き出したものをUnityで使用するクマね
Unity側

マイケル
UnityにWwise環境を導入すると、WwisePickerというSoundbank等の一覧が参照できるウィンドウが開けるようになります。

▲Window > WwisePickerからEvent等の一覧を開ける

マイケル
そしてCRIの時と同様にScene上にグローバルオブジェクトを配置し、それとは別にSoundbank、Event用のオブジェクトも作成しておきます。
各オブジェクトに対してWwisePickerからSoundbank、EventをD&Dすれば、再生できるようになるはずです。
参考:Wwise 301 - レッスン 1: サウンドを追加する

▲グローバルオブジェクトの生成

▲Soundbank、Event用のオブジェクト作成

▲読込タイミング、対象を指定

エレキベア
やっぱり基本的にはコンポーネントを介して制御するクマね

マイケル
しかしWwiseでも下記のようにしてスクリプトのみで再生することもできます。
このあたりはリファレンスやAkBankコンポーネント等の実装を見ることで確認できます。
▲スクリプトのみでの実装例

マイケル
以降で紹介する実装内容についても、基本的にはスクリプト側から制御する方向での内容になります。
ツール側に処理を寄せる方法もあるとは思いますが、ご了承ください。

エレキベア
なるべくスクリプトのみで制御しようとした場合の実装になるクマね
基本機能のサンプル実装

マイケル
では早速サンプルの実装内容について紹介します。
まずは下記の基本機能をまとめたサンプルについてです。

エレキベア
フェード再生からDSPエフェクト、音量調整まで
よくある機能がまとまっているクマね
Soundbankの読込

マイケル
最初に行うのはSoundbankの読込です。
先ほどはコンポーネントを配置して読み込みましたが、スクリプト側からも操作することができます。
まずは下記のようなSoundbank情報のクラスを用意しました。
▲Soundbank情報

マイケル
そして AkBankManager.LoadBank で読み込んだ後に AkSoundEngine.RegisterGameObj でWwiseのゲームオブジェクトとして登録することで使用する準備は完了です。
▲Soundbankの読込
▲Soundbankのアンロード

エレキベア
これで動的に読み込むことができるようになったクマね

マイケル
ちなみにボリュームに関してもSoundbank単位で調整できるようにしています。
これにはSoundbankゲームオブジェクトに対して AkSoundEngine.SetGameObjectOutputBusVolume で設定できます。
▲Soundbankボリュームの設定

エレキベア
Wwiseは基本的にゲームオブジェクト単位で管理するクマね
BGM再生

マイケル
そして基本的なBGM再生については、下記のようにEvent実行の関数を用意することで実装しました。
▲Eventの再生

エレキベア
再生するオブジェクトはSoundbank単位で指定しているクマね

マイケル
そしてフェード再生は下記のように Pause -> Resume することで実装しました。
今回はスクリプトで制御するために無理やり実装したのですが、制御できないようにしているのを見ると基本的にWwise側でフェード設定する方がよさそうです。
▲再生時のフェード指定

エレキベア
スクリプト側で設定できるようにしてくれてもいい気がするクマが・・・
SEの3D再生

マイケル
そして3D位置による再生については、下記のようにゲームオブジェクトを渡して AkSoundEngine.RegisterGameObj で登録することで実装しました。
▲Eventの再生(3D)
▲PlayEventにgameObjectを渡す

エレキベア
AddComponentじゃなくWwiseのゲームオブジェクトとして登録するクマね
音量調整

マイケル
音量調整については、調べた限りは取得処理が見当たらなかったので変数としてボリュームを保持して返すようにしました。
実装としては下記のようになっています。
▲各ボリュームの取得/設定
▲Masterボリューム、Soundbankボリュームの管理

エレキベア
うーん、他にいい方法はないのクマかね・・・
DSPエフェクトの適用

マイケル
最後に、DSPエフェクトはスクリプトメインで設定するのは難しかったため、Wwise側メインで制御する方向で実装しました。
エフェクトをかけたBUSを用意し、send値をGameParameterで変化させるようにすることで実装しています。
参考:Wwiseヘルプ - Game-Defined Auxiliary Sendを使う

▲AudioBusの定義

▲User-Defined Auxilliary Sendsの設定

▲RTPCによる調整

エレキベア
CRIでいうAISAC値がRTPCにあたるクマね

マイケル
あとはスクリプト側で対象のパラメータを設定するようにすれば実装は完了です。
▲GameParameterの設定
▲エフェクト適用処理

エレキベア
スクリプト側での実装は簡単クマね
おわりに

マイケル
というわけで今回はWwiseによる基本挙動の実装でした!
どうだったかな?

エレキベア
CRIの実装とはまた違って面白かったクマ〜〜

マイケル
スクリプト側での実装方法を調べるのが大変で、制御がWwise側に寄っている印象を受けました。
今回紹介した内容もこれがベストかどうかは疑問なところですね・・・

マイケル
次回は引き続きWwiseでインタラクティブミュージックの実装に挑戦してみます!
お楽しみに!!

エレキベア
クマ〜〜〜〜〜〜
【Unity】第一回 Wwiseを使用したサウンド制御 〜基本動作編〜 〜完〜

【Unity】第一回 UnityAudioを使いこなす 〜サウンド再生処理編〜
2024-01-22

【Unity】第二回 UnityAudioを使いこなす 〜AudioMixer活用編〜
2024-01-22

【Unity】第一回 CRI ADXを使用したサウンド制御 〜基本動作、周波数解析編〜
2024-03-28

【Unity】第二回 CRI ADXを使用したサウンド制御 〜インタラクティブミュージック編〜
2024-03-28