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