| using System; |
| using System.Collections.Generic; |
| using UnityEngine.Audio; |
| #if UNITY_EDITOR |
| using System.ComponentModel; |
| #endif |
| using UnityEngine.Playables; |
|
|
| namespace UnityEngine.Timeline |
| { |
| |
| |
| |
| [Serializable] |
| #if UNITY_EDITOR |
| [DisplayName("Audio Clip")] |
| #endif |
| public class AudioPlayableAsset : PlayableAsset, ITimelineClipAsset |
| { |
| [SerializeField] AudioClip m_Clip; |
| #pragma warning disable 649 //Field is never assigned to and will always have its default value |
| [SerializeField] bool m_Loop; |
| [SerializeField, HideInInspector] float m_bufferingTime = 0.1f; |
| [SerializeField] AudioClipProperties m_ClipProperties = new AudioClipProperties(); |
|
|
| |
| internal float bufferingTime |
| { |
| get { return m_bufferingTime; } |
| set { m_bufferingTime = value; } |
| } |
|
|
| #if UNITY_EDITOR |
| Playable m_LiveClipPlayable = Playable.Null; |
|
|
| #endif |
|
|
| |
| |
| |
| public AudioClip clip |
| { |
| get { return m_Clip; } |
| set { m_Clip = value; } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public bool loop |
| { |
| get { return m_Loop; } |
| set { m_Loop = value; } |
| } |
|
|
| |
| |
| |
| public override double duration |
| { |
| get |
| { |
| if (m_Clip == null) |
| return base.duration; |
|
|
| |
| return (double)m_Clip.samples / m_Clip.frequency; |
| } |
| } |
|
|
| |
| |
| |
| public override IEnumerable<PlayableBinding> outputs |
| { |
| get { yield return AudioPlayableBinding.Create(name, this); } |
| } |
|
|
| |
| |
| |
| |
| |
| |
| public override Playable CreatePlayable(PlayableGraph graph, GameObject go) |
| { |
| if (m_Clip == null) |
| return Playable.Null; |
|
|
| var audioClipPlayable = AudioClipPlayable.Create(graph, m_Clip, m_Loop); |
| audioClipPlayable.GetHandle().SetScriptInstance(m_ClipProperties.Clone()); |
|
|
| #if UNITY_EDITOR |
| m_LiveClipPlayable = audioClipPlayable; |
| #endif |
|
|
| return audioClipPlayable; |
| } |
|
|
| |
| |
| |
| public ClipCaps clipCaps |
| { |
| get |
| { |
| return ClipCaps.ClipIn | |
| ClipCaps.SpeedMultiplier | |
| ClipCaps.Blending | |
| (m_Loop ? ClipCaps.Looping : ClipCaps.None); |
| } |
| } |
|
|
| #if UNITY_EDITOR |
| internal void LiveLink() |
| { |
| if (!m_LiveClipPlayable.IsValid()) |
| return; |
|
|
| var audioMixerProperties = m_LiveClipPlayable.GetHandle().GetObject<AudioClipProperties>(); |
|
|
| if (audioMixerProperties == null) |
| return; |
|
|
| audioMixerProperties.volume = m_ClipProperties.volume; |
| } |
|
|
| #endif |
| } |
| } |
|
|