Esempio n. 1
0
 /// <summary>
 /// Sync up a sync point.
 /// </summary>
 /// <param name="thisPoint">E.g. the end of the action</param>
 /// <param name="withThis">The time to sync up with</param>
 public void Sync(SyncPoints thisPoint, float withThis)
 {
     float point = GetTime(thisPoint);
     float diff = point - withThis;
     Debug.Log(ID + "point " + point + " diff " + diff);
     Start -= diff;
 }
Esempio n. 2
0
 public override float GetTime(SyncPoints point)
 {
     switch (point) {
         case SyncPoints.Start:
             return Start;
         default:
             throw new System.ArgumentOutOfRangeException();
     }
 }
	/* Private members */

	private SyncPoints AdaptForOperation (SyncPoints syncPoints, bool toSyncAll) {
		if ((syncPoints == null) || (!toSyncAll) || (toSyncAll && (syncPoints.Count < 2)))
			return syncPoints;

		SyncPoints adapted = syncPoints.Clone();

		/* Add the first subtitle if possible */
		int firstSubtitleNumber = 0;
		if ((subtitles.Collection.Count > 1) && (!adapted.Contains(firstSubtitleNumber))) {

			/* Calculate sync shift and factor using the last 2 sync points */
			SyncPoint firstSyncPoint = adapted[0];
			SyncPoint secondSyncPoint = adapted[1];
			Subtitle firstSyncPointSubtitle = subtitles.Collection[firstSyncPoint.SubtitleNumber];
			Subtitle secondSyncPointSubtitle = subtitles.Collection[secondSyncPoint.SubtitleNumber];
			TimeSpan shift = firstSyncPoint.Correct.Time - firstSyncPointSubtitle.Times.PreciseStart;
			double factor = (secondSyncPoint.Correct.Time - firstSyncPoint.Correct.Time).TotalMilliseconds / (secondSyncPointSubtitle.Times.PreciseStart - firstSyncPointSubtitle.Times.PreciseStart).TotalMilliseconds;

			/* Calculate new time */
			Subtitle firstSubtitle = subtitles.Collection[firstSubtitleNumber];
			TimeSpan firstSubtitleNewTime = firstSubtitle.Times.Start + shift; //Apply shift
			firstSubtitleNewTime = SyncUtil.Scale(firstSubtitleNewTime, TimeSpan.Zero, factor);
			if (firstSubtitleNewTime < TimeSpan.Zero) { //Can't have negative start
				firstSubtitleNewTime = TimeSpan.Zero;
			}
			int firstSubtitleNewFrame = (int)TimingUtil.TimeToFrames(firstSubtitleNewTime, subtitles.Properties.CurrentFrameRate);
			Domain.Timing firstSubtitleNewTiming = new Domain.Timing(firstSubtitleNewFrame, firstSubtitleNewTime);
			Domain.Timing firstSubtitleCurrentTiming = new Domain.Timing(firstSubtitle.Frames.Start, firstSubtitle.Times.Start);
			SyncPoint newFirstSyncPoint = new SyncPoint(firstSubtitleNumber, firstSubtitleCurrentTiming, firstSubtitleNewTiming);
			adapted.Add(newFirstSyncPoint);
		}

		/* Add last subtitle if possible */
		int lastSubtitleNumber = subtitles.Collection.Count - 1;
		if ((subtitles.Collection.Count > 1) && (!adapted.Contains(lastSubtitleNumber))) {

			/* Calculate sync shift and factor using the last 2 sync points */
			SyncPoint penultSyncPoint = adapted[adapted.Count - 2];
			SyncPoint lastSyncPoint = adapted[adapted.Count - 1];
			Subtitle penultSyncPointSubtitle = subtitles.Collection[penultSyncPoint.SubtitleNumber];
			Subtitle lastSyncPointSubtitle = subtitles.Collection[lastSyncPoint.SubtitleNumber];
			TimeSpan shift = penultSyncPoint.Correct.Time - penultSyncPointSubtitle.Times.PreciseStart;
			double factor = (lastSyncPoint.Correct.Time - penultSyncPoint.Correct.Time).TotalMilliseconds / (lastSyncPointSubtitle.Times.PreciseStart - penultSyncPointSubtitle.Times.PreciseStart).TotalMilliseconds;

			/* Calculate new time */
			Subtitle lastSubtitle = subtitles.Collection[lastSubtitleNumber];
			TimeSpan lastSubtitleNewTime = lastSubtitle.Times.Start + shift; //Apply shift
			lastSubtitleNewTime = SyncUtil.Scale(lastSubtitleNewTime, penultSyncPoint.Correct.Time, factor);
			int lastSubtitleNewFrame = (int)TimingUtil.TimeToFrames(lastSubtitleNewTime, subtitles.Properties.CurrentFrameRate);
			Domain.Timing lastSubtitleNewTiming = new Domain.Timing(lastSubtitleNewFrame, lastSubtitleNewTime);
			Domain.Timing lastSubtitleCurrentTiming = new Domain.Timing(lastSubtitle.Frames.Start, lastSubtitle.Times.Start);
			SyncPoint newLastSyncPoint = new SyncPoint(lastSubtitleNumber, lastSubtitleCurrentTiming, lastSubtitleNewTiming);
			adapted.Add(newLastSyncPoint);
		}

		return adapted;
	}
	private bool AreSyncArgsValid (SyncPoints syncPoints) {
		if ((syncPoints == null) || (syncPoints.Count < 2) || (syncPoints[syncPoints.Count - 1].SubtitleNumber > subtitles.Collection.Count))
			return false;

		SyncPoint previous = syncPoints[0];
		for (int index = 1 ; index < syncPoints.Count ; index++) {
			SyncPoint current = syncPoints[index];
			if (!SyncUtil.AreSyncPointsValid(subtitles, previous, current))
				return false;

			previous = current;
		}
		return true;
	}
