private bool getAvailable(out Gaze_AudioSource gas)
 {
     gas = null;
     if (audios.Count < 1)
     {
         return(false);
     }
     foreach (var a in audios)
     {
         if (a.nextAudioState == AudioState.STOPPED && a.audioState == AudioState.STOPPED && !a.isPlaying)
         {
             gas = a;
             return(true);
         }
     }
     return(false);
 }
        public void playAudio(int key, int index)
        {
            if (audiosActions[key].stopOthers)
            {
                stopAudio();
            }
            if (index == 3)
            {
                stopTrack(2);
            }
            else if (index == 4)
            {
                stopTrack(3);
            }

            if (((audiosActions[key].allowMultiple && !audiosActions[key].forceStop && audiosActions[key].nAudioPlaying < audiosActions[key].MAX_AUDIOS) ||
                 (!isPlaying(key))))
            {
                Gaze_AudioSource available_AS = null;

                if (!getAvailable(out available_AS))
                {
                    AudioSource newAudioSource = gameObject.AddComponent <AudioSource>();
                    newAudioSource.hideFlags = HideFlags.HideInInspector;
                    Gaze_AudioSource toAdd = new Gaze_AudioSource(newAudioSource);
                    toAdd.clipIndex = audiosActions[key].lastClipIndex[index];
                    toAdd.key       = key;
                    audios.Add(toAdd);
                }
                else
                {
                    available_AS.clipIndex = audiosActions[key].lastClipIndex[index];
                    available_AS.key       = key;
                }
            }

            if (!audiosActions[key].allowMultiple)
            {
                if (isPlaying(key) && !audiosActions[key].forceStop)
                {
                    return;
                }
                else
                {
                    audiosActions[key].triggered.Enqueue(index);
                    if (!audiosActions[key].forceStop)
                    {
                        audiosActions[key].nAudioPlaying++;
                    }
                }
            }

            if ((audiosActions[key].allowMultiple && audiosActions[key].nAudioPlaying < audiosActions[key].MAX_AUDIOS) || audiosActions[key].forceStop)
            {
                audiosActions[key].triggered.Enqueue(index);
                if (!audiosActions[key].forceStop)
                {
                    audiosActions[key].nAudioPlaying++;
                }
            }
        }