示例#1
0
        private Track GetRandomWorkingTrack()
        {
            var excludeTracks = new List <Track>();

            excludeTracks.Add(this.CurrentTrack);
            excludeTracks.AddRange(_history);

            var preferredTracks = this.MixLibrary.GetPreferredTracks(this.CurrentTrack);
            var forbiddenTracks = this.MixLibrary.GetForbiddenTracks(this.CurrentTrack);

            excludeTracks.AddRange(forbiddenTracks);
            excludeTracks.AddRange(preferredTracks);

            Track randomTrack = null;

            if (this.WorkingTrack != null && this.CurrentTrack != this.WorkingTrack && this.CurrentTrack != null)
            {
                randomTrack = this.WorkingTrack;
            }
            else if (this.WorkingTrack != null)
            {
                var currentTrack = this.CurrentTrack;
                if (currentTrack == null)
                {
                    currentTrack = this.WorkingTrack;
                }

                randomTrack = BassHelper.GetTracksInBPMRange(currentTrack.EndBPM, 5M, this.Library.GetTracks())
                              .Union(BassHelper.GetTracksInEndBPMRange(currentTrack.StartBPM, 5M, this.Library.GetTracks()))
                              .Distinct()
                              .Except(excludeTracks)
                              .OrderBy(t => BassHelper.AbsoluteBPMPercentChange(currentTrack.EndBPM, t.StartBPM))
                              .FirstOrDefault();
            }
            if (randomTrack == null)
            {
                randomTrack = this.WorkingTrack;
            }

            return(randomTrack);
        }
示例#2
0
        /// <summary>
        /// Gets all preferred tracks for the specified track
        /// </summary>
        /// <param name="track">The track.</param>
        /// <returns>A list of tracks in the library the specified track should prefer to mix with</returns>
        public List <Track> GetMixableTracks(Track track, int mixLevel)
        {
            var tracks = new List <Track>();

            if (track == null)
            {
                return(tracks);
            }

            if (mixLevel == 1)
            {
                var excludeTracks = new List <Track>();
                excludeTracks.Add(track);
                excludeTracks.AddRange(GetMixableTracks(track, 0));
                excludeTracks.AddRange(GetMixableTracks(track, 2));
                excludeTracks.AddRange(GetMixableTracks(track, 3));
                excludeTracks.AddRange(GetMixableTracks(track, 4));
                excludeTracks.AddRange(GetMixableTracks(track, 5));

                var tracksInRange = BassHelper.GetTracksInBPMRange(track.EndBPM, 5M, _library.GetTracks());
                return(tracksInRange
                       .Distinct()
                       .Except(excludeTracks)
                       .ToList());
            }
            else
            {
                foreach (var toTrack in GetMixTracks(track).GetToTracks(mixLevel))
                {
                    var mixableTrack = _library.GetTracks()
                                       .Where(t => t.Description == toTrack.TrackDescription)
                                       .FirstOrDefault();
                    if (mixableTrack != null)
                    {
                        tracks.Add(mixableTrack);
                    }
                }
            }

            return(tracks);
        }