private static QuantizedTime FindNearestTime(IReadOnlyList <long> grid, long time, TimeSpanType distanceCalculationType, double quantizingLevel, TempoMap tempoMap) { var distanceToGridTime = -1L; var convertedDistanceToGridTime = TimeSpanUtilities.GetMaxTimeSpan(distanceCalculationType); var gridTime = -1L; for (int i = 0; i < grid.Count; i++) { var currentGridTime = grid[i]; var distance = Math.Abs(time - currentGridTime); var convertedDistance = LengthConverter.ConvertTo(distance, distanceCalculationType, Math.Min(time, currentGridTime), tempoMap); if (convertedDistance.CompareTo(convertedDistanceToGridTime) >= 0) { break; } distanceToGridTime = distance; convertedDistanceToGridTime = convertedDistance; gridTime = currentGridTime; } // var shift = convertedDistanceToGridTime.Multiply(quantizingLevel); var convertedTime = TimeConverter.ConvertTo(time, distanceCalculationType, tempoMap); var newTime = TimeConverter.ConvertFrom( gridTime > time ? convertedTime.Add(shift, TimeSpanMode.TimeLength) : convertedTime.Subtract(shift, TimeSpanMode.TimeLength), tempoMap); // return(new QuantizedTime(newTime, gridTime, shift, distanceToGridTime, convertedDistanceToGridTime)); }