VRChat音響
追記(2023/08/21)
これ書いたのかなり前なので、間違ってたらスイマセン
注意点
以下が紛らわしい
2D:AudioSourceのSpatialパラメータを0にした状態。ステレオを聴くならこれ
3D:AudioSourceのSpatialパラメータを1にした状態。完全に3Dにするとモノラルになる
Spatial:AudioSourceの2D/3Dの指定をするパラメータ
Spatialize:上記とは別に、プレイヤーの位置とか向きで音の聞こえ方を変える機能
UnityEngine
音源につける
Spatial
3D(Spatial)にするとモノラルになる
距離に応じて音が小さくなるはこれでできる
音源の方向から音がなる、とかはない
2Dにすると、プレイヤーの位置や向きに関係なくステレオになる
Spread
今度書きます
Spatialize
VRC_SpataialAudioSource側で操作するのでAudioSource側でOn/Offを切り替えることは基本的にない
Spatialとは別物というか関係ない
プレイヤーの位置や向きに応じて音を変える
UntiyエディタのProjectSettings > Audioで確認できる
注:Oculus Audio Spatializerに渡されるすべての音声はモノラルである必要があります。
ステレオ音源はLeftからしか聞こえなくなる
モノラル音源しか使えない
SpatializePostEffects
AudioFilterとSpatializeの前にやるか後にやるか、だと思う(Onなら後)
あまり違いはわかってない
AudioMixer
2D/3D, SpatializeのOn/Offに関係なくVRChatでは全く機能しない
Editorでデバッグするときは機能するがビルドするとダメ
多分だけど、VRChat側で用意したAudioMixerが存在していて、インスタンス化したときに強制的にこれを使うように上書いてそうな気がする。(Settingで調整できる音量のバランスはこのAudioMixerを操作してそう)
個別のAudioSourceに対してエフェクトをかけたいなら、AudioFilterを使うしかない
AudioListener
Unityにおける"耳"的Component
一般的に3Dゲームではカメラ or プレイヤーと同じオブジェクトにアタッチする
原則としてScene上で一つしか機能しない
VRChatではアバターに勝手についてる(っぽい)
Udonから参照できない
ワールドに事前に置いておくことで上書きできる
複数ある場合は最後にアクティブになったやつ、とかな気がする
耳移動(ボイスチャットはうまくいかないのかも)
種類
cutoffFrequencyを動的に変更できない
多分バグ
厳密にはオブジェクトの持ってる値は変わってるけどエフェクトの効果は変わらない
ここに書かれてるCustomAudioFilterはUdonだと動かない
AudioDistortionFilter
音源に指定する場合
AudioSourceに張り付ける
VRC_AVProVideoListenerがアタッチされていると機能しない
TopazChatのスピーカーには使えない
今は使えるらしい(?)
SpatializeのOn/Offに関係なく機能しないし、Spatializeも勝手にOffになる(バグ?)
耳に指定する場合
AudioListenerに張り付けても機能する
ボイスチャットにも影響するかは未検証(あとで書く)
AudioReverbZone
Zoneに対するAudioListenerの位置に応じてAudioSourceの音にエフェクトをかける
AudioSource側のReverbZoneMixで影響が決まる
2D/3Dはどっちでも動いてそう
Spatializeと併用できない
VRC SDK3
もともとONSPAudioSourceが使われたけど、VRC内製のものが作られた
AudioSourceには必ずつけると思ってよさそう(つけないとビルド時に警告が出る)
AudioSourceのSpatializeのOn/OffをEnable Spatializationでオーバーライドする
Near
The near radius, in meters, where volume begins to fall off. We recommend you keep this at zero for realism and effective spatialization. Defaults to 0m.
音の減衰が始まる距離。デフォルトは0。十分近ければ音量が一定、みたいにしたいならこれを大きくすればよさそう
VolumetricRadiusとどう使い分けるか不明
Far
Far only overrides an Audio Source curve if you turn on the "Use Spatializer Falloff" checkbox on VRC_SpatialAudioSource.
UseSpatializerFalloffのチェックを外すと機能しない
Volumetric Radius
is mainly for distant audio sources that need to sound "large" as you move past them. The listener should not ever get close to the radius for best results. Keep this at zero unless you know what you're doing.
音源の大きさ。デフォルトは0で点音源。
遠くにある音源の大きさみたいなのに使うのかもしれない
Use AudioSource Volume Curve
Offの場合は、逆二乗減衰(音源からの距離の-2乗で音量が減衰する)
Enable Spatialization
Uncheck this to disable the default inverse-square falloff curve, and instead use the Audio Source's spatialization settings.
todo: Use AudioSource Volume Curve との違いについて書く
SDK3で消えたっぽい
VRC_AVProVideoSpeaker
VRC_AVProVideoPlayerの音を流すのに使う
トパズとかで使ってるやつ
AudioSourceが必要
ので、VRC_SpatialAudioSourceも必要
StereoMix/LeftMono/RightMonoが使える
(それ以外はサラウンド用なのかもだけど動作確認できてない)
LeftMonoとRightMonoはモノラルに変えてくれるので、Spatializeと併用可能
現状ステレオのLRを別々のモノラルに分けるのはこれしかなさそう
StereoMixはSpatializeと併用不可