【问题标题】:Has song finished playing? (C# MCI)歌曲播放完毕了吗? (C# MCI)
【发布时间】:2011-01-29 07:12:33
【问题描述】:

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

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

谢谢你:)

【问题讨论】:

    标签: c# winforms command next mci


    【解决方案1】:

    很抱歉在一个月左右后才把它弄清楚,但我认为我可能会有更好的答案...

    您可以以秒为单位完成长度,也可以让 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);
    }
    

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

    【讨论】:

    • 谢谢大家!非常感谢,我多年来一直在寻找解决方案。 :D
    • 对于控制台应用程序来说,这相当于什么?控制台程序中没有要覆盖的 WndProc
    【解决方案2】:

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

    【讨论】:

    • 不幸的是,我不知道如何检查曲目的持续时间。这可以使用 MCI 完成吗?我参考了 MCI 的文档,但它们似乎相当有限。
    • 刚刚用谷歌搜索并找到了这个类,它会给你以秒为单位的长度:devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    相关资源
    最近更新 更多