private void FinishSetupToPlay(float maxVolume) { //Debug.Log("finishing setup"); timesLocationUpdated = 0; if (!_audio.isPlaying && _audio.time > 0f) { // paused. Do nothing except Play } else if (useFades && (fadeInTime > 0f || fadeOutTime > 0f)) { fadeMaxVolume = maxVolume; _audio.volume = 0f; StartCoroutine(FadeInOut()); } if (playSndParams != null && playSndParams.isChainLoop) { _audio.loop = false; } ParentGroup.AddActiveAudioSourceId(this); StartCoroutine(DetectSoundFinished(playSndParams.delaySoundTime)); attachToSource = false; bool useClipAgePriority = MasterAudio.Instance.prioritizeOnDistance && (MasterAudio.Instance.useClipAgePriority || ParentGroup.useClipAgePriority); if (playSndParams.attachToSource || useClipAgePriority) { attachToSource = playSndParams.attachToSource; if (ObjectToFollow != null && ObjectToFollow.root.GetInstanceID() == MasterAudio.ListenerID) { AudioUpdater updater = gameObject.AddComponent <AudioUpdater>(); updater.FollowTransform = ObjectToFollow; attachToSource = false; // Do not modify playParams as the sound group may contain more variations ObjectToFollow = null; } StartCoroutine(FollowSoundMaker()); } }
/// <summary> /// This method allows you to stop the audio being played by this Variation. /// </summary> public void Stop(bool stopEndDetection = false) { if (stopEndDetection || isWaitingForDelay) { curDetectEndMode = DetectEndMode.None; // turn off the chain loop endless repeat } objectToFollow = null; objectToTriggerFrom = null; ParentGroup.RemoveActiveAudioSourceId(InstanceId); VarAudio.Stop(); VarAudio.time = 0f; playSndParams = null; if (SoundFinished != null) { SoundFinished(); // parameters aren't used SoundFinished = null; // clear it out so subscribers don't have to clean up } if (_updater != null) { GameObject.Destroy(_updater); _updater = null; } MaybeUnloadClip(); }
public void FinishSetupToPlay() { timesLocationUpdated = 0; if (!VarAudio.isPlaying && VarAudio.time > 0f) { // paused. Do nothing except Play } else if (useFades && (fadeInTime > 0f || fadeOutTime > 0f)) { fadeMaxVolume = _maxVol; VarAudio.volume = 0f; StartCoroutine(FadeInOut()); } VarAudio.loop = this.audioLoops; // restore original loop setting in case it got lost by loop setting code below for a previous play. if (playSndParams != null && (playSndParams.isChainLoop || playSndParams.isSingleSubscribedPlay)) { VarAudio.loop = false; } if (playSndParams == null) { return; // has already been "stop" 'd. } ParentGroup.AddActiveAudioSourceId(InstanceId); StartCoroutine(DetectSoundFinished(playSndParams.delaySoundTime)); attachToSource = false; bool useClipAgePriority = MasterAudio.Instance.prioritizeOnDistance && (MasterAudio.Instance.useClipAgePriority || ParentGroup.useClipAgePriority); if (playSndParams.attachToSource || useClipAgePriority) { attachToSource = playSndParams.attachToSource; if (ObjectToFollow != null) { if (ObjectToFollow.root.GetInstanceID() == MasterAudio.ListenerID) { _updater = _go.GetComponent<AudioUpdater>() ?? _go.AddComponent<AudioUpdater>(); _updater.FollowTransform = ObjectToFollow; attachToSource = false; // Do not modify playParams as the sound group may contain more variations ObjectToFollow = null; } } StartCoroutine(FollowSoundMaker()); } }
private void FinishSetupToPlay() { if (!VarAudio.isPlaying && VarAudio.time > 0f) { // paused. Do nothing except Play } else if (useFades && (fadeInTime > 0f || fadeOutTime > 0f)) { fadeMaxVolume = _maxVol; VarAudio.volume = 0f; if (VariationUpdater != null) { VariationUpdater.enabled = true; VariationUpdater.FadeInOut(); } } VarAudio.loop = this.AudioLoops; // restore original loop setting in case it got lost by loop setting code below for a previous play. if (playSndParam.isPlaying && (playSndParam.isChainLoop || playSndParam.isSingleSubscribedPlay)) { VarAudio.loop = false; } if (!playSndParam.isPlaying) { return; // has already been "stop" 'd. } ParentGroup.AddActiveAudioSourceId(InstanceId); if (VariationUpdater != null) { VariationUpdater.enabled = true; VariationUpdater.WaitForSoundFinish(playSndParam.delaySoundTime); } attachToSource = false; bool useClipAgePriority = MasterAudio.Instance.prioritizeOnDistance && (MasterAudio.Instance.useClipAgePriority || ParentGroup.useClipAgePriority); if (playSndParam.attachToSource || useClipAgePriority) { attachToSource = playSndParam.attachToSource; if (ObjectToFollow != null) { if (ObjectToFollow.root.GetInstanceID() == MasterAudio.ListenerID) { _updater = GameObj.GetComponent<AudioUpdater>() ?? GameObj.AddComponent<AudioUpdater>(); _updater.FollowTransform = ObjectToFollow; attachToSource = false; // Do not modify playParams as the sound group may contain more variations ObjectToFollow = null; } } if (VariationUpdater != null) { VariationUpdater.FollowObject(attachToSource, ObjectToFollow, useClipAgePriority); } } }
/// <summary> /// This method allows you to stop the audio being played by this Variation. /// </summary> public void Stop(bool stopEndDetection = false) { var waitStopped = false; if (stopEndDetection || isWaitingForDelay) { if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); // turn off the chain loop endless repeat waitStopped = true; } } objectToFollow = null; objectToTriggerFrom = null; ParentGroup.RemoveActiveAudioSourceId(InstanceId); VarAudio.Stop(); VarAudio.time = 0f; if (VariationUpdater != null) { VariationUpdater.StopFollowing(); VariationUpdater.StopFading(); } if (!waitStopped) { if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); } } playSndParam.isPlaying = false; if (SoundFinished != null) { SoundFinished(); // parameters aren't used SoundFinished = null; // clear it out so subscribers don't have to clean up } if (_updater != null) { GameObject.Destroy(_updater); _updater = null; } MaybeUnloadClip(); }