winforms 歌曲播放完了吗?(C# MCI)

mwg9r5ms  于 2023-05-18  发布在  C#
关注(0)|答案(2)|浏览(176)

我有一个mp3播放器,发送MCI命令播放暂停/ff/rw/停止音频文件等,唯一我不知道如何做的是发送MCI命令,告诉它播放下一首歌时,当前的一个完成播放。
歌曲在列表框中。我没有问题,实际上选择下一首歌,我只需要找出何时播放播放列表上的下一首歌。我会很感激任何帮助
Thank you:)

c86crjj0

c86crjj01#

很抱歉在一个月左右的时间后挖掘这个,但我 * 想 * 我可能有一个更好的答案…
你可以用秒来计算长度,或者你可以让MCI自己通知你。
当你发送“播放”命令时,在媒体别名后面加上“notify”,然后传递窗口的句柄(我使用的是System.Windows.Forms,因此使用了'this. Handle'),如下所示:

  1. uint playOk = mciSendString("play MediaFile notify", null, 0, this.Handle);

它告诉MCI在命令完成或中断时向您发送通知。然后,你可以过滤窗口收到的消息,看看是否有你感兴趣的消息:

  1. private const int MM_MCINOTIFY = 0x03b9;
  2. private const int MCI_NOTIFY_SUCCESS = 0x01;
  3. private const int MCI_NOTIFY_SUPERSEDED = 0x02;
  4. private const int MCI_NOTIFY_ABORTED = 0x04;
  5. private const int MCI_NOTIFY_FAILURE = 0x08;
  6. protected override void WndProc(ref Message m)
  7. {
  8. if (m.Msg == MM_MCINOTIFY)
  9. {
  10. switch (m.WParam.ToInt32())
  11. {
  12. case MCI_NOTIFY_SUCCESS:
  13. // success handling
  14. break;
  15. case MCI_NOTIFY_SUPERSEDED:
  16. // superseded handling
  17. break;
  18. case MCI_NOTIFY_ABORTED:
  19. // abort handling
  20. break;
  21. case MCI_NOTIFY_FAILURE:
  22. // failure! handling
  23. break;
  24. default:
  25. // haha
  26. break;
  27. }
  28. }
  29. base.WndProc(ref m);
  30. }

这对我来说似乎很好。希望这能帮上忙。;)

展开查看全部
nfs0ujit

nfs0ujit2#

你能检查mp3的持续时间,并保持一个定时器沿着的mp3播放吗?当MP3暂停时暂停计时器等。播放完歌曲的时长后,播放下一首歌曲。

相关问题