示例#1
0
        internal void CombineTracks(List <ISong> trackCombination, List <ISong> playlistTracks, int minPlaytime)
        {
            var trailingTrack = GetTrailingTrack(trackCombination);
            var mixableTracks = GetMixableTracks(trailingTrack, playlistTracks, trackCombination);

            if (mixableTracks.Count > 0)
            {
                var newTrackCombinations = new List <List <ISong> >();

                foreach (var mixableTrack in mixableTracks)
                {
                    var newTrackCombination = GetNewTrackCombination(mixableTrack, trackCombination);
                    newTrackCombinations.Add(newTrackCombination);
                }

                if (newTrackCombinations.Count() > 0)
                {
                    foreach (var newTrackCombination in newTrackCombinations)
                    {
                        if (IsPlaytimeReached(newTrackCombination, minPlaytime))
                        {
                            if (MatchingTrackCombinationList.Count >= 16777215)
                            {
                                var bestMatch = GetFinalBestMatch(MatchingTrackCombinationList);
                                CulledMatchingTrackCombinationList.Add(bestMatch);
                                MatchingTrackCombinationList = new List <List <ISong> >();
                            }

                            MatchingTrackCombinationList.Add(newTrackCombination);
                        }
                        else
                        {
                            UpdateLongestTrackCombinationList(newTrackCombination);
                            CombineTracks(newTrackCombination, playlistTracks, minPlaytime);
                        }
                    }
                }
            }
        }
示例#2
0
        public List <ISong> GetBestMatch()
        {
            var bestMatch = new List <ISong>();

            if (IsPlaytimeReached(BaseTrackList, MinPlaytime))
            {
                MatchingTrackCombinationList.Add(BaseTrackList);
            }
            else
            {
                CombineTracks(BaseTrackList, PlaylistTracks, MinPlaytime);
            }

            bestMatch = GetFinalBestMatch(MatchingTrackCombinationList);

            if (bestMatch.Count > 0)
            {
                CulledMatchingTrackCombinationList.Add(bestMatch);
                bestMatch = GetFinalBestMatch(CulledMatchingTrackCombinationList);
            }

            return(bestMatch);
        }