public override void OnPreviewGUI(Rect r, GUIStyle background) { if (s_DefaultIcon == null) { Init(); } AudioClip clip = target as AudioClip; Event evt = Event.current; if (evt.type != EventType.Repaint && evt.type != EventType.Layout && evt.type != EventType.Used) { switch (evt.type) { case EventType.MouseDrag: case EventType.MouseDown: { if (r.Contains(evt.mousePosition)) { var startSample = (int)(evt.mousePosition.x * (AudioUtil.GetSampleCount(clip) / (int)r.width)); if (!AudioUtil.IsPreviewClipPlaying() || clip != m_Clip) { PlayClip(clip, startSample, s_Loop); } else { AudioUtil.SetPreviewClipSamplePosition(clip, startSample); } evt.Use(); } } break; } return; } if (Event.current.type == EventType.Repaint) { background.Draw(r, false, false, false, false); } int c = AudioUtil.GetChannelCount(clip); s_WantedRect = new Rect(r.x, r.y, r.width, r.height); float sec2px = ((float)s_WantedRect.width / clip.length); bool previewAble = AudioUtil.HasPreview(clip) || !(AudioUtil.IsTrackerFile(clip)); if (!previewAble) { float labelY = (r.height > 150) ? r.y + (r.height / 2) - 10 : r.y + (r.height / 2) - 25; if (r.width > 64) { if (AudioUtil.IsTrackerFile(clip)) { EditorGUI.DropShadowLabel(new Rect(r.x, labelY, r.width, 20), string.Format("Module file with " + AudioUtil.GetMusicChannelCount(clip) + " channels.")); } else { EditorGUI.DropShadowLabel(new Rect(r.x, labelY, r.width, 20), "Can not show PCM data for this file"); } } if (m_Clip == clip) { float t = AudioUtil.GetPreviewClipPosition(); System.TimeSpan ts = new System.TimeSpan(0, 0, 0, 0, (int)(t * 1000.0f)); EditorGUI.DropShadowLabel(new Rect(s_WantedRect.x, s_WantedRect.y, s_WantedRect.width, 20), string.Format("Playing - {0:00}:{1:00}.{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); } } else { PreviewGUI.BeginScrollView(s_WantedRect, m_Position, s_WantedRect, "PreHorizontalScrollbar", "PreHorizontalScrollbarThumb"); if (Event.current.type == EventType.Repaint) { DoRenderPreview(true, clip, AudioUtil.GetImporterFromClip(clip), s_WantedRect, 1.0f); } for (int i = 0; i < c; ++i) { if (c > 1 && r.width > 64) { var labelRect = new Rect(s_WantedRect.x + 5, s_WantedRect.y + (s_WantedRect.height / c) * i, 30, 20); EditorGUI.DropShadowLabel(labelRect, "ch " + (i + 1)); } } if (m_Clip == clip) { float t = AudioUtil.GetPreviewClipPosition(); System.TimeSpan ts = new System.TimeSpan(0, 0, 0, 0, (int)(t * 1000.0f)); GUI.DrawTexture(new Rect(s_WantedRect.x + (int)(sec2px * t), s_WantedRect.y, 2, s_WantedRect.height), EditorGUIUtility.whiteTexture); if (r.width > 64) { EditorGUI.DropShadowLabel(new Rect(s_WantedRect.x, s_WantedRect.y, s_WantedRect.width, 20), string.Format("{0:00}:{1:00}.{2:000}", ts.Minutes, ts.Seconds, ts.Milliseconds)); } else { EditorGUI.DropShadowLabel(new Rect(s_WantedRect.x, s_WantedRect.y, s_WantedRect.width, 20), string.Format("{0:00}:{1:00}", ts.Minutes, ts.Seconds)); } } PreviewGUI.EndScrollView(); } if (!m_MultiEditing && (s_PlayFirst || (s_AutoPlay && m_Clip != clip))) { // Autoplay preview PlayClip(clip, 0, s_Loop); s_PlayFirst = false; } // force update GUI if (playing) { GUIView.current.Repaint(); } }