Exemple #1
0
        public override void DrawCustomClipBody(ClipDrawData drawData, Rect rect)
        {
            if (!drawData.state.showAudioWaveform)
            {
                return;
            }

            if (rect.width <= 0)
            {
                return;
            }

            var       clip      = drawData.clip;
            AudioClip audioClip = clip.asset as AudioClip;

            if (audioClip == null)
            {
                var audioPlayableAsset = drawData.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;
                k_PersistentPreviews.Clear();
            }

            if (!k_PersistentPreviews.TryGetValue(drawData.clip, out preview) || audioClip != preview.presentedObject)
            {
                preview = k_PersistentPreviews[drawData.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 += drawData.state.editorWindow.Repaint;
            }

            preview.looping = drawData.clip.SupportsLooping();
            preview.SetTimeInfo(drawData.localVisibleStartTime, drawData.localVisibleEndTime - drawData.localVisibleStartTime);
            preview.OptimizeForSize(quantizedRect.size);

            if (Event.current.type == EventType.Repaint)
            {
                preview.ApplyModifications();

                preview.Render(quantizedRect);
            }
        }