Esempio n. 5
0
 public override float GetTime(SyncPoints point)
 {
     switch (point) {
         case SyncPoints.Start:
             return Start;
         case SyncPoints.Relax:
             return Start + Relax;
         case SyncPoints.End:
             return Start + End;
         case SyncPoints.AttackPeak:
             return Start + AttackPeak;
         default:
             throw new System.ArgumentOutOfRangeException();
     }
 }
	/* Public members */

	public bool Sync (SyncPoints syncPoints, bool toSyncAll) {
		SyncPoints pointsToUse = AdaptForOperation(syncPoints, toSyncAll);
		if (!AreSyncArgsValid(pointsToUse)) {
			return false;
		}
		SyncPoint previous = pointsToUse[0];
		for (int index = 1 ; index < pointsToUse.Count ; index++) {
			bool syncLast = (index == pointsToUse.Count - 1);
			SyncPoint current = pointsToUse[index];
			SyncUtil.Sync(subtitles, previous, current, syncLast);

			previous = current;
		}

		return true;
	}
Esempio n. 7
0
 public override float GetTime(SyncPoints point)
 {
     switch (point) {
         case SyncPoints.Start:
             return Start;
         case SyncPoints.Ready:
             return Start + Ready;
         case SyncPoints.Relax:
             return Start + Relax;
         case SyncPoints.End:
             return Start + End;
         case SyncPoints.StrokeStart:
             return Start + StrokeStart;
         case SyncPoints.Stroke:
             return Start + Stroke;
         case SyncPoints.StrokeEnd:
             return Start + StrokeEnd;
         default:
             throw new System.ArgumentOutOfRangeException();
     }
 }
 public SynchronizeTimingsCommand(SyncPoints syncPoints, bool toSyncAll, SelectionIntended selectionIntended, TreePath[] pathRange) : base(description, false, selectionIntended, pathRange, true)
 {
     this.syncPoints = syncPoints;
     this.toSyncAll  = toSyncAll;
 }
Esempio n. 9
0
 /// <summary>
 /// Gets the time of a sync point. To be used to synchronise
 /// behaviour with generated speech.
 /// </summary>
 /// <param name="point"></param>
 /// <returns></returns>
 public virtual float GetTime(SyncPoints point)
 {
     return 0f;
 }