3Dサウンド ～Resonance Audio編～

#導入方法
Googleが出しているSDKなので、下記のUnity向けインテグレーションを参考に導入していきます。
[Resonance Audio公式サイト](https://developers.google.com/resonance-audio/)

GithubのReleasesから最新のUnityパッケージをダウンロードし、Unityにインポートします。
[パッケージの配布場所](https://github.com/resonance-audio/resonance-audio-unity-sdk/releases/tag/v1.2.0)

最新版は2018年2月28日時点で**v1.2.0**ですのでこちらで進めていきます。

インポートが終わったら、まずはじめにAudioManagerを開いて使用するプラグインをResonance Audioに変更します。

![SnapCrab_NoName_2018-2-28_11-33-1_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/82250/704f83db-ef64-5cb1-5fd5-ed6ba1fded24.png)

Ambisonic Decorder PluginはAmbisonics音源を使用することがない場合そのままでも大丈夫です。

**Assets/ResonanceAudio/Demos/Scenes**以下にデモシーンがあるのでそこから試すことができます。

基本的には以下の4つのコンポーネントを使用します。

- ResonanceAudioListener
- ResonanceAudioSource
- ResonanceAudioRoom
- ResonanceAudioReverbProbe

# ResonanceAudioListener
AudioListenerと併用します。
無くても問題はないのですが、いくつか追加でパラメーターが調整できるようになります。

また、このコンポーネントでUnityシーンの音場をAmbisonics音源として録音することも可能です。
ただし、Editor上非実行時のみ録音可能という制限付きです。

![SnapCrab_NoName_2018-2-28_11-52-48_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/82250/65d49483-9b6d-dbe9-2998-2bb5d3ab753f.png)

# ResonanceAudioSource
AudioSourceと併用します。
こちらも無くても問題ないです。いくつか追加でパラメーターが調整できるようになります。
AudioSource側の設定を**Spatial Blend**を**3D**、**Spatilize**、**Spatialize Post Effects**を**オン**にします。

ただし、Ambisonics音源を再生する場合は、**Spatial Blend**を**2D**、**Spatilize**、**Spatialize Post Effects**を**オフ**にします。
Ambisonicsは**音場**を録音し、再生する機能なのでオブジェクトベースではなく、シーンベースになります。
そのため、ここでは3Dではなく2Dで設定します。
少しややこしいですが、Unityでは3Dがオブジェクトベースで、2Dがシーンベース、チャンネルベース扱いになります。
立体音響についてはこちらの記事が参考になります。
[空間音声入門：360度VR動画時代の音響とは(イベントレポート)](http://dverse.me/enginnerblog/2017/04/11/spatialaudio001/)

![SnapCrab_NoName_2018-2-28_11-59-5_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/82250/cefcdc43-371f-491e-072e-f1e389da2d25.png)

# ResonanceAudioRoom
**Dyanamic early reflections**と**Late reverberation**の反射処理を行います。反射音に関しては下記のサイトが分かりやすいです。
[Early Reflection(初期反射音)と他の反射音の違いって何？](http://yugo-music.jp/article-6205.html)

部屋のサイズに合わせて配置し、Left Wall、Right Wall、Floor、Ceiling、Back Wall、Front WallのMaterialを設定します。

| Surface Materials         |        |
|:-----------------|------------------:|
| Transparent               |              設定なし|
| Acoustic Ceiling Tiles    |            吸音材(音楽室の壁)|
| Brick Bare                |              裸のレンガ |
| Brick Painted             |                塗装されているレンガ |
| Concrete Block Coarse     |             粗いコンクリート|
| Concrete Block Painted    |           塗装されたコンクリート |
| Curtain Heavy             |              厚手のカーテン |
| Fiberglass Insulation     |           ガラス繊維断熱材 |
| Glass Thin                |              薄いガラス |
| Glass Thick               |                厚いガラス|
| Grass                     |             ガラス|
| Linoleum On Concrete      |           リノノウム床張りされたコンクリート|
| Marble                    |              大理石|
| Metal                     |             金属|
| Parquet On Concrete       |              合わせ木床張りされたコンクリート |
| Plaster Rough             |                粗い石膏 |
| Plaster Smooth            |             滑らかな石膏 |
| Plywood Panel             |           合板 |
| Polished Concrete Or Tile |              磨き上げられたコンクリート、タイル |
| Sheetrock                 |            石膏ボード |
| Water Or Ice Surface      |              水面、氷面 |
| Wood Ceiling              |                木製の天井 |
| Wood Panel                |             木製のパネル |

# ResonanceAudioReverbProbe
場所によって細かくリバーブの調整を行うことができます。
またこのリバーブ設定は事前計算で焼き込むことが可能です。
ReverbBakingDemoシーンを見るとかなり細かく設定できることがわかります。

Only When Visibleをオンにすることで建物の中にいる時だけリバーブ処理のかかった音を聞くことができるようになります。
例えばShapeをSphereにして設置した際に、Sphere内には入ってはいるが、建物の中には入っていないというシチュエーションが発生するときに使える機能です。

![reverb.png](https://qiita-image-store.s3.amazonaws.com/0/82250/11c89161-7eaa-f3fe-2b1e-cbd7dc40ad5d.png)


チェックボックスをオンにすることでSphere内に入っている、かつ、建物の中に入ってるときのみリバーブの効いた音を聴くことができるようになります。

#まとめ
## ResonanceAudioでできること

- Resoncance Audio PluginのHRTFの適用
- Dyanamic early reflectionsとLate reverberationの反射処理
- 反射素材の設定(全22種類)
- Reflection ProbeによるReverbのBaking
- Ambisonics音源の再生、録音(非実行時のみ)