UnityでGoogle Resonance Audioを使ってAmbisonics音源を鳴らすVRコンテンツでVRが有効にならないときは「Plugins/x86_64」フォルダを消せばいい（追記あり）

この記事は[Unityゆるふわサマーアドベントカレンダー2018](https://qiita.com/splas_boomerang/items/e6619fb1e6dd92fd231f)の9日目の記事です。

# 追記（2018年8月28日）
この問題、Unity2018.2.5f1で直っていました！ 私もビルド済みのものを見て確認しています。

> (1066060 (1036422)) - XR: Fixed unneeded.dll created for Audio Spatializer when built for Standalone.
[Unity2018.2.5f1 Release Note](https://unity3d.com/jp/unity/whatsnew/unity-2018.2.5)より

# この記事の主題は３つ

- 表題の罠の話
- Ambisonics音源を置くAudio Sourceの設定のしかた
- なぜか音の左右がひっくり返るときはY軸Rotationを180で乗り切ろう

# UnityでGoogle Resonance Audioを使ってAmbisonics音源を鳴らすVRコンテンツでVRが有効にならないときは「xxxxx_Data/Plugins/x86_64」フォルダを消せばいい

- Unity2018以降で、
- Google Resonance Audioを使って、
- Ambisonics音源を鳴らす、
- VRコンテンツを、
- Windows x86_64 Standaloneでビルドすると、

なぜかexeファイルを起動してもVRが有効になりません。ちなみに、EditorでPlayボタンを押したときにはちゃんとVRで見られます。**なぜだぁ**。（※私の検証環境はUnity2018.1.4）

そして、こんな特殊な設定でコンテンツを作っている人が検索した範囲ではなかなか見つからず、困ってました。

結果としては、ビルドした後にできるフォルダの中に入っている、

xxxxx_Data/Plugins/x86_64 （xxxxxはexeのファイル名が入ります）

というフォルダを丸ごと削除することで、VRで起動するようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199260/2e3c5717-c965-86c7-8a78-9996ede9f2b9.png)

はっきり言って**罠**です。

ちなみに、公式のGithubのIssuesにこの手順の説明があったのですが、すでに解決済み扱いになっていました。~~出来上がったフォルダを削除するって手順が必要なものが解決済みってなかなかすごい。~~

> Unity QA responded to the issue on unity :
> 
> I've taken a look at the mentioned plugin and the problem seems to lie that the editor includes an additional dll for the plugin as of 2018.1. A workaround for now would be to go to the build's plugin folder and delete the x86_64 folder, but I will forward this to the developers for further resolution.
> 
> The work around worked for me.
*https://github.com/resonance-audio/resonance-audio-unity-sdk/issues/33 より*

# そもそもAmbisonics音源ってシーンにどうやって配置するの？

まずは公式Githubから、Resonance Audio SDKのUnity Packageをダウンロードしてきて、インポートします。
https://github.com/resonance-audio/resonance-audio-unity-sdk/releases

Ambisonics音源のWAVファイルを用意して、ProjectのAssetのどこかに入れます。すると結構長い時間のインポート処理が走ります。

インポートできたら、そのWAVファイルを選択し、InspectorでAmbisonicのチェックボックスをONにして、Applyボタンを押します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199260/2a953547-98ae-b75b-b592-fe32ef0e90dd.png)

つづいて、Assets/ResonanceAudio/Prefabs に入っている、ResonanceAudioSoundfield というプレハブをヒエラルキーにドラッグアンドドロップします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199260/e92cda78-0b75-0017-f737-de15ecdcb57c.png)

そして、そのResonanceAudioSoundfieldのAudioClipに先ほど読み込んだAmbisonics音源のWAVファイルを設定します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/199260/e0778fed-7984-9ee4-0a33-bafd889f7c4a.png)

つづいて、上のメニューから Edit → Project Settings → Audio を開き、Spatializer PluginとAmbisonic Decoder PluginをそれぞれResonance Audioにします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/199260/42760c55-653b-dc08-c357-9ec5e2670575.png)

