SoundManagerClip FindFreeAudioSource(SoundLayer layer, string clipName)
        {
            AudioSource tempAudio = null;

            foreach (SoundManagerClip clip in _layers[layer])
            {
                if (clip._audioClipPath == clipName)
                {
                    tempAudio = clip._audiSource;
                }
                if (!clip._audiSource.isPlaying && !clip._isPaused)
                {
                    return(clip);
                }
            }

            SoundManagerClip smc = new SoundManagerClip();

            if (tempAudio == null)
            {
                smc._audiSource = gameObject.AddComponent <AudioSource> ();
            }
            else
            {
                smc._audiSource = tempAudio;
            }

            smc._audiSource.outputAudioMixerGroup = SetAudioGroup(layer);
            smc._audiSource.playOnAwake           = false;
            smc._audioClipPath = "";
            _layers[layer].Add(smc);
            return(smc);
        }
        public SoundManagerClip PlaySound(string clipName, SoundLayer layer, bool isLooping = false)
        {
            SoundManagerClip smc = FindFreeAudioSource(layer, clipName);

            smc._audioClipPath = clipName;
            smc.LoadSoundClip();
            smc._audiSource.loop = isLooping;
            smc._audiSource.Play();
            return(smc);
        }
        public SoundManagerClip PlayTimedSound(string clipName, SoundLayer layer, float timeToPlay)
        {
            SoundManagerClip cc = null;

            if (_continuosLooping.ContainsKey(clipName))
            {
                cc            = _continuosLooping[clipName];
                cc._playUntil = Time.time + timeToPlay;
            }
            else
            {
                cc = FindFreeAudioSource(layer, clipName);
                cc._audioClipPath   = clipName;
                cc._playUntil       = Time.time + timeToPlay;
                cc._audiSource.loop = true;
                cc.LoadSoundClip();
                cc._audiSource.Play();

                _continuosLooping.Add(cc._audioClipPath, cc);
            }

            return(cc);
        }