代码之家  ›  专栏  ›  技术社区  ›  Andreas Grech

WPF:实现MediaPlayer音频/视频搜索器

  •  3
  • Andreas Grech  · 技术社区  · 15 年前

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

    我已经实现了一个歌曲滑块(从 Sacha Barber's application )当用户手动拖动搜索者时(如中所述,歌曲从该位置继续),它就会工作,但我无法确定如何使搜索者根据歌曲中的当前位置移动。

    问题是我觉得没有办法检查 Position 性质 中型球员 已经改变了,所以我对如何实现这个特性感到困惑。

    关于如何处理这样一个问题有什么想法吗?

    [更新]

    关于用计时器增加搜索者的数量,我实际上考虑使用我还没有尝试它的原因,因为我认为有更好的方法可以使用 MediaTimeline …但我还没弄清楚怎么做。

    4 回复  |  直到 14 年前
        1
  •  4
  •   Alastair Pitts    14 年前

    出现答案!为主人服务

    好吧,我已经知道怎么做了。我确信我做的不是完全正确的方法,但它确实有效。

    下面是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();
        }
    }
    

    诀窍是,一旦你设置了一个媒体播放器的时钟,它就变成了时钟控制,因此使用mplayer.clock.controller来完成所有的控制:)

        2
  •  0
  •   Crippeoblade    15 年前

    从未使用媒体播放器播放过,但假设您知道歌曲的长度,您是否可以设置一个计时器,在播放歌曲时每秒滴答作响。因此,对于每一个滴答声,只需根据歌曲的总长度增加搜索者。

    这首歌有100秒长。因此,每一秒/每一秒都相当于总进度的1%。

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

        3
  •  0
  •   Sebastian Gray    15 年前
        4
  •  0
  •   Will    15 年前

    你检查过水渍险吗 MediaKit 但是呢?