我目前正在使用 WPF MediaPlayer 开发 MP3 播放器(在 WPF 应用程序中),基本上,我想实现一个与当前播放的歌曲一起移动的歌曲搜索器。

我已经实现了一个歌曲滑块(来自 Sacha Barber's application )并且它在用户手动拖动搜索器时起作用(例如,歌曲从该位置继续)但我无法弄清楚如何根据歌曲中的当前位置使搜索器移动.

问题是我认为没有办法检查 PositionMediaPlayer 属性何时发生变化,所以我不知道应该如何实现这个功能。

关于如何解决此类问题的任何想法?

[更新]

关于使用计时器增加搜索器,我实际上想到了使用我还没有尝试的原因是因为我认为有更好的方法来使用 MediaTimeline 实现这一点......但我还没有弄清楚如何.

最佳答案

起来回答!并为你的主人服务

好的,我已经想出了如何工作。我确定我没有以完全正确的方式做这件事,但它确实有效。

这是 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 来完成所有的控制:)

关于c# - WPF:实现 MediaPlayer 音频/视频搜索器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/869761/

10-09 13:42