private string GetSnappingGap(Beatmap beatmap, HitObject hitObject) { HitObject previousObject = hitObject.PrevOrFirst(); double lastObjectTime = previousObject.GetEdgeTimes().Last(); double snappedCurrentObject = hitObject.time + beatmap.GetPracticalUnsnap(hitObject.time); double snappedPreviousObject = lastObjectTime + beatmap.GetPracticalUnsnap(lastObjectTime); double deltaTime = snappedCurrentObject - snappedPreviousObject; UninheritedLine timingLine = beatmap.GetTimingLine <UninheritedLine>(snappedCurrentObject); var snapping = Math.Round(deltaTime / timingLine.msPerBeat, 2); var snappingStr = new Fraction(snapping).ToString(); return(snappingStr); }