Unityでサウンドエンジン(ADX2, Wwise, FMOD)を扱う際におさえたい事


## はじめに

本文書は、Unityでサウンドまわりを実装する際に各種(ADX2, Wwise, FMOD)を採用するさいに検討したい事と、実装する際に懸念すべき事についての私見です。定性的な部分が多いので定量的な情報をお持ちであればご指摘いただけると幸いです。というか情報がもっとほしい。

## 結論

はじめに結論をのべておくと、「ほとんどの場合Unityならサウンドエンジンいらない」そして「ある程度したい演出があって楽にやりたいならADX2」「WWiseはつかうならちゃんと使いこなさないと損」「FMODは使うと楽しいけど情報はすくない」「どれを使うにしても発音数をなにも考えずに増やしてはだめ」となります。ある程度使ったことのある人には何をいまさら？というのことをこれから長々と書きます。

## 環境
- MacBook Air (11-inch, Early 2015) OSX 10.12.6
- Unity 2017.3.f3
- ADX2 Unity Plugin/AssetStore 2.24.00
- Wwise 2017.2.0.6500
- FMOD 1.10.02


## 各エンジンの特徴

世の中には[Unity公式ノンリニアオーディオデモ]( https://bitbucket.org/Unity-Technologies/audiodemos )というすごくかっこいいデモがあります。ただ、これの実装はそこそこ大変です。さらにUnity上でオーサリングして調整するとなるとかなり大変そうです。これを各サウンドエンジンで実装することで各エンジンの特徴を再確認しました。

 ※ページビュー乞食
- [ADX2でオーサリング]( https://qiita.com/dTAT/items/c28f5ee11b08cc2c1b5d )
- [ADX2で組み込み]( https://qiita.com/dTAT/items/aee3227e61ece2bb0adb )
- [Wwiseでオーサリング1](https://qiita.com/dTAT/items/a2477b3771e8180e9e42)
- [Wwiseでオーサリング2](https://qiita.com/dTAT/items/8b990776df1c225f4c5f)
- [Wwiseで組み込み](https://qiita.com/dTAT/items/ed1bcdafcdc6af6e3594)
- [FMODでオーサリング](https://qiita.com/dTAT/items/8cf855ada87cae88f6ff)
- [FMODで組み込み](https://qiita.com/dTAT/items/11c17a68a34698729697)

ざっくり表にすると

|項目  |オーサリング負荷  |組み込み負荷  |
|---|---|---|
|Unity  |X  |X  |
|ADX2  | ◯ |◯  |
|Wwise  |△  |◯  |
|FMOD  |◎  |○  |
※便宜上、Unityでもの状態を一番つらい、にしてます。

という感じでした。正直Wwiseのオーサリング負荷はXにしてもいいくらいにつらいものでした。大規模になってくると段々つらさが均されていくのですが、このデモ程度の規模だとちょっとのことのためにメンドくさい部分を直に触ることになるためです。また、オーサリング負荷がADX<FMODなのはUXがわかりやすくてなんとなーくやっても上手くいくからです。実装負荷は正直どれもおなじくらいです。用意されてるコンポーネントもどれも一緒な感じですし。

## 2020/10/12:お値段の話

聞きかじったお値段の話を書いておきます。
インディーだとだいたいどれもタダです。
商用の方は予算3億、売上5億くらいで考えてみます。
(夢があるような内容な絶妙なライン..モバイル売切だと夢ありすぎて非現実的..)

|項目  |インディー環境 |商用価格  |
|---|---|---|
|Unity  | - | (追加費用なし)  |
|ADX2でSteam  | LEなら0,AssetStore版なら$100  | 5億円*0.7(Steam税引)/1.1(税引)*0.0095(ADX料)≒300万円≒$28,000 |
|ADX2でiOS/Android売切  | LEなら0,AssetStore版なら$100  | 75万円、あるいは売上*ストア税*0.04の大きい方 例)5億*0.7(ストア税)/1.1(消費税別)*0.04=1272万≒ $121,000 |
|ADX2でiOS/Android アイテム課金  | LEなら0,AssetStore版なら$100  | 販売価格-ストア手数料の0.95% x 販売本数、上限25円/本。基本無料・アイテム課金ゲームは月0~80万円の売上連動型 |
|ADX2でF2P | LEなら0,AssetStore版なら$100  | 販売価格-ストア手数料の0.95% x 販売本数、上限25円/本。基本無料・アイテム課金ゲームは月0~80万円の売上連動型 |
|Wwise  |$150K規模まで0  | $900(＋ロイヤリティ)~ 21,000(ロイヤリティなし)  |
|FMOD  |$500k規模まで0 | $5,000~15,000|

ちなみにお値段は公式サイトからの引用です。

以下にもうすこし詳しい内容を書いておきます。

### 素Unity

#### 長所
- 中身はFMOD
- AudioSource, AudioClipなどのわかりやすいAPI
- Unity標準装備のプロファイラで最適化できる
- AssetBundleとも親和性高い
- 音数がふえたら優先度順に消す、くらいはやってくれる

#### 短所
- 細かな発音制御しようとするとスクリプト書く必要がある
- Wavをバージョン管理に含むとプロジェクトが肥大化するのでサブモジュールにしたり、AssetBundle化したりと苦労が多い

### ADX2

#### 長所
- だいたいなんでもできる
- 日本のゲーム業界のシェアが高い
- 独自コーデックの圧縮率高い
- Androidの低遅延再生に優れる(標準40msecに対して15msecくらい)
- プロファイラーもつかいやすい
- パッキングシステムも用意されてる

#### 短所
- 商用でもUnity用に添付されてるサンプルなどは乏しい
- パッキング用のサンプルはとくに乏しい
- StreamingAssets前提
- 機能制限版ではMac用エディタがない=>2021年現在、追加されたそうです。

### Wwise

#### 長所

- 大体なんでもできる
- 世界標準なので漁るといろんなプラグインとかある
- GDCとかで最先端情報を探るとWwiseが前提
- VR用ソリューションへの対応も早かった
- 使用者の目的にあわせたレイアウトプリセットが多い
- 公式チュートリアルがめちゃくちゃ詳しい

#### 短所

- 日本語情報が少ない
- 使用目的ごとにレイアウトプリセットを切替えてもなお溢れ出るオーサリングツールの情報量
- ほかドライバにくらべて常駐メモリ量がやや多い

### FMOD

#### 長所
- オーサリングツールのUXわかりやすい
- 世界的にはそこそこ採用されてる
- 発音制御、3Dサウンド、ランダム再生、インタラクティブ...だいたいのことはできる

#### 短所

- マイナー
- 日本語情報はめちゃくちゃ少ない
- 最近までモバイル用がなかったりとやっぱり足が遅い

## 補足

作業負荷だけでなくエンジニア的にはマシンリソース負荷もきになるところなのでその辺補足しておきます。本当の最適化は各エンジン添付のプロファイラーでおこなうべきですが、公平になるようにUnityプロファイラーから見えるところで比較します。
なお比較は各サウンドエンジンの組み込みで作成したもので、コーデック：ADX2=独自コーデック、FMOD&Wwise=ogg、再生方式いずれもStreamで作成してあります。

### ざっくりプロファイラーでみると

Audioプロファイラーでみるとこうなります。

![audio_profile.png](https://qiita-image-store.s3.amazonaws.com/0/18557/b8c02b34-27ea-9629-4c23-8ab0b870f957.png "audio_profile.png")

全部いっしょ。しってた。

それぞれ独自のPluginで走ってるので当然UnityProfilerからは確認できません。



### CPU

もちろんこの程度のデモでは1%たりともCPUをつかわないので比較はあまり意味がありません。

※正直オーディオバッファのfillって1frameないに3frame分つめるくらいで動作しないとプチプチいう世界なので、まともなサウンドエンジンを普通に動かしてるかぎりあんまり負荷ってあがらないんですよね。

#### ADX2
![スクリーンショット 2018-01-28 14.50.20.png](https://qiita-image-store.s3.amazonaws.com/0/18557/0225d067-aab3-d2f1-0e09-1234519efa44.png "スクリーンショット 2018-01-28 14.50.20.png")
基本はCriAtom.Initializer、Cri.Listener、Cri.Updateがはしる。追加で音源数が増えるとSourceの処理がはいります。

#### Wwise

![スクリーンショット 2018-01-28 14.56.24.png](https://qiita-image-store.s3.amazonaws.com/0/18557/b70209bf-35be-fe62-1f31-6a8b76d68bad.png "スクリーンショット 2018-01-28 14.56.24.png")

おなじように音源数によって処理が増えます。


#### FMOD

![スクリーンショット 2018-01-28 14.54.33.png](https://qiita-image-store.s3.amazonaws.com/0/18557/c39da386-92a5-0f76-8d10-7b0dfc38d672.png "スクリーンショット 2018-01-28 14.54.33.png")

どれ？

基本的にはどれも音源数によって増える。ということは実は数百〜数千規模になるならあらかじめ刈り取ってあげたほうがいいという中身であろうと思われる。当たり前。

### メモリ

####　概要

![momory_profiler.png](https://qiita-image-store.s3.amazonaws.com/0/18557/b0ac5424-eba5-0544-4f8d-e709833aa4bc.png "momory_profiler.png")

ざっくりみるとADX2とFMODが10MBに対して、Wwiseが30MB近いように見える。やっぱり若干おおい。

ちなみにWwiseのテクスチャがおおいのは標準プラグイン画面のアイコン

![スクリーンショット 2018-01-28 15.26.12.png](https://qiita-image-store.s3.amazonaws.com/0/18557/e0255bd8-009c-61d4-24c9-c6047ab17582.png "スクリーンショット 2018-01-28 15.26.12.png")

はずすの面倒だったんですごめんなさい。そのへんを差し引いてもWwiseは10MB程度は多めに食うようです。

#### 詳細

ADX
![スクリーンショット 2018-01-28 17.07.59.png](https://qiita-image-store.s3.amazonaws.com/0/18557/04c1370e-8632-5c4b-61bd-182c00821438.png "スクリーンショット 2018-01-28 17.07.59.png")
よくみると結構興味深いです。CriExPlayerが結構多めに食っています。CriAtomPlayerEx=CriAtomSouce.player=音源にかかわるので音源をprefabなどに埋め込んでリクエストとして利用するとこのResourceがおおくなり、またそのGCによって処理が低下することが予測されます。可能ならAudioSourceを使い回すような作りにしていたほうが良い事がわかります。当たり前ですね。

Wwise
![wwise_mem.png](https://qiita-image-store.s3.amazonaws.com/0/18557/de680fed-3b8d-ce06-23f9-5010bdfa216b.png "wwise_mem.png")
そりゃプロファイラ上でメモリ負荷が高くなるよ、という状態です。
Windows用とMac用の便利機能やエディタ用のオブジェクトがたくさんいます。このあたりはReleaseビルドなら消えるので先ほどの数字より若干マシになるはずです。

また、音源用オブジェクトサイズは15kB程度とそこまで大きくなく、Callbakなどのマネージャーが大部分をしめています。これがWwiseをいれると大した事やってないのに多くメモリを食われる理由のようです。もう少し大規模なプロジェクトであればこのあたりの割合が下がるため採用してもよい、という判断になります。

FMOD
![スクリーンショット 2018-01-28 17.06.13.png](https://qiita-image-store.s3.amazonaws.com/0/18557/8ed25679-ad08-35ac-0fa5-888011f9eda8.png "スクリーンショット 2018-01-28 17.06.13.png")
![スクリーンショット 2018-01-28 17.05.55.png](https://qiita-image-store.s3.amazonaws.com/0/18557/01618824-9d79-129f-55dc-2a46fe4890c6.png "スクリーンショット 2018-01-28 17.05.55.png")
こんどはまともに見るものがありました。イベントのキャッシュは発音イベントのキャッシュで、一回しかリクエストしていないからか、対して大きくありません。Assetモニタではそのかわり250kBとドカッと確保しています。ADX2が細かく確保している分をひとまとまりで確保している感触です。細かいところがみたい。。

要するにどのエンジンでも、音源を何も考えずにふやすとGCでメモリと処理負荷を食われていきそうなのがわかります。



## まとめ

デモの完成度などからも、Unity単体でだって色々なことができることはわかります。しかしその実装・調整負荷を下げるためにはサウンドエンジンを採用するという判断が有効です。

その際にADX2は独自コーデックや低遅延といったニッチなニーズに応えてくれ、プロジェクトの規模によってもスケールしやすいため、とりあえずコレと選んでしまってもよいサウンドエンジンです。

Wwiseを採用する場合はコンポーザーとエンジニアががっつり腰をすえてやらないと、コンポーザーの負荷が高く、またマシンリソース的にももったいない結果になっていしまいます。

FMODはUnity環境において正直まだおすすめしにくい状態ですが、UXのわかりやすさからインタラクティブミュージックのモック作成などにはアリです。


## 参考

- [Unity Audio Overview](https://docs.unity3d.com/2017.3/Documentation/Manual/AudioOverview.html)
- [ADX 助け合い所](https://www53.atwiki.jp/soundtasukeai/pages/1.html)
- [CRIWARE Portal](https://criware.info/)
- [ADX2 ライセンス料]( https://game.criware.jp/products/adx2/#flow)
- [Wwise トレーニング](https://www.audiokinetic.com/learn/certification/)
- [Wwise ライセンス料](https://www.audiokinetic.com/pricing/)
- [FMOD Unity Integration](https://www.fmod.com/resources/documentation-api?page=content/generated/engine_new_unity/overview.html#/)
- [FMOD ライセンシング](https://www.fmod.com/licensing)

日本のモバイルやインディーでもかっこいいサウンド演出が増えていけばいいですね。