3

我有一个 mp3 播放器,它发送 MCI 命令来播放暂停/ff/rw/停止音频文件等,我唯一不知道该怎么做就是发送一个 MCI 命令告诉它在播放下一首歌曲时播放当前播放完毕。

歌曲在 ListBox 中。我实际上选择下一首歌曲没有问题,我只需要找出播放列表的下一首歌曲的播放时间。我会很感激任何帮助

谢谢 :)

4

2 回答 2

7

很抱歉在一个月左右后疏通这个,但我我可能有一个更好的答案......

您可以以秒为单位完成长度,也可以让 MCI 自己通知您。

当您发送“播放”命令时,在媒体别名后添加“通知”,然后传递您的窗口句柄(我使用的是 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);
}

这对我来说似乎工作得很好。我希望这有帮助。;)

于 2010-04-06T15:05:29.627 回答
1

你能检查 mp3 的持续时间并在 mp3 播放的旁边保持一个计时器吗?当 mp3 暂停时暂停计时器等。当歌曲的持续时间播放完毕后,播放下一首歌曲。

于 2010-03-19T02:41:55.423 回答