我的 c# windows 窗体可以播放 mp3 文件。我使用这段代码做到了这一点
WMPLib.WindowsMediaPlayer wplayer;
wplayer = new WMPLib.WindowsMediaPlayer();
wplayer.URL = "c:/Standup.mp3";
wplayer.controls.play();
这非常有效,但我想知道文件何时播放完毕,以便我可以重新启动它。
请问我该怎么做?
最佳答案
您可以使用 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();
然后您可以检查 MediaEnded
PlayState在 EventHandler 中并将 currentPosition 重置为歌曲的开头:
void wplayer_PlayStateChange(int NewState)
{
if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded)
{
wplayer.controls.currentPosition = 0;
}
}
编辑:我希望能够让一首歌重复到我厌烦的地步,当我设置断点时,上面的代码确实有效。删除它们后,我发现还有其他播放状态正在停止播放文件。我能够通过使用一次性计时器绕过它。现在我厌倦了我正在使用的歌曲。可能/可能有更好的方法来执行此操作,但这会起作用。
修改后的代码
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();
}
}
}
关于c# - 如何检测 mp3 文件何时播放完毕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644754/