/// <summary> /// This method allows you to pause the audio being played by this Variation. This is automatically called by MasterAudio.PauseSoundGroup and MasterAudio.PauseBus. /// </summary> public void Pause() { if (!MasterAudio.Instance.resourceClipsPauseDoNotUnload) { switch (audLocation) { case MasterAudio.AudioLocation.ResourceFile: Stop(); return; case MasterAudio.AudioLocation.Clip: if (!AudioUtil.AudioClipWillPreload(VarAudio.clip)) { Stop(); return; } break; } } VarAudio.Pause(); curFadeMode = FadeMode.None; // 12/26/2016 found the below code to actually mess things up. Taking it out unless we find something it's needed for later. //if (VariationUpdater != null) { // VariationUpdater.StopWaitingForFinish(); // necessary so that the clip can be unpaused. //} }
private void MaybeUnloadClip() { VarAudio.Stop(); VarAudio.time = 0f; switch (audLocation) { case MasterAudio.AudioLocation.ResourceFile: AudioResourceOptimizer.UnloadClipIfUnused(_resFileName); break; case MasterAudio.AudioLocation.Clip: AudioUtil.UnloadNonPreloadedAudioData(VarAudio.clip, GameObj); break; #if ADDRESSABLES_ENABLED case MasterAudio.AudioLocation.Addressable: VarAudio.clip = null; // must clear out clip so it can be released below. AudioAddressableOptimizer.RemoveAddressablePlayingClip(audioClipAddressable, VarAudio, _isWarmingPlay); break; #endif } LoadStatus = MasterAudio.VariationLoadStatus.None; }
/// <summary> /// This method allows you to pause the audio being played by this Variation. This is automatically called by MasterAudio.PauseSoundGroup and MasterAudio.PauseBus. /// </summary> public void Pause() { if (!MasterAudio.Instance.resourceClipsPauseDoNotUnload) { switch (audLocation) { case MasterAudio.AudioLocation.ResourceFile: Stop(); return; case MasterAudio.AudioLocation.Clip: if (!AudioUtil.AudioClipWillPreload(VarAudio.clip)) { Stop(); return; } break; } } _isPaused = true; VarAudio.Pause(); if (VariationUpdater.enabled) { VariationUpdater.Pause(); } curFadeMode = FadeMode.None; curPitchMode = PitchMode.None; }
private void PlaySoundAndWait() { GrpVariation.IsWaitingForDelay = false; if (VarAudio.clip == null) // in case the warming sound is an "internet file" { return; } VarAudio.Play(); if (GrpVariation.useRandomStartTime) { var offset = Random.Range(GrpVariation.randomStartMinPercent, GrpVariation.randomStartMaxPercent) * 0.01f * VarAudio.clip.length; VarAudio.time = offset; } GrpVariation.LastTimePlayed = Time.time; // sound play worked! Duck music if a ducking sound. MasterAudio.DuckSoundGroup(ParentGroup.GameObjectName, VarAudio); _isPlayingBackward = GrpVariation.OriginalPitch < 0; _lastFrameClipTime = _isPlayingBackward ? VarAudio.clip.length + 1 : -1f; _waitMode = WaitForSoundFinishMode.WaitForEnd; }
/// <summary> /// This method allows you to stop the audio being played by this Variation. /// </summary> /// <param name="stopEndDetection">Do not ever pass this in.</param> /// <param name="skipLinked">Do not ever pass this in.</param> public void Stop(bool stopEndDetection = false, bool skipLinked = false) { var waitStopped = false; if (stopEndDetection || _isWaitingForDelay) { if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); // turn off the chain loop endless repeat waitStopped = true; } } if (!skipLinked) { PlayEndLinkedGroups(); } _objectToFollow = null; _objectToTriggerFrom = null; ParentGroup.RemoveActiveAudioSourceId(InstanceId); MasterAudio.StopTrackingOcclusionForSource(GameObj); 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) { var willAbort = _previousSoundFinishedFrame == AudioUtil.FrameCount; _previousSoundFinishedFrame = AudioUtil.FrameCount; if (!willAbort) { SoundFinished(); // parameters aren't used } SoundFinished = null; // clear it out so subscribers don't have to clean up } Trans.localPosition = Vector3.zero; MaybeUnloadClip(); }
private void PlaySoundAndWait() { if (VarAudio.clip == null) // in case the warming sound is an "internet file" { return; } double startTime = AudioSettings.dspTime; if (GrpVariation.PlaySoundParm.TimeToSchedulePlay.HasValue) { startTime = GrpVariation.PlaySoundParm.TimeToSchedulePlay.Value; } var delayTime = 0f; if (GrpVariation.useIntroSilence && GrpVariation.introSilenceMax > 0f) { var rndSilence = Random.Range(GrpVariation.introSilenceMin, GrpVariation.introSilenceMax); delayTime += rndSilence; } delayTime += GrpVariation.PlaySoundParm.DelaySoundTime; if (delayTime > 0f) { startTime += delayTime; } VarAudio.PlayScheduled(startTime); AudioUtil.ClipPlayed(VarAudio.clip, GrpVariation.GameObj); if (GrpVariation.useRandomStartTime) { VarAudio.time = ClipStartPosition; if (!VarAudio.loop) // don't stop it if it's going to loop. { var playableLength = AudioUtil.AdjustAudioClipDurationForPitch(ClipEndPosition - ClipStartPosition, VarAudio); _clipSchedEndTime = startTime + playableLength; VarAudio.SetScheduledEndTime(_clipSchedEndTime.Value); } } GrpVariation.LastTimePlayed = AudioUtil.Time; DuckIfNotSilent(); _isPlayingBackward = GrpVariation.OriginalPitch < 0; _lastFrameClipTime = _isPlayingBackward ? ClipEndPosition + 1 : -1f; _waitMode = WaitForSoundFinishMode.WaitForEnd; }
public void Unpause() { _isPaused = false; if (_clipSchedEndTime.HasValue) { var timePaused = AudioSettings.dspTime - _pauseTime; _clipSchedEndTime += timePaused; VarAudio.SetScheduledEndTime(_clipSchedEndTime.Value); } }
/// <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) { var willAbort = _previousSoundFinishedFrame == Time.frameCount; _previousSoundFinishedFrame = Time.frameCount; if (!willAbort) { SoundFinished(); // parameters aren't used } SoundFinished = null; // clear it out so subscribers don't have to clean up } MaybeUnloadClip(); }
/// <summary> /// This method allows you to pause the audio being played by this Variation. This is automatically called by MasterAudio.PauseSoundGroup and MasterAudio.PauseBus. /// </summary> public void Pause() { if (audLocation == MasterAudio.AudioLocation.ResourceFile && !MasterAudio.Instance.resourceClipsPauseDoNotUnload) { Stop(); return; } VarAudio.Pause(); this.curFadeMode = FadeMode.None; this.curDetectEndMode = DetectEndMode.None; // necessary so that the clip can be unpaused. MaybeUnloadClip(); }
/// <summary> /// This method allows you to pause the audio being played by this Variation. This is automatically called by MasterAudio.PauseSoundGroup and MasterAudio.PauseBus. /// </summary> public void Pause() { if (_audioOriginsThatCanUnload.Contains(audLocation) && !MasterAudio.Instance.resourceClipsPauseDoNotUnload) { Stop(); return; } VarAudio.Pause(); curFadeMode = FadeMode.None; if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); // necessary so that the clip can be unpaused. } }
/// <summary> /// This method allows you to pause the audio being played by this Variation. This is automatically called by MasterAudio.PauseSoundGroup and MasterAudio.PauseBus. /// </summary> public void Pause() { if (audLocation == MasterAudio.AudioLocation.ResourceFile && !MasterAudio.Instance.resourceClipsPauseDoNotUnload) { Stop(); return; } VarAudio.Pause(); curFadeMode = FadeMode.None; if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); // necessary so that the clip can be unpaused. } MaybeUnloadClip(); }
/// <summary> /// This method allows you to unpause the audio being played by this Variation. /// </summary> public void Unpause() { if (!_isPaused) // do not unpause if not paused. { return; } if (!IsPlaying) { return; // do not unpause if not playing (stopped) } _isPaused = false; VarAudio.Play(); if (VariationUpdater != null) { VariationUpdater.enabled = true; VariationUpdater.Unpause(); } }
/// <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 } MaybeUnloadClip(); }
/// <summary> /// This method allows you to stop the audio being played by this Variation. /// </summary> /// <param name="stopEndDetection">Do not ever pass this in.</param> /// <param name="skipLinked">Do not ever pass this in.</param> public void Stop(bool stopEndDetection = false, bool skipLinked = false) { _isPaused = false; var waitStopped = false; if (stopEndDetection) { if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); // turn off the chain loop endless repeat waitStopped = true; } } if (!skipLinked) { PlayEndLinkedGroups(); } _objectToFollow = null; _objectToTriggerFrom = null; VarAudio.pitch = OriginalPitch; ParentGroup.RemoveActiveAudioSourceId(InstanceId); MasterAudio.StopTrackingOcclusionForSource(GameObj); VarAudio.Stop(); VarAudio.time = 0f; if (VariationUpdater != null) { VariationUpdater.StopFollowing(); VariationUpdater.StopFading(); VariationUpdater.StopPitchGliding(); } if (!waitStopped) { if (VariationUpdater != null) { VariationUpdater.StopWaitingForFinish(); } } _playSndParam.IsPlaying = false; if (SoundFinished != null) { var willAbort = _previousSoundFinishedFrame == AudioUtil.FrameCount; _previousSoundFinishedFrame = AudioUtil.FrameCount; if (!willAbort) { SoundFinished(); // parameters aren't used } MaybeCleanupFinishedDelegate(); } Trans.localPosition = Vector3.zero; MaybeUnloadClip(); if (!MasterAudio.IsWarming) // avoids breaking the Variation if warming sound is "Internet file". { DTMonoHelper.SetActive(GameObj, false); } }
private IEnumerator DetectSoundFinished(float delaySound) { if (useIntroSilence && introSilenceMax > 0f) { var rndSilence = UnityEngine.Random.Range(introSilenceMin, introSilenceMax); isWaitingForDelay = true; if (MasterAudio.IgnoreTimeScale) { yield return(StartCoroutine(CoroutineHelper.WaitForActualSeconds(rndSilence))); } else { yield return(new WaitForSeconds(rndSilence)); } isWaitingForDelay = false; } if (delaySound > 0f) { isWaitingForDelay = true; if (MasterAudio.IgnoreTimeScale) { yield return(StartCoroutine(CoroutineHelper.WaitForActualSeconds(delaySound))); } else { yield return(new WaitForSeconds(delaySound)); } isWaitingForDelay = false; } if (curDetectEndMode != DetectEndMode.DetectEnd) { yield break; } VarAudio.Play(); lastTimePlayed = Time.time; // sound play worked! Duck music if a ducking sound. MasterAudio.DuckSoundGroup(ParentGroup.name, VarAudio); var clipLength = Math.Abs(VarAudio.clip.length / VarAudio.pitch); // wait for clip to play if (MasterAudio.IgnoreTimeScale) { yield return(StartCoroutine(CoroutineHelper.WaitForActualSeconds(clipLength))); } else { yield return(new WaitForSeconds(clipLength)); } if (HasActiveFXFilter && fxTailTime > 0f) { if (MasterAudio.IgnoreTimeScale) { yield return(StartCoroutine(CoroutineHelper.WaitForActualSeconds(fxTailTime))); } else { yield return(new WaitForSeconds(fxTailTime)); } } var playSnd = playSndParams; if (curDetectEndMode != DetectEndMode.DetectEnd) { yield break; } if (!VarAudio.loop || (playSndParams != null && playSndParams.isChainLoop)) { Stop(); } if (playSnd != null && playSnd.isChainLoop) { // check if loop count is over. if (ParentGroup.chainLoopMode == MasterAudioGroup.ChainedLoopLoopMode.NumberOfLoops && ParentGroup.ChainLoopCount >= ParentGroup.chainLoopNumLoops) { // done looping yield break; } var rndDelay = playSnd.delaySoundTime; if (ParentGroup.chainLoopDelayMin > 0f || ParentGroup.chainLoopDelayMax > 0f) { rndDelay = UnityEngine.Random.Range(ParentGroup.chainLoopDelayMin, ParentGroup.chainLoopDelayMax); } // cannot use "AndForget" methods! Chain loop needs to check the status. if (playSnd.attachToSource || playSnd.sourceTrans != null) { if (playSnd.attachToSource) { MasterAudio.PlaySound3DFollowTransform(playSnd.soundType, playSnd.sourceTrans, playSnd.volumePercentage, playSnd.pitch, rndDelay, null, true); } else { MasterAudio.PlaySound3DAtTransform(playSnd.soundType, playSnd.sourceTrans, playSnd.volumePercentage, playSnd.pitch, rndDelay, null, true); } } else { MasterAudio.PlaySound(playSnd.soundType, playSnd.volumePercentage, playSnd.pitch, rndDelay, null, true); } } }