public virtual PlaybackSpeed AutoAdjust(PlaybackSpeed track, double targetBpm) { if (track == null) throw new ArgumentNullException("track"); if (track.IsUnknownBpm || Double.IsNaN(targetBpm)) return track; double increase = CalculateSuggestedIncrease(track, targetBpm); return track.AsIncreasedBy(increase); }
public Transition GetTransitionBetween(PlaybackSpeed first, PlaybackSpeed second) { if (first == null) throw new ArgumentNullException("first"); if (second == null) throw new ArgumentNullException("second"); // Adjust playback speed to match var suggestedSpeedIncrease = playbackSpeedAdjuster.CalculateSuggestedIncrease(first, second); var secondAdjusted = second.AsIncreasedBy(suggestedSpeedIncrease); var strategy = preferredStrategies.FirstOrDefault(s => s.IsCompatible(first, secondAdjusted)); if (strategy == null) return null; return new Transition( first.ActualKey, secondAdjusted.ActualKey, strategy, suggestedSpeedIncrease); }