Esempio n. 1
0
        private void DrawEditGUI()
        {
            EditorGUILayout.LabelField("Sample Rate", _wavClip.frequency + " Hz");
            using (var changeCheck = new EditorGUI.ChangeCheckScope())
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.Label("Display time in", GUILayout.Width(145));
                    _useSeconds = GUILayout.Toolbar(_useSeconds ? 1 : 0, new[] { "Samples", "Minutes:Seconds" },
                                                    GUILayout.MaxWidth(250)) == 1;
                }

                if (changeCheck.changed)
                {
                    // Avoid that a text field is focused when switching since it wouldn't update
                    GUI.FocusControl(null);
                }
            }

            EditorGUILayout.Separator();

            if (_wavData.Loops.Count > 1)
            {
                EditorGUILayout.HelpBox(
                    "The loaded WAV file contains multiple loops. Unity seems to ignore every loop except the first one. " +
                    "Reverse or ping-pong loops are also treated like forward loops.",
                    MessageType.Warning);
            }

            if (_wavData.Loops.Count > 0)
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    GUILayout.Label("Start", GUILayout.MaxWidth(180));
                    GUILayout.Label("End", GUILayout.MaxWidth(180));
                    GUILayout.Label(" ", GUILayout.Width(70));
                }
            }
            else
            {
                GUILayout.Label("This file does not contain any custom loops, so it will loop from start to finish.");
            }

            Loop loopToRemove = null;

            foreach (var loop in _wavData.Loops)
            {
                using (new EditorGUILayout.HorizontalScope())
                {
                    if (_useSeconds)
                    {
                        float startSeconds = SamplesToSeconds(loop.StartSample);
                        float endSeconds   = SamplesToSeconds(loop.EndSample);

                        string startTime = SecondsToDurationString(startSeconds);
                        string endTime   = SecondsToDurationString(endSeconds);

                        startTime = EditorGUILayout.TextField(startTime, GUILayout.MaxWidth(180));
                        endTime   = EditorGUILayout.TextField(endTime, GUILayout.MaxWidth(180));

                        startSeconds = DurationStringToSeconds(startTime, startSeconds);
                        endSeconds   = DurationStringToSeconds(endTime, endSeconds);

                        loop.StartSample = SecondsToSamples(startSeconds);
                        loop.EndSample   = SecondsToSamples(endSeconds);
                    }
                    else
                    {
                        loop.StartSample = EditorGUILayout.LongField(loop.StartSample, GUILayout.MaxWidth(180));
                        loop.EndSample   = EditorGUILayout.LongField(loop.EndSample, GUILayout.MaxWidth(180));
                    }

                    loop.StartSample = Math.Min(_wavClip.samples, loop.StartSample);
                    loop.EndSample   = Math.Min(_wavClip.samples, loop.EndSample);

                    if (GUILayout.Button("Remove Loop", GUILayout.Width(110)))
                    {
                        loopToRemove = loop;
                    }
                }
            }

            if (loopToRemove != null)
            {
                _wavData.RemoveLoop(loopToRemove);
            }

            if (_wavData.Loops.Count <= 0 && GUILayout.Button("Add Custom Loop", GUILayout.Width(140)))
            {
                _wavData.AddLoop(new Loop
                {
                    StartSample = 0,
                    EndSample   = _wavClip.samples
                });
            }
        }