private async void DoTrackStart() { await Task.Delay(100).ConfigureAwait(false); if (partPlayStart != TimeSpan.Zero) { //await Task.Delay(100); // PlayerStoryboard.BeginTime = MarkerStoryboard.BeginTime = partPlayStart; if (PlayPartLength > 0) { var end = (TimeSpan.FromMilliseconds(PlayPartLength + partPlayStart.TotalMilliseconds)); endAnimationTime = end; // PlayerStoryboard.Duration = MarkerStoryboard.Duration = (TimeSpan.FromMilliseconds(PlayPartLength + partPlayStart.TotalMilliseconds)); //PlayerStoryboard.SpeedRatio = 0.5; // playTimer = new System.Threading.Timer(doTrackPartEnd, partPlayStart, (int)PlayPartLength, Timeout.Infinite); } else { endAnimationTime = null; partPlayStart = TimeSpan.Zero; } PlayerStoryboard.Resume(mediaElement); MarkerStoryboard.Resume(PositionBar); } else { PlayerStoryboard.Begin(mediaElement, true); MarkerStoryboard.Begin(PositionBar, true); } }
private void DoPlayTextPart(TextPart tp) { PlayerStoryboard.Stop(mediaElement); MarkerStoryboard.Stop(PositionBar); PlayPartLength = tp.TextWidth; // 1px = 1 mill var scaledStartMills = tp.StartMills; var seekTime = TimeSpan.FromMilliseconds(scaledStartMills); MarkerRectangle.Margin = new Thickness(scaledStartMills * Scale, 0, 0, 0); MarkerRectangle.Width = PlayPartLength * Scale; SeekToMousePointInTime(seekTime); TrackStartCommand.Execute(null); }
internal void SeekToMousePointInTime(TimeSpan seekTime) { if (seekTime.Ticks < 0) { seekTime = TimeSpan.FromTicks(1); } partPlayStart = seekTime; MarkerStoryboard.Begin(PositionBar, true); // if the second parameter is missing or false, it doesn't work MarkerStoryboard.Seek(PositionBar, seekTime, TimeSeekOrigin.BeginTime); MarkerStoryboard.Pause(PositionBar); // stop doesn't work PlayerStoryboard.Begin(mediaElement, true); // if the second parameter is missing or false, it doesn't work PlayerStoryboard.Seek(mediaElement, seekTime, TimeSeekOrigin.BeginTime); PlayerStoryboard.Pause(mediaElement); // stop doesn't work }
private void MarkerStoryboard_CurrentTimeInvalidated(object sender, EventArgs e) { if (endAnimationTime == null) { return; } ClockGroup clockGroup = sender as ClockGroup; if (clockGroup?.Children.Count > 0) { AnimationClock mediaClock = clockGroup.Children[0] as AnimationClock; if (mediaClock.CurrentProgress.HasValue) { if (mediaClock.CurrentTime >= endAnimationTime) { MarkerStoryboard.Pause(PositionBar); } } } }
internal void MarkerStoryboard_Pause() { MarkerStoryboard.Pause(PositionBar); }
internal void MarkerStoryboard_Resume() { MarkerStoryboard.Resume(PositionBar); }