らくとあいすの備忘録

twitter : lactoice251

VRC_SpatialAudioSourceのクリックノイズ問題

今回もVRChatでの立体音響等について.次のツイートのように,VRC_SpatialAudioSourceの"Spatialization"を有効にしたときにだけ音の鳴り始めでプツっとなる問題を検証.

結論

親オブジェクトRigidbodyコンポーネントが付いている時に、その子オブジェクトとして配置されたVRC_SpatialAudioSource付きのAudioSourceUdon経由で鳴らすと、音の鳴り始めにクリックノイズがのる。

検証

Time.deltaTimeで時間を測って、AudioSourceを1秒毎に鳴らすU#ScriptでAudioSourceを鳴らす。 片方 (左側) は直置きのAudioSource、もう片方 (右側) は親オブジェクトにIs Kinematicのrigid bodyを付けた。 結果は動画のように、rigid bodyを付けた方だけ2回に1回程度の頻度でクリックノイズが乗った。

using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class Test_spatialaudio : UdonSharpBehaviour
{
    public AudioClip clip;
    public AudioSource source;
    private float t;
    private void Update()
    {
        if (t > 1.0f)
        {
            source.PlayOneShot(clip);
            t = 0.0f;
        }
        t += Time.deltaTime;
    }
}

解決策

AudioSourceの親オブジェクトにRigidbodyを付けるのは、Pickupオブジェクトから音を鳴らすなど、音をあるオブジェクトの動きに追従させたい時。 なので、追従を親子関係ではなく、Script経由で行えば、親オブジェクトにRigidbodyを置くことを回避し、クリックノイズを避けることが出来る。

さいごに

VRC_SpatialAudioSource、ひとまず目に見えた問題は回避されましたが他にもどこに地雷が潜んでいるのかわからないのでちょっともう触りたくないですね...。

一応検証に使ったワールドを置いておきます。

https://vrchat.com/home/launch?worldId=wrld_095d2450-a9b3-482e-ac7a-8552a1e804e3&instanceId=77423~private(usr_08f6abeb-183b-463e-b355-53978f61b24d)~canRequestInvite~region(us)~nonce(e81eb2a7-2ab0-474b-8e19-def0946c6fc2)