我正在制作游戏,我正在使用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";
}
}
这很有效,除了它只播放一首歌。我尝试通过在mci play命令中添加“repeat”来循环它,但是它根本不会播放任何内容。我怎样才能循环播放音乐?
答案 0 :(得分:1)
我查看了MSDN上的多媒体命令字符串引用并找到了
TCHAR tch[100];
mciSendString("status [alias] mode", tch, 100, NULL);
会将[别名]播放还是停在“tch”中。如果它停止了,我只需使用“seek [alias] start”命令重新加载midi文件。我应该提一下,这会导致延迟,而东西是计算机或其他什么 - 所以如果你不把它放在一个单独的线程中,你的程序就会冻结。
答案 1 :(得分:0)
我知道我有点晚了但我刚刚遇到(并解决了)这个问题:
mciSendString("seek [alias] to start", tch, 100, NULL);
这适用于简单的.wav
文件,我认为它也适用于.mid
。
当我想播放打开的文件时,我只发送2个命令:
mciSendString("seek [alias] to start",NULL,100,NULL);
mciSendString("play [alias]",NULL,0,NULL);