Exemplo n.º 1
0
 /// <summary>
 /// Stops all sounds on a track
 /// </summary>
 /// <param name="track"></param>
 public virtual void StopTrack(MMSoundManagerTracks track)
 {
     foreach (MMSoundManagerSound sound in _sounds)
     {
         if (sound.Track == track)
         {
             sound.Source.Stop();
         }
     }
 }
Exemplo n.º 2
0
 /// <summary>
 /// Stops all sounds on a track, and returns them to the pool
 /// </summary>
 /// <param name="track"></param>
 public virtual void FreeTrack(MMSoundManagerTracks track)
 {
     foreach (MMSoundManagerSound sound in _sounds)
     {
         if (sound.Track == track)
         {
             sound.Source.Stop();
             sound.Source.gameObject.SetActive(false);
         }
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// Returns true if sounds are currently playing on that track
 /// </summary>
 /// <param name="track"></param>
 public virtual bool HasSoundsPlaying(MMSoundManagerTracks track)
 {
     foreach (MMSoundManagerSound sound in _sounds)
     {
         if ((sound.Track == track) && (sound.Source.isPlaying))
         {
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 4
0
        /// <summary>
        /// Mutes all sounds on the specified track after an optional delay
        /// </summary>
        /// <param name="track"></param>
        /// <param name="mute"></param>
        /// <param name="delay"></param>
        /// <returns></returns>
        protected virtual IEnumerator MuteSoundsOnTrackCoroutine(MMSoundManagerTracks track, bool mute, float delay)
        {
            if (delay > 0)
            {
                yield return(MMCoroutine.WaitForUnscaled(delay));
            }

            foreach (MMSoundManagerSound sound in _sounds)
            {
                if (sound.Track == track)
                {
                    sound.Source.mute = mute;
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Returns the current volume of a track
        /// </summary>
        /// <param name="track"></param>
        /// <param name="volume"></param>
        public virtual float GetTrackVolume(MMSoundManagerTracks track, bool mutedVolume)
        {
            switch (track)
            {
            case MMSoundManagerTracks.Master:
                if (mutedVolume)
                {
                    return(settingsSo.Settings.MutedMasterVolume);
                }
                else
                {
                    return(settingsSo.Settings.MasterVolume);
                }

            case MMSoundManagerTracks.Music:
                if (mutedVolume)
                {
                    return(settingsSo.Settings.MutedMusicVolume);
                }
                else
                {
                    return(settingsSo.Settings.MusicVolume);
                }

            case MMSoundManagerTracks.Sfx:
                if (mutedVolume)
                {
                    return(settingsSo.Settings.MutedSfxVolume);
                }
                else
                {
                    return(settingsSo.Settings.SfxVolume);
                }

            case MMSoundManagerTracks.UI:
                if (mutedVolume)
                {
                    return(settingsSo.Settings.MutedUIVolume);
                }
                else
                {
                    return(settingsSo.Settings.UIVolume);
                }
            }

            return(1f);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Fades an entire track over time
        /// </summary>
        /// <param name="track"></param>
        /// <param name="duration"></param>
        /// <param name="initialVolume"></param>
        /// <param name="finalVolume"></param>
        /// <param name="tweenType"></param>
        /// <returns></returns>
        protected virtual IEnumerator FadeTrackCoroutine(MMSoundManagerTracks track, float duration, float initialVolume, float finalVolume, MMTweenType tweenType)
        {
            float startedAt = Time.unscaledTime;

            if (tweenType == null)
            {
                tweenType = new MMTweenType(MMTween.MMTweenCurve.EaseInOutQuartic);
            }
            while (Time.unscaledTime - startedAt <= duration)
            {
                float elapsedTime = Time.unscaledTime - startedAt;
                float newVolume   = MMTween.Tween(elapsedTime, 0f, duration, initialVolume, finalVolume, tweenType);
                settingsSo.SetTrackVolume(track, newVolume);
                yield return(null);
            }
            settingsSo.SetTrackVolume(track, finalVolume);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Returns true if the specified track is muted, false otherwise
        /// </summary>
        /// <param name="track"></param>
        /// <returns></returns>
        public virtual bool IsMuted(MMSoundManagerTracks track)
        {
            switch (track)
            {
            case MMSoundManagerTracks.Master:
                return(settingsSo.Settings.MasterOn);

            case MMSoundManagerTracks.Music:
                return(settingsSo.Settings.MusicOn);

            case MMSoundManagerTracks.Sfx:
                return(settingsSo.Settings.SfxOn);

            case MMSoundManagerTracks.UI:
                return(settingsSo.Settings.UIOn);
            }
            return(false);
        }
Exemplo n.º 8
0
 /// <summary>
 /// Mutes all sounds playing on a specific track
 /// </summary>
 /// <param name="track"></param>
 /// <param name="mute"></param>
 /// <param name="delay"></param>
 public virtual void MuteSoundsOnTrack(MMSoundManagerTracks track, bool mute, float delay = 0f)
 {
     StartCoroutine(MuteSoundsOnTrackCoroutine(track, mute, delay));
 }
Exemplo n.º 9
0
 /// <summary>
 /// Fades an entire track over the specified duration towards the desired finalVolume
 /// </summary>
 /// <param name="track"></param>
 /// <param name="duration"></param>
 /// <param name="initialVolume"></param>
 /// <param name="finalVolume"></param>
 /// <param name="tweenType"></param>
 public virtual void FadeTrack(MMSoundManagerTracks track, float duration, float initialVolume = 0f, float finalVolume = 1f, MMTweenType tweenType = null)
 {
     StartCoroutine(FadeTrackCoroutine(track, duration, initialVolume, finalVolume, tweenType));
 }
Exemplo n.º 10
0
        protected virtual void ControlTrack(MMSoundManagerTracks track, ControlTrackModes trackMode, float volume = 0.5f)
        {
            string target      = "";
            float  savedVolume = 0f;

            switch (track)
            {
            case MMSoundManagerTracks.Master:
                target = settingsSo.Settings.MasterVolumeParameter;
                if (trackMode == ControlTrackModes.Mute)
                {
                    settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedMasterVolume); settingsSo.Settings.MasterOn = false;
                }
                else if (trackMode == ControlTrackModes.Unmute)
                {
                    savedVolume = settingsSo.Settings.MutedMasterVolume; settingsSo.Settings.MasterOn = true;
                }
                break;

            case MMSoundManagerTracks.Music:
                target = settingsSo.Settings.MusicVolumeParameter;
                if (trackMode == ControlTrackModes.Mute)
                {
                    settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedMusicVolume);  settingsSo.Settings.MusicOn = false;
                }
                else if (trackMode == ControlTrackModes.Unmute)
                {
                    savedVolume = settingsSo.Settings.MutedMusicVolume;  settingsSo.Settings.MusicOn = true;
                }
                break;

            case MMSoundManagerTracks.Sfx:
                target = settingsSo.Settings.SfxVolumeParameter;
                if (trackMode == ControlTrackModes.Mute)
                {
                    settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedSfxVolume);  settingsSo.Settings.SfxOn = false;
                }
                else if (trackMode == ControlTrackModes.Unmute)
                {
                    savedVolume = settingsSo.Settings.MutedSfxVolume;  settingsSo.Settings.SfxOn = true;
                }
                break;

            case MMSoundManagerTracks.UI:
                target = settingsSo.Settings.UIVolumeParameter;
                if (trackMode == ControlTrackModes.Mute)
                {
                    settingsSo.TargetAudioMixer.GetFloat(target, out settingsSo.Settings.MutedUIVolume);  settingsSo.Settings.UIOn = false;
                }
                else if (trackMode == ControlTrackModes.Unmute)
                {
                    savedVolume = settingsSo.Settings.MutedUIVolume;  settingsSo.Settings.UIOn = true;
                }
                break;
            }

            switch (trackMode)
            {
            case ControlTrackModes.Mute:
                settingsSo.SetTrackVolume(track, 0f);
                break;

            case ControlTrackModes.Unmute:
                settingsSo.SetTrackVolume(track, settingsSo.MixerVolumeToNormalized(savedVolume));
                break;

            case ControlTrackModes.SetVolume:
                settingsSo.SetTrackVolume(track, volume);
                break;
            }

            settingsSo.GetTrackVolumes();

            if (settingsSo.Settings.AutoSave)
            {
                settingsSo.SaveSoundSettings();
            }
        }
Exemplo n.º 11
0
 /// <summary>
 /// Sets the volume of an entire track
 /// </summary>
 /// <param name="track"></param>
 /// <param name="volume"></param>
 public virtual void SetTrackVolume(MMSoundManagerTracks track, float volume)
 {
     ControlTrack(track, ControlTrackModes.SetVolume, volume);
 }
Exemplo n.º 12
0
 /// <summary>
 /// Unmutes an entire track
 /// </summary>
 /// <param name="track"></param>
 public virtual void UnmuteTrack(MMSoundManagerTracks track)
 {
     ControlTrack(track, ControlTrackModes.Unmute, 0f);
 }
Exemplo n.º 13
0
        /// <summary>
        /// Plays a sound, signature with all options
        /// </summary>
        /// <param name="audioClip"></param>
        /// <param name="mmSoundManagerTrack"></param>
        /// <param name="location"></param>
        /// <param name="loop"></param>
        /// <param name="volume"></param>
        /// <param name="ID"></param>
        /// <param name="fade"></param>
        /// <param name="fadeInitialVolume"></param>
        /// <param name="fadeDuration"></param>
        /// <param name="fadeTween"></param>
        /// <param name="persistent"></param>
        /// <param name="recycleAudioSource"></param>
        /// <param name="audioGroup"></param>
        /// <param name="pitch"></param>
        /// <param name="panStereo"></param>
        /// <param name="spatialBlend"></param>
        /// <param name="soloSingleTrack"></param>
        /// <param name="soloAllTracks"></param>
        /// <param name="autoUnSoloOnEnd"></param>
        /// <param name="bypassEffects"></param>
        /// <param name="bypassListenerEffects"></param>
        /// <param name="bypassReverbZones"></param>
        /// <param name="priority"></param>
        /// <param name="reverbZoneMix"></param>
        /// <param name="dopplerLevel"></param>
        /// <param name="spread"></param>
        /// <param name="rolloffMode"></param>
        /// <param name="minDistance"></param>
        /// <param name="maxDistance"></param>
        /// <returns></returns>
        public virtual AudioSource PlaySound(AudioClip audioClip, MMSoundManagerTracks mmSoundManagerTrack, Vector3 location,
                                             bool loop       = false, float volume            = 1.0f, int ID = 0,
                                             bool fade       = false, float fadeInitialVolume = 0f, float fadeDuration = 1f, MMTweenType fadeTween = null,
                                             bool persistent = false,
                                             AudioSource recycleAudioSource = null, AudioMixerGroup audioGroup = null,
                                             float pitch          = 1f, float panStereo = 0f, float spatialBlend = 0.0f,
                                             bool soloSingleTrack = false, bool soloAllTracks         = false, bool autoUnSoloOnEnd   = false,
                                             bool bypassEffects   = false, bool bypassListenerEffects = false, bool bypassReverbZones = false, int priority            = 128, float reverbZoneMix = 1f,
                                             float dopplerLevel   = 1f, int spread = 0, AudioRolloffMode rolloffMode = AudioRolloffMode.Logarithmic, float minDistance = 1f, float maxDistance    = 500f
                                             )
        {
            if (!audioClip)
            {
                return(null);
            }

            // audio source setup ---------------------------------------------------------------------------------

            // we reuse an audiosource if one is passed in parameters
            AudioSource audioSource = recycleAudioSource;

            if (audioSource == null)
            {
                // we pick an idle audio source from the pool if possible
                audioSource = _pool.GetAvailableAudioSource(PoolCanExpand, this.transform);
                if ((audioSource != null) && (!loop))
                {
                    recycleAudioSource = audioSource;
                    // we destroy the host after the clip has played (if it not tag for reusability.
                    StartCoroutine(_pool.AutoDisableAudioSource(audioClip.length, audioSource.gameObject));
                }
            }

            // we create an audio source if needed
            if (audioSource == null)
            {
                _tempAudioSourceGameObject = new GameObject("MMAudio_" + audioClip.name);
                audioSource = _tempAudioSourceGameObject.AddComponent <AudioSource>();
            }

            // audio source settings ---------------------------------------------------------------------------------

            audioSource.transform.position = location;
            audioSource.time                  = 0.0f;
            audioSource.clip                  = audioClip;
            audioSource.pitch                 = pitch;
            audioSource.spatialBlend          = spatialBlend;
            audioSource.panStereo             = panStereo;
            audioSource.loop                  = loop;
            audioSource.bypassEffects         = bypassEffects;
            audioSource.bypassListenerEffects = bypassListenerEffects;
            audioSource.bypassReverbZones     = bypassReverbZones;
            audioSource.priority              = priority;
            audioSource.reverbZoneMix         = reverbZoneMix;
            audioSource.dopplerLevel          = dopplerLevel;
            audioSource.spread                = spread;
            audioSource.rolloffMode           = rolloffMode;
            audioSource.minDistance           = minDistance;
            audioSource.maxDistance           = maxDistance;

            // track and volume ---------------------------------------------------------------------------------

            if (settingsSo != null)
            {
                audioSource.outputAudioMixerGroup = settingsSo.MasterAudioMixerGroup;
                switch (mmSoundManagerTrack)
                {
                case MMSoundManagerTracks.Master:
                    audioSource.outputAudioMixerGroup = settingsSo.MasterAudioMixerGroup;
                    break;

                case MMSoundManagerTracks.Music:
                    audioSource.outputAudioMixerGroup = settingsSo.MusicAudioMixerGroup;
                    break;

                case MMSoundManagerTracks.Sfx:
                    audioSource.outputAudioMixerGroup = settingsSo.SfxAudioMixerGroup;
                    break;

                case MMSoundManagerTracks.UI:
                    audioSource.outputAudioMixerGroup = settingsSo.UIAudioMixerGroup;
                    break;
                }
            }
            if (audioGroup)
            {
                audioSource.outputAudioMixerGroup = audioGroup;
            }
            audioSource.volume = volume;

            // we start playing the sound
            audioSource.Play();

            // we destroy the host after the clip has played if it was a one time AS.
            if (!loop && !recycleAudioSource)
            {
                Destroy(_tempAudioSourceGameObject, audioClip.length);
            }

            // we fade the sound in if needed
            if (fade)
            {
                FadeSound(audioSource, fadeDuration, fadeInitialVolume, volume, fadeTween);
            }

            // we handle soloing
            if (soloSingleTrack)
            {
                MuteSoundsOnTrack(mmSoundManagerTrack, true, 0f);
                audioSource.mute = false;
                if (autoUnSoloOnEnd)
                {
                    MuteSoundsOnTrack(mmSoundManagerTrack, false, audioClip.length);
                }
            }
            else if (soloAllTracks)
            {
                MuteAllSounds();
                audioSource.mute = false;
                if (autoUnSoloOnEnd)
                {
                    StartCoroutine(MuteAllSoundsCoroutine(audioClip.length, false));
                }
            }

            // we prepare for storage
            _sound.ID         = ID;
            _sound.Track      = mmSoundManagerTrack;
            _sound.Source     = audioSource;
            _sound.Persistent = persistent;

            // we check if that audiosource is already being tracked in _sounds
            bool alreadyIn = false;

            for (int i = 0; i < _sounds.Count; i++)
            {
                if (_sounds[i].Source == audioSource)
                {
                    _sounds[i] = _sound;
                    alreadyIn  = true;
                }
            }

            if (!alreadyIn)
            {
                _sounds.Add(_sound);
            }

            // we return the audiosource reference
            return(audioSource);
        }