これで設定は完了です！ VRのHMDをかぶって、首を振るたびに音の鳴り方が変わるワンダーランドを楽しみましょう！

ちなみに、ResonanceAudioSoundfieldのプレハブを置くと、MixerがResonance Audioのものになるんですが、このMixerを使っているときはSpatializer PluginとAmbisonic Decoder PluginがResonance Audioになってないと音が鳴りません。しょーもないけどハマりポイントではあるので気を付けて！

あと、空間音声なんだからSpatial Blendは3DでSpatializeもONなんじゃないの？ と思ったりして、プレハブの設定を変えたくなってしまうかもしれません。**変えないほうがいいです。**細かい説明は別記事で書くかもしれませんが、プレハブの設定のまま、つまり2DでいいしSpatializeはOFFのままでよいです。

# なぜか左右がひっくり返る問題

発生条件がいまだに特定できていないのですが、**UnityにAmbisonics音源を配置して鳴らすと、なぜか音の左右がひっくり返っていることがあります。**UnityやSDKのバージョンなのか、Ambisonics音源生成時の問題なのか。原因はいろいろありそうで。

そんなときは、ResonanceAudioSoundfieldのY軸のRotationを180にしてしまえば解決します。あるいは、MainCameraを同じくY軸180°回しましょう。根本的な解決にはなっていませんが、根本的に解決する余裕なんてないことは開発現場にはよくあることです（なう）。

# すこし詳細に

- [Resonance Audio](https://developers.google.com/resonance-audio/)とはGoogleによる空間音声処理のSDKで、UnityやUE4やWWiseやVSTなど各種エンジン向けのプラグインがあります。Ambisonics音源の再生はもちろん、オブジェクトベースの空間音声を扱えたりする総合的なSDKです。スマホVRにも対応していて、かつ人間工学の成果が入っているようで音の鳴り方もいい感じです（主観です）
- Ambisonics音源とは、全天球の空間情報を持った音声ファイルです。1次(1st order)のAmbisonicsなら4chです。VR内で再生すると、顔の向きによって音の鳴り方が変わります。簡単にいうと、プレイヤーが正面を向いているときに右耳付近から鳴っている音があるとき、プレイヤーが真後ろを向くと、その音は左耳付近から聞こえるようになります（この表現じゃわかりにくいかな…）
- ちなみに、最近のUnityで、Resonance AudioがUnity内部に統合されたため、Resonance Audioのプラグインを入れるとResonance AudioのDLLが二つできてしまうことから起動時に衝突してしまい表題の罠が発生するようです。削除した「x86_64」フォルダにはResonance AudioのDLLが入っています。開発側が原因を理解しているなら早く直ってほしいよぅ（自分で修正してプルリク出す技量はないので他力本願寺）

# 試してみたい人向けサンプル音源

ゼンハイザーのAmbisonicsで録音できるマイクAMBEO VR MICの製品ページに、このマイクで録音したデモ音源があります。Ambisonicsの実装を試してみたい人にもおすすめです。
https://www.sennheiser.co.jp/sen.user.Item/id/1116.html

Unityで扱うときは、Bフォーマットのほうを使います。AフォーマットとBフォーマットの違いに興味がある方は上記のページからたどってみてください。

上記のゼンハイザーのページの内容や、そのページからリンクされている記事をたどっていけば、Ambisonics音源を作ったり使ったりすることについて基本的な知識がだいたい得られます。ゼンハイザーありがたい。

# 余談：AmbisonicとAmbisonics

世間的にはAmbisonicsと、最後にsが付くほうが一般的なような気がします。
例：[英語版WikipediaのAmbisonicsのページ](https://en.wikipedia.org/wiki/Ambisonics)

だけど、Unityさんは[かたくなにAmbisonic表記](https://docs.unity3d.com/Manual/AmbisonicAudio.html)です。

両者の違いや理由はわかりません。。。