private bool RemoveFromQueue(AudioMixerSnapshot i_Snapshot)
    {
        AudioMixerSnapshotData snapshotData = GetDataFromQueue(i_Snapshot);

        if (snapshotData == null)
        {
            return(false);
        }

        m_Queue.Remove(snapshotData);
        return(true);
    }
    // INTERNALS

    private bool AddToQueue(AudioMixerSnapshot i_Snapshot, float i_FadeTime, double i_Priority)
    {
        if (i_Snapshot == null)
        {
            return(false);
        }

        AudioMixerSnapshotData newSnapshot = new AudioMixerSnapshotData(i_Snapshot, i_FadeTime);

        m_Queue.Enqueue(newSnapshot, i_Priority);
        return(true);
    }
    private AudioMixerSnapshotData GetDataFromQueue(AudioMixerSnapshot i_Snapshot)
    {
        AudioMixerSnapshotData targetSnapshot = null;

        foreach (AudioMixerSnapshotData s in m_Queue)
        {
            if (s != null)
            {
                if (s.snapshot == i_Snapshot)
                {
                    targetSnapshot = s;
                    break;
                }
            }
        }

        return(targetSnapshot);
    }
    private void UpdateMixer()
    {
        if (m_Queue.Count == 0)
        {
            return;
        }

        AudioMixerSnapshotData nextSnapshot = m_Queue.First;

        if (nextSnapshot != null)
        {
            AudioMixerSnapshot s = nextSnapshot.snapshot;
            if (s != null)
            {
                s.TransitionTo(nextSnapshot.fadeTime);
            }
        }
    }