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