2009-05-15 4 views
2

現在、WPF MediaPlayerを使用して(WPFアプリケーションの)MP3プレーヤーで作業しています。基本的には、現在の再生中の曲とともに移動するSong Seekerを実装します。WPF:MediaPlayerのオーディオ/ビデオシークアを実装する

私は既に歌手のスライダー(Sacha Barber's application)を実装しています。ユーザーが手動でシーカーをドラッグすると機能しますが(現在の位置から曲が続きます)、現在のシーカーに合わせて移動する方法はわかりません歌の位置。

問題はMediaPlayerPositionプロパティが変更されたときにチェックする方法がないと思われるため、この機能をどのように実装するべきかについて私は困惑しています。

このような問題を解決する方法についてのアイデアはありますか?

[更新]私はこの使用を実装するためのより良い方法があると思うので

タイマーとのシーカーをインクリメントに関しては、私は実際に、私はまだそれをしようとしなかった理由を使用して考えがありますMediaTimeline ...しかし、私はまだどのように把握する必要があります。

+1

のすべてを行うにはMPlayer.Clock.Controllerのため、使用はあなたが任意の運を持っていたということですあなたは5月に投稿して以来これで?私はあなたのソリューションに興味があります。私はちょうどスライダを移動するためにタイマーを使用しましたが、現在の位置を設定するためにドラッグを妨害します。 –

答えて

3

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ののクロックを設定したら、それはクロック制御となり、制御:)

0

メディアプレイヤーでプレイしたことはありませんが、曲の長さがわかっていると仮定すると、曲の再生中に1秒ごとにタイマーを設定することはできません。したがって、すべてのダニのために、歌が合計されている時間に関連してシーカーを増加させるだけです。

ソングの長さは100秒です。したがって、毎秒/ティックは、合計進行の1%に相当します。

あなたは歌などを一時停止する際にタイマーを停止する必要があると思います...

0

あなたはまだWPF MediaKitをチェックアウトしたことがありますか?