我的c #windows窗体可以播放mp3文件.我是用这个代码做的
WMPLib.WindowsMediaPlayer wplayer;
wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "c:/Standup.mp3";
wplayer.controls.play();
Run Code Online (Sandbox Code Playgroud)
这很完美,但我想知道文件何时播放完毕,以便我可以重新启动它.
请问我该怎么做?
Mar*_*all 16
您可以使用PlayStateChanged事件来完成此操作.您可以像这样将它添加到您的MediaPlayer.
WMPLib.WindowsMediaPlayer wplayer;
wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(wplayer_PlayStateChange);
wplayer.URL = "c:/Standup.mp3";
wplayer.controls.play();
Run Code Online (Sandbox Code Playgroud)
然后,您可以在EventHandler中检查MediaEnded PlayState并将currentPosition重置为歌曲的开头:
void wplayer_PlayStateChange(int NewState)
{
if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded)
{
wplayer.controls.currentPosition = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我希望能够使一首歌可重复到我厌倦了这一点,并且上面的代码确实在我设置了断点时起作用.一旦我删除它们,我发现有其他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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您不一定需要知道文件何时完成除了循环之外的任何其他目的,您可以考虑使用setMode方法来启用跟踪循环.
http://msdn.microsoft.com/en-us/library/windows/desktop/dd564867(v=vs.85).aspx
| 归档时间: |
|
| 查看次数: |
10267 次 |
| 最近记录: |