// Token: 0x0600575D RID: 22365 RVA: 0x001E1918 File Offset: 0x001DFD18 public static void ApplyGameAudioMixerSettings(AudioSource audioSource) { if (audioSource == null) { return; } if (audioSource.transform.root.gameObject.CompareTag("VRCGlobalRoot") || audioSource.GetComponent <USpeaker>() != null) { return; } try { audioSource.outputAudioMixerGroup = VRCAudioManager.GetGameGroup(); } catch (Exception exception) { Debug.LogException(exception, audioSource.gameObject); } }
public static List <AudioSource> EnforceAudioSourceLimits(GameObject currentAvatar) { List <AudioSource> audioSources = new List <AudioSource>(); Queue <GameObject> children = new Queue <GameObject>(); children.Enqueue(currentAvatar.gameObject); while (children.Count > 0) { GameObject child = children.Dequeue(); int childCount = child.transform.childCount; for (int idx = 0; idx < child.transform.childCount; ++idx) { children.Enqueue(child.transform.GetChild(idx).gameObject); } #if VRC_CLIENT if (child.GetComponent <USpeaker>() != null) { continue; } #endif AudioSource[] sources = child.transform.GetComponents <AudioSource>(); if (sources != null && sources.Length > 0) { AudioSource au = sources[0]; #if VRC_CLIENT au.outputAudioMixerGroup = VRCAudioManager.GetGameGroup(); #endif if (au.volume > 0.9f) { au.volume = 0.9f; } #if VRC_CLIENT // someone mucked with the sdk forced settings, shame on them! if (au.spatialize == false) { au.volume = 0; } #else au.spatialize = true; #endif au.priority = Mathf.Clamp(au.priority, 200, 255); au.bypassEffects = false; au.bypassListenerEffects = false; au.spatialBlend = 1f; au.spread = 0; au.minDistance = Mathf.Clamp(au.minDistance, 0, 2); au.maxDistance = Mathf.Clamp(au.maxDistance, 0, 30); float range = au.maxDistance - au.minDistance; float min = au.minDistance; float max = au.maxDistance; float mult = 50.0f / range; // setup a custom rolloff curve Keyframe[] keys = new Keyframe[7]; keys[0] = new Keyframe(0, 1); keys[1] = new Keyframe(min, 1, 0, -0.4f * mult); keys[2] = new Keyframe(min + 0.022f * range, 0.668f, -0.2f * mult, -0.2f * mult); keys[3] = new Keyframe(min + 0.078f * range, 0.359f, -0.05f * mult, -0.05f * mult); keys[4] = new Keyframe(min + 0.292f * range, 0.102f, -0.01f * mult, -0.01f * mult); keys[5] = new Keyframe(min + 0.625f * range, 0.025f, -0.002f * mult, -0.002f * mult); keys[6] = new Keyframe(max, 0); AnimationCurve curve = new AnimationCurve(keys); au.rolloffMode = AudioRolloffMode.Custom; au.SetCustomCurve(AudioSourceCurveType.CustomRolloff, curve); // if we have an onsp component, also configure that ONSPAudioSource oa = sources[0].GetComponent <ONSPAudioSource>(); if (oa) { if (oa.Gain > 10f) { oa.Gain = 10f; } #if VRC_CLIENT // someone mucked with the sdk forced settings, shame on them! if (oa.enabled == false || oa.EnableSpatialization == false) { oa.Gain = 0f; au.volume = 0f; } #else oa.enabled = true; oa.EnableSpatialization = true; #endif oa.UseInvSqr = true; // This is the ENABLED value for OCULUS ATTENUATION oa.EnableRfl = false; if (oa.Near > 2f) { oa.Near = 2f; } if (oa.Far > 30f) { oa.Far = 30f; } oa.VolumetricRadius = 0f; } audioSources.Add(au); if (sources.Length > 1) { Debug.LogError("Disabling extra AudioSources on GameObject(" + child.name + "). Only one is allowed per GameObject."); for (int i = 1; i < sources.Length; i++) { #if VRC_CLIENT sources[i].enabled = false; sources[i].clip = null; #else Object.DestroyImmediate(sources[i]); #endif } } } } return(audioSources); }