summaryrefslogtreecommitdiff
path: root/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs')
-rw-r--r--Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs84
1 files changed, 84 insertions, 0 deletions
diff --git a/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs
new file mode 100644
index 0000000..553c4d8
--- /dev/null
+++ b/Library/PackageCache/com.unity.timeline@1.2.13/Editor/Audio/AudioPlayableAssetEditor.cs
@@ -0,0 +1,84 @@
+using System.Collections.Generic;
+using JetBrains.Annotations;
+using UnityEngine;
+using UnityEngine.Playables;
+using UnityEngine.Timeline;
+
+namespace UnityEditor.Timeline
+{
+ [CustomTimelineEditor(typeof(AudioPlayableAsset)), UsedImplicitly]
+ class AudioPlayableAssetEditor : ClipEditor
+ {
+ readonly string k_NoClipAssignedError = LocalizationDatabase.GetLocalizedString("No audio clip assigned");
+ readonly Dictionary<TimelineClip, WaveformPreview> m_PersistentPreviews = new Dictionary<TimelineClip, WaveformPreview>();
+ ColorSpace m_ColorSpace = ColorSpace.Uninitialized;
+
+ /// <inheritdoc/>
+ public override ClipDrawOptions GetClipOptions(TimelineClip clip)
+ {
+ var clipOptions = base.GetClipOptions(clip);
+ var audioAsset = clip.asset as AudioPlayableAsset;
+ if (audioAsset != null && audioAsset.clip == null)
+ clipOptions.errorText = k_NoClipAssignedError;
+ return clipOptions;
+ }
+
+ /// <inheritdoc/>
+ public override void DrawBackground(TimelineClip clip, ClipBackgroundRegion region)
+ {
+ if (!TimelineWindow.instance.state.showAudioWaveform)
+ return;
+
+ var rect = region.position;
+ if (rect.width <= 0)
+ return;
+
+ var audioClip = clip.asset as AudioClip;
+ if (audioClip == null)
+ {
+ var audioPlayableAsset = clip.asset as AudioPlayableAsset;
+ if (audioPlayableAsset != null)
+ audioClip = audioPlayableAsset.clip;
+ }
+
+ if (audioClip == null)
+ return;
+
+ var quantizedRect = new Rect(Mathf.Ceil(rect.x), Mathf.Ceil(rect.y), Mathf.Ceil(rect.width), Mathf.Ceil(rect.height));
+ WaveformPreview preview;
+
+ if (QualitySettings.activeColorSpace != m_ColorSpace)
+ {
+ m_ColorSpace = QualitySettings.activeColorSpace;
+ m_PersistentPreviews.Clear();
+ }
+
+ if (!m_PersistentPreviews.TryGetValue(clip, out preview) || audioClip != preview.presentedObject)
+ {
+ preview = m_PersistentPreviews[clip] = WaveformPreviewFactory.Create((int)quantizedRect.width, audioClip);
+ Color waveColour = GammaCorrect(DirectorStyles.Instance.customSkin.colorAudioWaveform);
+ Color transparent = waveColour;
+ transparent.a = 0;
+ preview.backgroundColor = transparent;
+ preview.waveColor = waveColour;
+ preview.SetChannelMode(WaveformPreview.ChannelMode.MonoSum);
+ preview.updated += () => TimelineEditor.Refresh(RefreshReason.WindowNeedsRedraw);
+ }
+
+ preview.looping = clip.SupportsLooping();
+ preview.SetTimeInfo(region.startTime, region.endTime - region.startTime);
+ preview.OptimizeForSize(quantizedRect.size);
+
+ if (Event.current.type == EventType.Repaint)
+ {
+ preview.ApplyModifications();
+ preview.Render(quantizedRect);
+ }
+ }
+
+ static Color GammaCorrect(Color color)
+ {
+ return (QualitySettings.activeColorSpace == ColorSpace.Linear) ? color.gamma : color;
+ }
+ }
+}