private static float Ducking(InAudioBus bus) { //The maximum amount of volume it is being ducked float minDucking = 0; int duckedByCount = bus.DuckedBy.Count; for (int i = 0; i < duckedByCount; i++) { DuckingData ducking = bus.DuckedBy[i]; float ducked = 0; if (!ducking.IsBeingDucked) //Release time { //Release time if (ducking.LastDuckedVolume < 0) { ducked = ducking.LastDuckedVolume; ducked -= Mathf.Lerp(ducking.VolumeDucking, 0, ducked) * Time.deltaTime / ducking.ReleaseTime; ducked = Mathf.Clamp(ducked, ducking.VolumeDucking, 0); minDucking = Mathf.Min(minDucking, ducked); minDucking = (1.0f - Curves.CumulativeDistribution(Fader.GetT(ducking.VolumeDucking, 0, minDucking))) * ducking.VolumeDucking; minDucking = Mathf.Clamp(minDucking, ducking.VolumeDucking, 0); } //else //Do nothing as then the amount ducked is zero } else if (ducking.AttackTime > 0 && ducking.LastDuckedVolume > ducking.VolumeDucking) //Attack time { ducked = ducking.LastDuckedVolume; ducked += ducking.VolumeDucking * Time.deltaTime / ducking.AttackTime; ducked = Mathf.Clamp(ducked, ducking.VolumeDucking, 0); minDucking = Mathf.Min(minDucking, ducked); } else { minDucking = Mathf.Min(minDucking, ducking.VolumeDucking); ducked = ducking.VolumeDucking; } ducking.LastDuckedVolume = ducked; //Util.Debug.Graph("Ducked volume", minDucking); } bus.LastDuckedVolume = minDucking; return(minDucking); }