WPF:实施MediaPlayer音频/video搜索器

我目前正在制作一个带有WPF MediaPlayer的MP3播放器(在WPF应用程序中),基本上,我想实现一个与当前播放歌曲一起移动的Song Seeker。

我已经实现了一个歌曲滑块(来自Sacha Barber的应用程序 ),当用户手动拖动导引头时(例如,歌曲从该位置继续),它可以工作但我无法弄清楚如何根据当前位置移动导引头这首歌曲。

麻烦的是我认为没有办法检查MediaPlayerPosition属性何时发生了变化,所以我对如何实现这个function感到难过。

关于如何解决这个问题的任何想法?

[更新]

关于使用计时器增加导引头的问题,我实际上想到了使用我没有尝试过的原因,因为我认为使用MediaTimeline有更好的方法来实现MediaTimeline ……但我还没弄清楚如何。

ARISE回答! 并为你的主人服务

好的,我已经想出了如何解决这个问题。 我确信我没有采用完全正确的方式,但它确实有效。

这是WPF应用程序的代码隐藏,带有暂停/播放按钮。

 public partial class Main : Window { MediaPlayer MPlayer; MediaTimeline MTimeline; public Main() { InitializeComponent(); var uri = new Uri("C:\\Test.mp3"); MPlayer = new MediaPlayer(); MTimeline = new MediaTimeline(uri); MTimeline.CurrentTimeInvalidated += new EventHandler(MTimeline_CurrentTimeInvalidated); MPlayer.Clock = MTimeline.CreateClock(true) as MediaClock; MPlayer.Clock.Controller.Stop(); } void MTimeline_CurrentTimeInvalidated(object sender, EventArgs e) { Console.WriteLine(MPlayer.Clock.CurrentTime.Value.TotalSeconds); } private void btnPlayPause_Click(object sender, RoutedEventArgs e) { //Is Active if (MPlayer.Clock.CurrentState == ClockState.Active) { //Is Paused if (MPlayer.Clock.CurrentGlobalSpeed == 0.0) MPlayer.Clock.Controller.Resume(); else //Is Playing MPlayer.Clock.Controller.Pause(); } else if (MPlayer.Clock.CurrentState == ClockState.Stopped) //Is Stopped MPlayer.Clock.Controller.Begin(); } } 

诀窍是,一旦你设置了MediaPlayer的时钟,它就变成了时钟控制,因此使用MPlayer.Clock.Controller来做所有的控制:)

从未玩过媒体播放器,但假设您知道歌曲的长度,您可能无法设置在播放歌曲时每秒钟滴答的计时器。 因此,对于每个节拍,只需将寻道器与歌曲的总长度相关联。

歌曲长达100秒。 因此,每秒/刻度值占总进度的1%。

暂停歌曲等时你必须停止计时器…

MediaElement有一个位置属性,您可以使用它来: http : //msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.position.aspx

你有没有检查过WPF MediaKit ?