private Track GetClosestTrack(Track currentTrack, Direction direction) { if (currentTrack == null) { return(null); } var track = this.Library.GetTracks().OrderBy(t => BassHelper.AbsoluteBPMPercentChange(currentTrack.EndBPM, t.StartBPM)).FirstOrDefault(); if (track != null) { return(track); } throw new NotImplementedException(); }
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); }
/// <summary> /// Gets the mix level for mixing track 1 into track 1 /// </summary> /// <param name="track1">The track 1.</param> /// <param name="track2">The track 2.</param> /// <returns>A mix level from 0 to 5</returns> public int GetMixLevel(Track track1, Track track2) { if (track1 == null || track2 == null) { return(0); } var mixTracks = GetMixTracks(track1); var mixTrack = mixTracks.GetToTracks() .Where(mt => mt.TrackDescription == track2.Description) .FirstOrDefault(); if (mixTrack != null) { return(mixTrack.MixLevel); } if (BassHelper.AbsoluteBPMPercentChange(track1.EndBPM, track2.StartBPM) > 5M) { return(0); } return(1); }