我正在制作游戏,我正在使用 MIDI 文件作为背景音乐。这是我目前使用的代码:
void Game::play_music()
{
// Start the music:
if(map.levelnumber % 2 == 0)
{
mciSendString(L"open MUSIC01.MID type sequencer alias Music1", NULL, 0, NULL);
mciSendString(L"play Music1", NULL, 0, NULL);
playing = "Music1";
} else {
mciSendString(L"open MUSIC02.MID type sequencer alias Music2", NULL, 0, NULL);
mciSendString(L"play Music2", NULL, 0, NULL);
playing = "Music2";
}
}
Run Code Online (Sandbox Code Playgroud)
这很好用,除了它只播放一遍歌曲。我试图通过在 mci play 命令中添加“repeat”来循环播放,但它根本不播放任何内容。如何循环播放音乐?
我查看了MSDN上的多媒体命令字符串参考,发现
TCHAR tch[100];
mciSendString("status [alias] mode", tch, 100, NULL);
Run Code Online (Sandbox Code Playgroud)
会将 [alias] 是否正在播放或停止放入“tch”中。如果它停止了,我只需使用“seek [alias] to start”命令来重新加载 midi 文件。我应该提到,这会在计算或其他任何事情时导致延迟 - 因此,如果您不将其放在单独的线程中,您的程序将冻结。