4

私は現在、WPF を使用して (WPF アプリケーションで) MP3 プレーヤーに取り組んでいます。MediaPlayer基本的には、現在再生中の曲に合わせて移動するソング シーカーを実装したいと考えています。

私はすでに曲スライダーを実装しています ( Sacha Barber のアプリケーションから)。ユーザーがシーカーを手動でドラッグすると機能します (曲はその位置から続くように)。歌。

Position問題は、 のプロパティがいつ変更されたかを確認する方法がないと思うMediaPlayerので、この機能をどのように実装すればよいか困っています。

そのような問題にどう対処するかについてのアイデアはありますか?

[アップデート]

シーカーをタイマーでインクリメントすることに関しては、まだ試していない理由は、MediaTimeline...を使用してこれを実装するより良い方法があると思うからです。

4

4 に答える 4

4

ARISE答え!そしてご主人様に仕えます

OK、私はこれを機能させる方法を理解しました。私はそれを完全に正しい方法でやっているわけではないと確信していますが、うまくいきます。

これは、一時停止/再生ボタンを備えた 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

WPF MediaKitはもうチェックアウトしましたか?

于 2009-10-19T14:05:24.580 に答える
0

MediaElement には、これに使用できる位置プロパティがあります: http://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.position.aspx

于 2009-08-28T10:25:01.263 に答える
0

メディアプレーヤーでプレイしたことはありませんが、曲の長さを知っていると仮定すると、曲の再生中に毎秒刻むタイマーを設定できませんでした. したがって、ティックごとに、曲の合計の長さに関連してシーカーをインクリメントするだけです。

曲の長さは100秒です。したがって、毎秒/ティックは、進行状況全体の 1% の価値があります。

曲などを一時停止するときはタイマーを停止する必要があります...

于 2009-05-16T09:05:14.983 に答える