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(); }