2013-07-14 5 views
9

My C# Windows форма будет включить играть mp3 file.i сделал это с помощью этого кодаКак определить, когда mp3 файл закончил играть

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

это работает отлично, но я хочу знать, когда файл имеет закончил играть, чтобы я мог перезапустить его.

Pls, как я могу это сделать?

ответ

5

Если вам не обязательно знать, когда файл был выполнен для каких-либо других целей, кроме циклов, вы можете рассмотреть метод setMode, чтобы включить цикл записи.

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

+0

Я действительно не понимаю, что link..Pls может у пример кода. –

+3

Я не использовал эту библиотеку, но, по моему мнению, вы должны иметь возможность использовать: wplayer.settings.setMode («loop», true); или wplayer.settings.setMode ("autoRewind", true); –

0

Вы можете использовать функцию PlayStateChange (int NewState) для воспроизведения медиафайла bulitinto для обнаружения состояния остановки.

16

Вы можете сделать это с помощью PlayStateChanged event. вы можете добавить его в свой MediaPlayer, как это.

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

, то вы можете проверить на MediaEndedPlayState в EventHandler и сброса currentPosition в начале песни:

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

Edit: я ожидал, чтобы быть в состоянии сделать песню повторяемый до такой степени, что мне это надоело, и приведенный выше код работал, когда у меня были контрольные точки. Как только я их удалил, я обнаружил, что были другие PlayStates, которые останавливали воспроизведение файла. Я смог обойти его, используя таймер с одним выстрелом. Теперь я утра устал от песни, которую я использовал. Там может быть, возможно, лучший способ сделать это, но это сработает.

Модифицированный код

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

Спасибо, он тоже работал –

2

Вы можете проверить его постоянно с Thread однако, есть небольшая документация ...

//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.