예제 #1
0
    private void DrawButton(Rect position, SerializedProperty prop)
    {
        if (prop.objectReferenceValue != null)
        {
            position.x -= 4;
            AudioClip clip = prop.objectReferenceValue as AudioClip;

            Rect buttonRect = new Rect(position);
            buttonRect.width = 20;

            Rect waveformRect = new Rect(position);
            waveformRect.x     += 22;
            waveformRect.width -= 22;
            Texture2D waveformTexture = AssetPreview.GetAssetPreview(prop.objectReferenceValue);
            if (waveformTexture != null)
            {
                GUI.DrawTexture(waveformRect, waveformTexture);
            }

            bool   isPlaying  = AudioUtility.IsClipPlaying(clip) && (CurrentClip == prop.propertyPath);
            string buttonText = "";
            Action <SerializedProperty, AudioClip> buttonAction;
            if (isPlaying)
            {
                EditorUtility.SetDirty(prop.serializedObject.targetObject);
                buttonAction = GetStateInfo(ButtonState.Stop, out buttonText);

                Rect  progressRect = new Rect(waveformRect);
                float percentage   = (float)AudioUtility.GetClipSamplePosition(clip) / AudioUtility.GetSampleCount(clip);
                float width        = progressRect.width * percentage;
                progressRect.width = Mathf.Clamp(width, 6, width);
                GUI.Box(progressRect, "", "SelectionRect");
            }
            else
            {
                buttonAction = GetStateInfo(ButtonState.Play, out buttonText);
            }

            if (GUI.Button(buttonRect, buttonText))
            {
                AudioUtility.StopAllClips();
                buttonAction(prop, clip);
            }
        }
    }
예제 #2
0
    private bool ToggleClip()
    {
        _isPlaying = !_isPlaying;
        if (_isPlaying)
        {
            if (_currentSample == 0)
            {
                AudioUtility.PlayClip(audioClip, 0, _isLooping);
            }
            else
            {
                ResumeClip();
            }
        }
        else
        {
            _currentSample = AudioUtility.GetClipSamplePosition(audioClip);
            AudioUtility.PauseClip(audioClip);
        }

        return(_isPlaying);
    }
예제 #3
0
 private void Update()
 {
     if (_isPlaying)
     {
         if (AudioUtility.IsClipPlaying(audioClip))
         {
             if (_timeSinceRepaint > 1 / _timnelineRepaintFrequency)
             {
                 _currentSample = AudioUtility.GetClipSamplePosition(audioClip);
                 Repaint();
                 _timeSinceRepaint = 0;
             }
             else
             {
                 _timeSinceRepaint += Time.deltaTime;
             }
         }
         else
         {
             StopClip();
         }
     }
 }