private void Sync(int startIndex, int endIndex, int minIndex, int maxIndex, double startPos, double endPos) { if (endPos > startPos) { double subStart = _originalSubtitle.Paragraphs[startIndex].StartTime.TotalMilliseconds / TimeCode.BaseUnit; double subEnd = _originalSubtitle.Paragraphs[endIndex].StartTime.TotalMilliseconds / TimeCode.BaseUnit; double subDiff = subEnd - subStart; double realDiff = endPos - startPos; // speed factor double factor = realDiff / subDiff; // adjust to starting position double adjust = startPos - subStart * factor; for (int i = minIndex; i < _subtitle.Paragraphs.Count; i++) { if (i <= maxIndex) { Paragraph p = _subtitle.Paragraphs[i]; p.StartTime.TotalMilliseconds = _originalSubtitle.Paragraphs[i].StartTime.TotalMilliseconds; p.EndTime.TotalMilliseconds = _originalSubtitle.Paragraphs[i].EndTime.TotalMilliseconds; p.Adjust(factor, adjust); } } } }
public void TestAdjust3() { var p = new Paragraph { Text = string.Empty, StartTime = new TimeCode() }; p.Adjust(1, 1); Assert.AreEqual(1, p.StartTime.TotalSeconds); }
public void TestAdjust2() { var p = new Paragraph { Text = string.Empty, StartTime = new TimeCode(0, 1, 1, 1), EndTime = new TimeCode(0, 1, 4, 1) }; p.Adjust(2, 10); Assert.AreEqual(new TimeCode(0, 2, 12, 2).TotalMilliseconds, p.StartTime.TotalMilliseconds); Assert.AreEqual(new TimeCode(0, 2, 18, 2).TotalMilliseconds, p.EndTime.TotalMilliseconds); }