public void DrawAudioPlayer()
        {
            if (clipEditor == null || clipEditor.target != clip.clip)
            {
                clipEditor = Editor.CreateEditor(clip.clip);
            }

            //Get playing clip data
            if (clipPlaying)
            {
                clipPlaying = AudioPreview.IsClipPlaying(clip.clip);
                int sample = AudioPreview.GetClipSamplePosition(clip.clip);
                clipTime = sample / (float)clip.clip.samples;
            }

            //Preview toolbar
            GUILayout.BeginHorizontal(EditorStyles.toolbar);
            GUILayout.Space(-4);

            if (!clipPlaying)
            {
                if (GUILayout.Button("Play", EditorStyles.toolbarButton))
                {
                    int sample = Mathf.RoundToInt(clipTime * clip.clip.samples);
                    AudioPreview.PlayClip(clip.clip, sample);
                    AudioPreview.SetClipSamplePosition(clip.clip, sample);
                    clipPlaying = true;
                }
            }
            else
            {
                if (GUILayout.Button("Stop", EditorStyles.toolbarButton))
                {
                    AudioPreview.StopClip(clip.clip);
                    clipPlaying = false;
                }
            }

            GUILayout.FlexibleSpace();

            //Draw clip length label
            float clipLength = clip.clip.length * 1000;

            GUILayout.Label((clipTime * clipLength).ToString("0:00:000") + " / " + clipLength.ToString("0:00:000"));

            GUILayout.EndHorizontal();
            GUILayout.Space(10);


            //Get preview area rect
            Rect rect = GUILayoutUtility.GetRect(Screen.width, 100);


            //Set time by click or drag in preview area
            Event e = Event.current;

            if ((e.type == EventType.MouseDrag || e.type == EventType.MouseDown) && rect.Contains(e.mousePosition))
            {
                //Snap
                Vector2 mousePos = Event.current.mousePosition;
                if (mousePos.x - rect.x < 10)
                {
                    mousePos.x = rect.x;
                }

                clipTime = Rect.PointToNormalized(rect, mousePos).x;
                int sample = Mathf.RoundToInt(clipTime * clip.clip.samples);
                Repaint();
            }


            //Play-Pause by space
            if (e.type == EventType.KeyDown && e.keyCode == KeyCode.Space)
            {
                if (clipPlaying)
                {
                    AudioPreview.StopClip(clip.clip);
                    clipPlaying = false;
                }
                else
                {
                    int sample = Mathf.RoundToInt(clipTime * clip.clip.samples);
                    AudioPreview.PlayClip(clip.clip, sample);
                    AudioPreview.SetClipSamplePosition(clip.clip, sample);
                    clipPlaying = true;
                }
                e.Use();
            }


            //Block native preview interactions
            if (e.type != EventType.Repaint && e.type != EventType.Layout && rect.Contains(e.mousePosition))
            {
                e.Use();
            }


            //Draw clip spectrum
            EditorGUI.DrawRect(rect, Color.black);
            rect = rect.Shrink(1);
            EditorGUI.DrawRect(rect, new Color(0.3f, 0.3f, 0.3f, 1.0f));
            clipEditor.OnPreviewGUI(rect, GUIStyle.none);


            //Draw progress bar
            rect.Set(rect.x + rect.width * clipTime, rect.y, 2, rect.height);
            EditorGUI.DrawRect(rect, Color.white);
        }