Exemple #1
0
        public static void ReturnAudioTrack(AudioTrack audioTrack)
        {
            AudioTrackData audioTrackData = null;

            for (int i = 0; i < m_audioTracks.Count; i++)
            {
                if (m_audioTracks[i].AudioTrack == audioTrack)
                {
                    audioTrackData = m_audioTracks[i];
                    break;
                }
            }
            if (!Mixer.EnableAudioTrackCaching)
            {
                if (audioTrackData != null)
                {
                    m_audioTracks.Remove(audioTrackData);
                }
                audioTrack.Pause();
                audioTrack.Release();
                return;
            }
            if (audioTrackData == null)
            {
                audioTrack.Pause();
                audioTrack.Release();
                return;
            }
            bool flag = false;

            if (m_audioTracks.Count > 16)
            {
                flag = true;
                for (int j = 0; j < m_audioTracks.Count; j++)
                {
                    if (m_audioTracks[j].BytesCount < audioTrackData.BytesCount)
                    {
                        flag = false;
                        break;
                    }
                }
            }
            if (flag)
            {
                audioTrack.Pause();
                audioTrack.Release();
                m_audioTracks.Remove(audioTrackData);
            }
            else
            {
                audioTrack.Stop();
                audioTrack.SetPlaybackHeadPosition(audioTrackData.BytesCount / audioTrackData.SoundBuffer.ChannelsCount / 2);
                audioTrackData.ReloadStaticDataTime = Time.FrameStartTime + 0.75;
            }
            LogCacheStats();
        }