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

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

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

c86crjj0

c86crjj01#

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

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

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

private const int MM_MCINOTIFY = 0x03b9;
private const int MCI_NOTIFY_SUCCESS = 0x01;    
private const int MCI_NOTIFY_SUPERSEDED = 0x02;
private const int MCI_NOTIFY_ABORTED = 0x04;
private const int MCI_NOTIFY_FAILURE = 0x08;

protected override void WndProc(ref Message m)
{
  if (m.Msg == MM_MCINOTIFY)
  {
    switch (m.WParam.ToInt32())
    {
      case MCI_NOTIFY_SUCCESS:
        // success handling
        break;
      case MCI_NOTIFY_SUPERSEDED:
        // superseded handling
        break;
      case MCI_NOTIFY_ABORTED:
        // abort handling
        break;
      case MCI_NOTIFY_FAILURE:
        // failure! handling
        break;
      default:
        // haha
        break;
    }
  }
  base.WndProc(ref m);
}

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

nfs0ujit

nfs0ujit2#

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

相关问题