4

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

我已经实现了一个歌曲滑块(来自Sacha Barber 的应用程序),当用户手动拖动搜索器时它可以工作(如,歌曲从该位置继续)但我不知道如何使搜索器根据当前位置移动这首歌。

问题是我认为没有办法检查 的Position属性何时MediaPlayer发生变化,所以我对如何实现这个功能感到困惑。

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

[更新]

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

4

4 回答 4

4

起来回答!服侍你的主人

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

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

于 2009-12-25T10:55:05.963 回答
0

从来没有玩过媒体播放器,但假设你知道歌曲的长度,你不能设置一个在歌曲播放时每秒滴答的计时器。因此,对于每个滴答声,只需根据歌曲的总时长来增加搜索器。

歌曲长度为 100 秒。因此,每一秒/滴答声都相当于总进度的 1%。

暂停歌曲等时,您必须停止计时器...

于 2009-05-16T09:05:14.983 回答
0

MediaElement 有一个可以用于此的位置属性:http: //msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.position.aspx

于 2009-08-28T10:25:01.263 回答
0

你检查过 WPF MediaKit了吗?

于 2009-10-19T14:05:24.580 回答