46 lines
1.4 KiB
C#
46 lines
1.4 KiB
C#
|
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<AudioMixerPlayable>())
|
||
|
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<AudioClipPlayable>())
|
||
|
{
|
||
|
var audioClipPlayable = (AudioClipPlayable)input;
|
||
|
var audioClipProperties = input.GetHandle().GetObject<AudioClipProperties>();
|
||
|
|
||
|
audioClipPlayable.SetVolume(Mathf.Clamp01(volume * audioClipProperties.volume));
|
||
|
audioClipPlayable.SetStereoPan(Mathf.Clamp(stereoPan, -1.0f, 1.0f));
|
||
|
audioClipPlayable.SetSpatialBlend(Mathf.Clamp01(spatialBlend));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|