using System; using UnityEngine.Audio; using UnityEngine.Playables; namespace UnityEngine.Timeline { [Serializable] class AudioMixerProperties : PlayableBehaviour { [Range(0.0f, 1.0f)] public float volume = 1.0f; [Range(-1.0f, 1.0f)] public float stereoPan = 0.0f; [Range(0.0f, 1.0f)] public float spatialBlend = 0.0f; public override void PrepareFrame(Playable playable, FrameData info) { if (!playable.IsValid() || !playable.IsPlayableOfType()) return; var inputCount = playable.GetInputCount(); for (int i = 0; i < inputCount; ++i) { if (playable.GetInputWeight(i) > 0.0f) { var input = playable.GetInput(i); if (input.IsValid() && input.IsPlayableOfType()) { var audioClipPlayable = (AudioClipPlayable)input; var audioClipProperties = input.GetHandle().GetObject(); audioClipPlayable.SetVolume(Mathf.Clamp01(volume * audioClipProperties.volume)); audioClipPlayable.SetStereoPan(Mathf.Clamp(stereoPan, -1.0f, 1.0f)); audioClipPlayable.SetSpatialBlend(Mathf.Clamp01(spatialBlend)); } } } } } }