public static void DrawWaveformPreview(WaveformPreview preview, Rect rect)
 {
     if (preview != null)
     {
         preview.ApplyModifications();
         preview.Render(rect);
     }
 }
        static WaveformPreview CreateWaveformPreview(AudioClip audioClip, Rect quantizedRect)
        {
            WaveformPreview preview     = 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);
            return(preview);
        }
 protected override void DrawCustomClipBody(TrackDrawer.ClipDrawData drawData, Rect rect)
 {
     if (drawData.state.showAudioWaveform)
     {
         if (rect.get_width() > 0f)
         {
             TimelineClip clip      = drawData.clip;
             AudioClip    audioClip = clip.asset as AudioClip;
             if (audioClip == null)
             {
                 AudioPlayableAsset audioPlayableAsset = drawData.clip.asset as AudioPlayableAsset;
                 if (audioPlayableAsset != null)
                 {
                     audioClip = audioPlayableAsset.clip;
                 }
                 if (audioClip == null)
                 {
                     return;
                 }
             }
             Rect            rect2 = new Rect(Mathf.Ceil(rect.get_x()), Mathf.Ceil(rect.get_y()), Mathf.Ceil(rect.get_width()), Mathf.Ceil(rect.get_height()));
             WaveformPreview waveformPreview;
             if (!AudioTrackDrawer.s_PersistentPreviews.TryGetValue(drawData.clip, out waveformPreview) || audioClip != waveformPreview.presentedObject)
             {
                 WaveformPreview waveformPreview2 = WaveformPreviewFactory.Create((int)rect2.get_width(), audioClip);
                 AudioTrackDrawer.s_PersistentPreviews[drawData.clip] = waveformPreview2;
                 waveformPreview = waveformPreview2;
                 Color colorAudioWaveform = DirectorStyles.Instance.customSkin.colorAudioWaveform;
                 Color backgroundColor    = colorAudioWaveform;
                 backgroundColor.a = 0f;
                 waveformPreview.set_backgroundColor(backgroundColor);
                 waveformPreview.set_waveColor(colorAudioWaveform);
                 waveformPreview.SetChannelMode(0);
                 waveformPreview.add_updated(new Action(drawData.state.editorWindow.Repaint));
             }
             waveformPreview.set_looping(drawData.clip.SupportsLooping());
             waveformPreview.SetTimeInfo(drawData.localVisibleStartTime, drawData.localVisibleEndTime - drawData.localVisibleStartTime);
             waveformPreview.OptimizeForSize(rect2.get_size());
             if (Event.get_current().get_type() == 7)
             {
                 waveformPreview.ApplyModifications();
                 waveformPreview.Render(rect2);
             }
         }
     }
 }
        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 = GetOrCreateWaveformPreview(clip, audioClip, quantizedRect, region.startTime, region.endTime);

            if (Event.current.type == EventType.Repaint)
            {
                DrawWaveformPreview(preview, quantizedRect);
            }
        }