2013-07-14 37 views
9

c của tôi # cửa sổ hình thức được cho phép để chơi một mp3 file.I đã làm điều này sử dụng mã nàyLàm thế nào để phát hiện khi một tập tin mp3 phát xong

WMPLib.WindowsMediaPlayer wplayer; 
    wplayer = new WMPLib.WindowsMediaPlayer(); 
    wplayer.URL = "c:/Standup.mp3"; 
    wplayer.controls.play(); 

làm việc này một cách hoàn hảo nhưng tôi muốn biết khi tập tin có chơi xong để tôi có thể khởi động lại.

Làm cách nào để tôi làm điều đó?

Trả lời

5

Nếu bạn không nhất thiết cần biết khi tệp đã hoàn thành cho bất kỳ mục đích nào khác ngoài vòng lặp, bạn có thể xem xét phương thức setMode để bật tính năng theo dõi vòng lặp.

http://msdn.microsoft.com/en-us/library/windows/desktop/dd564867(v=vs.85).aspx

+0

Tôi thực sự không hiểu rằng link..Pls u có thể cung cấp một ví dụ mã. –

+3

Tôi đã không sử dụng thư viện này, nhưng từ sự hiểu biết của tôi, bạn sẽ có thể sử dụng: wplayer.settings.setMode ("loop", true); hoặc wplayer.settings.setMode ("autoRewind", true); –

0

Bạn có thể sử dụng trình phát media phương tiện PlayStateChange (int NewState) để phát hiện trạng thái dừng.

16

Bạn có thể làm điều đó bằng cách sử dụng các PlayStateChanged event. bạn có thể thêm nó vào MediaPlayer của bạn như thế này.

WMPLib.WindowsMediaPlayer wplayer; 
wplayer = new WMPLib.WindowsMediaPlayer(); 
wplayer.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(wplayer_PlayStateChange); 
wplayer.URL = "c:/Standup.mp3"; 
wplayer.controls.play(); 

sau đó bạn có thể kiểm tra sự MediaEndedPlayState trong EventHandler và đặt lại currentPosition khi bắt đầu bài hát:

void wplayer_PlayStateChange(int NewState) 
{ 
    if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded) 
    { 
     wplayer.controls.currentPosition = 0; 
    } 
} 

Edit: tôi mong đợi để có thể làm cho một bài hát lặp lại đến mức tôi bị bệnh, và đoạn mã trên đã hoạt động khi tôi đã thiết lập các điểm ngắt. Một khi tôi gỡ bỏ chúng tôi thấy có những PlayStates khác đã ngừng các tập tin được chơi. Tôi đã có thể bỏ qua nó bằng cách sử dụng một bộ đếm thời gian quay .. Bây giờ tôi am mệt mỏi của bài hát mà tôi đang sử dụng. Có thể/có thể là một cách tốt hơn để làm điều này, nhưng điều này sẽ làm việc.

Mã Modified

public partial class Form1 : Form 
{ 
    WMPLib.WindowsMediaPlayer wplayer; 
    Timer tmr = new Timer(); 
    public Form1() 
    { 
     InitializeComponent(); 
     tmr.Interval = 10; 
     tmr.Stop(); 
     tmr.Tick += new EventHandler(tmr_Tick); 
     wplayer = new WMPLib.WindowsMediaPlayer(); 
     wplayer.URL = "c:/Standup.mp3"; 
     wplayer.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(wplayer_PlayStateChange); 
     wplayer.controls.play(); 
    } 

    void tmr_Tick(object sender, EventArgs e) 
    { 
     tmr.Stop(); 
     wplayer.controls.play(); 
    } 

    void wplayer_PlayStateChange(int NewState) 
    { 
     if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded) 
     { 
      tmr.Start(); 

     } 
    } 


} 
+0

Cảm ơn nó cũng đã làm việc –

2

Bạn có thể kiểm tra xem nó liên tục với tuy nhiên một Thread, có tài liệu hướng dẫn chút ...

//player .playState 
    //Possible Values 
    // 
    //This property is a read-only Number (long). The C-style enumeration constant can be derived by prefixing 
    //the state value with "wmpps". For example, the constant for the Playing state is wmppsPlaying. 
    //Value State Description 
    //0  Undefined  Windows Media Player is in an undefined state. 
    //1  Stopped   Playback of the current media item is stopped. 
    //2  Paused   Playback of the current media item is paused. When a media item is paused, resuming playback begins from the same location. 
    //3  Playing   The current media item is playing. 
    //4  ScanForward  The current media item is fast forwarding. 
    //5  ScanReverse  The current media item is fast rewinding. 
    //6  Buffering  The current media item is getting additional data from the server. 
    //7  Waiting   Connection is established, but the server is not sending data. Waiting for session to begin. 
    //8  MediaEnded  Media item has completed playback. 
    //9  Transitioning Preparing new media item. 
    //10 Ready   Ready to begin playing. 
    //11 Reconnecting Reconnecting to stream. 
Các vấn đề liên quan