C ++ Win32 - 如何使用mciSendString()循环MIDI?

时间:2014-03-25 18:20:16

标签: c++ winapi loops midi mci

我正在制作游戏,我正在尝试使用mciSendString()循环MIDI文件。我看过CProgramming.com,但示例的窗口对象是OWL,我无法移植它们。我也试过看Brian Gradin的问题,但答案只包含两行代码。我查看了MSDN,但这就像一个参考而不是教程。添加重复不会发挥任何作用。这是我到目前为止的代码:

mciSendString("open PUG1.MID type sequencer alias music", NULL, 0, NULL);
mciSendString("play music", NULL, 0, NULL);

如果你有帮助,那么我一定会把你归入学分。 谢谢! :)

编辑:我试图处理通知标志,但我的代码不起作用。它播放主题一旦它停止。

    //At the end of WM_CREATE...
    mciSendString("open MUSIC\\PUG2.MID type sequencer alias music", NULL, 0, NULL);
    mciSendString("play music", NULL, 0, NULL);
break;
case MM_MCINOTIFY:
    mciSendString("seek music to start", NULL, 0, NULL);
    mciSendString("play music", NULL, 0, NULL);
break;

1 个答案:

答案 0 :(得分:3)

您可以在歌曲结束时通知notify标志。

这似乎有效:

case WM_CREATE:
    mciSendString("open pickin0.mid type sequencer alias music", NULL, 0, NULL);
    mciSendString("play music notify", NULL, 0, hWnd);
    break;

case MM_MCINOTIFY:
    mciSendString("seek music to start", NULL, 0, NULL);
    mciSendString("play music notify", NULL, 0, hWnd);
    break;

使用notify命令时需要传递窗口句柄,以便它可以在某处发送MM_MCINOTIFY命令。