【VRChat】2D/3D音源の設定方法と Low / High の聞こえ方の違い

## 概要
- 2D / 3D 音源の聞こえ方の違いを検証
    - 検証のために Audacity でピンクノイズを作成する
- 3D音源は高音が、2D音源は低音が強調される
- 視点より上部に置くと高音が、視点より下部に置くと低音が強調される

## はじめに
私の作成したVRCWorld「[Music Stellar Lake](https://vrchat.com/home/launch?worldId=wrld_c330cf97-4ffb-40a9-b872-79a36905134d)」の公開に際して
ワールド作成時に得られた知見のうち汎用的な内容を共有するものです

もし「役に立ったー！」となったらワールドに遊びに行ってもらえると
（ついでに #musicstellarlake のハッシュタグでツイートしてもらえると）
嬉しいです！


## 環境

- VRCSDK 3.0 2021.08.04.15.07
- Unity 2019.4.29f1
- Audacity 3.0.0


## 実現したいこと
- 2D音源/3D音源の聞こえ方の違いを検証
    - 音楽を聴くのに最適な空間を作るのに役立てたい

## 手順１：Audacity を用いてピンクノイズを生成する
Audacity を用いてピンクノイズ（オクターブあたりのエネルギーが均等となるようなノイズ）を生成
適当なサイトからピンクノイズをとってきてもらってもOKです

- Audacity を立ち上げ
- Generate > Noise > Pink を作成
- MP3 としてエクスポート

|ピンクノイズの作成1|ピンクノイズの作成2|
|---|---|
|![Audacity1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/231f1a55-bee6-f3e7-6bc0-902c9fb6f3d3.png)|![PinkNoiseGen.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/9b2fa7d0-aecd-2690-2cc7-96bacde1ba95.png)|



### 注意
- 最新版の Audacity の挙動がやや不安定なのか、私の環境だと頻繁に止まるので別に対策を講じる必要があるかもしれません

## 手順２：音源の位置を設定
- `AudioSource` を追加
- テストのため、VRCWorld の前方 5m に配置
- `Audio Source` の `GameObject` に `VRC Spatial Audio Source` コンポーネントを追加
- `Audio Source` および `VRC Spatial Audio Source` コンポーネントを図のように設定

|Audio Source| VRC Spatial Audio Source |
|---|----|
|![audiosource settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/c5fe306d-a778-3856-644f-8dd5efda67c0.png)|![spatial audio source settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/c4f3d5da-36ef-90e4-c77f-4d21590d8e5a.png)|

## 手順３：AudioLink に Audio を接続
- `AudioLink` を導入し `AudioLink` および `AudioLinkController` をシーンに追加
- `AudioLink` の `Audio Source` として先ほど追加した `Audio Source` を設定
    - スペクトラムアナライザで波の様子が確認できるようにする
    - 詳しくは [AudioLink の Github のページ](https://github.com/llealloo/vrc-udon-audio-link) を確認してください （本筋でないため省略）
- AudioLink のスペクトラムアナライザは周波数軸が対数軸となっているため、white noise ではなく pink noise で検証を行います

ここまでで AudioSource の 3D/2D によっての音の違いや設置位置による音の違いを確認できるようになっています

## 検証１：3D音源と2D音源の違い
- AudioLink の 3D と 2D をそれぞれ 100% に振り分けた場合の音の聞こえ方を検証
- ローのレベルがおおよそ同じくらいになるように振幅を調整しています

### 結果

|3D|2D|
|---|---|
|![3D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/78b61e11-d2a3-98d2-4057-d64172622ff6.png)|![2D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/ce22ac2e-e642-00a9-8476-0d2cb3554b8b.png)|

- 3D音源の方が高音域の振幅がより大きい
- 2D音源に振り切っていても特定の周波数帯で振れる位置がある？
- 主観的には3D音源の方がより大きく、かつ高音成分が強く聞こえる感じがします


## 検証２：3D音源を上下に振り分ける
- 3D音源の位置を45度上、45度下で距離 5m となるように設定
    - VRCWorldの座標から上下に 3.536m に
        - 正確にはヘッドの高さがあるため45度にはならないが、おおよその聞こえ方の性質を図るだけなのであまり気にしない方向で
- なるべく水平方向を向いた状態でスペクトラムアナライザを確認

### 結果

|3D・上|3D・下|
|----|----|
|![3Dupper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/0a560c53-634e-2b21-4182-cd86e9d1a803.png)|![3DLower.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/a485699c-f603-a0ca-72b5-202cbc936424.png)|

- 上部に音源を設置した方がより高音成分が強調される
    - Unity の音源の仕様？
- より高音が強調される方が上方向にあるように聞こえる、のような知見があり、それをUnityのエンジンが採用しているのかもしれませんが、あまりちゃんと調べていないので何とも言えないです...

## 検証３：2D音源を上下に振り分ける
- 検証２と同様の試験を2D音源でも行う


### 結果

|2D・上|2D・下|
|----|----|
|![2duppper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/d74604ae-11b4-87dd-6669-64607d01ea81.png)|![2dlower.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169868/a2e9ee3c-b67b-308f-632d-482acc790f59.png)|

- 意外にも2D音源でも上下のどちらに配置するかで音が微妙に変化することがわかった
    - VRC Spatial Audio Source の影響か？
- やや下に配置した方が中・低音成分が強調される
- 主観的には結構音の感覚が変わります


## 結論
上記の検証をまとめると以下のようになるかと思います

- 低音を強調したい場合 → 2D音源で、視点から下に配置するとよい
- 高音を強調したい場合 → 3D音源で、視点から上に配置するとよい

VRChat で音楽を聴くワールドを作る際には参考にしていただけたらと思います

## 追記
今回は簡単のためモノラル音源でためしましたが、LRの音源の場合、2音源間の距離を縮めることで Mid を強調することができるそうです（Mazzn1987 さんよりご教授いただきました）

## 謝辞
2D・3D音源の基本的な性質等については Mazzn1987さん (Twitter: @Mazzn1987_TRPG）にご教授いただきました
ここに深くお礼申し上げます