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));
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |