diff --git a/Prefab/VA.prefab b/Prefab/VA.prefab new file mode 100644 index 0000000000000000000000000000000000000000..373a6f259c50c9e96da9776401502e62f985593f Binary files /dev/null and b/Prefab/VA.prefab differ diff --git a/Prefab/[CameraRig].prefab b/Prefab/[CameraRig].prefab new file mode 100644 index 0000000000000000000000000000000000000000..e5912494f4b914f1584a37dd1c1ca44faa060aca Binary files /dev/null and b/Prefab/[CameraRig].prefab differ diff --git a/VAUListener.cs b/VAUListener.cs index fa4beeb8473991cc3ab7d035797803269f8e519c..c9cd175d164c208fe5c7a1f4be29ed691e14af91 100644 --- a/VAUListener.cs +++ b/VAUListener.cs @@ -1,5 +1,5 @@ using UnityEngine; -using System; +using System.Linq; using System.Collections; using VA; @@ -14,8 +14,8 @@ public class VAUListener : MonoBehaviour { private Quaternion q; private Transform t; private AudioReverbZone[] reverbZones; - private AudioReverbZone[] shadowReverbZones; - private double currentArtificialReverberationTime = 1; + private float currentArtificialReverberationTime = 0f; + private float shadowReverbTime; public int ID { @@ -35,7 +35,8 @@ public class VAUListener : MonoBehaviour { Debug.Log("[VAU]" + listenername + " created"); _VA.SetListenerHRIRDataset(Listener, VAUAdapter.DefaultHRIR); SetListenerPositionOrientation(); - _VA.SetArtificalReverbarationTime(VAAudioRenderer, 2); + _VA.SetArtificalReverbarationTime(VAAudioRenderer, 2.0f); + reverbZones = FindObjectsOfType(typeof(AudioReverbZone)) as AudioReverbZone[]; } void OnEnable() @@ -66,42 +67,39 @@ public class VAUListener : MonoBehaviour { void SetActiveReverbZones() { - double actReverbTime = currentArtificialReverberationTime; - reverbZones = FindObjectsOfType(typeof(AudioReverbZone)) as AudioReverbZone[]; - if (reverbZones == shadowReverbZones) - return; - if (reverbZones == null) - { - if (actReverbTime != currentArtificialReverberationTime) - _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime); return; - } - shadowReverbZones = reverbZones; + float actReverbTime = 0f; int i = 0; foreach (AudioReverbZone reverbZone in reverbZones) { - float actdistance = Vector3.Distance(reverbZone.transform.position, gameObject.transform.position); - if (actdistance < reverbZone.maxDistance) + if (i >= maxreverbZones) + break; + float actDistance = Vector3.Distance(reverbZone.transform.position, gameObject.transform.position); + if ((actDistance < reverbZone.maxDistance)) { - if (i <= maxreverbZones) + if (actDistance > reverbZone.minDistance) { - actReverbTime += reverbZone.decayTime; - i++; + actReverbTime += reverbZone.decayTime * (actDistance - reverbZone.minDistance) / (reverbZone.maxDistance - reverbZone.minDistance); } - if (actdistance > reverbZone.minDistance) + else { - + actReverbTime += reverbZone.decayTime; } + i++; } } + if (shadowReverbTime == actReverbTime) + return; + + shadowReverbTime = actReverbTime; - if ( i > 0) + if (i > 0) actReverbTime /= i; + + _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime); - if( actReverbTime != currentArtificialReverberationTime) - _VA.SetArtificalReverbarationTime(VAAudioRenderer, actReverbTime); } void OnListenerAuralizationModeChanged(string AuraMode)