Example #1
0
        /// <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;
        }
Example #3
0
        /// <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;
        }
Example #5
0
        /// <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();
    }
Example #10
0
        /// <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();
        }
Example #12
0
        /// <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();
    }
Example #14
0
        /// <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);
            }
        }
    }