繁体   English   中英

Win32 - 使用MCISendString进行Midi循环

[英]Win32 - Midi looping with MCISendString

我正在制作游戏,我正在使用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”来循环它,但是它根本不会播放任何内容。 我怎样才能循环播放音乐?

我查看了MSDN上的多媒体命令字符串参考,并发现了这一点

TCHAR tch[100];
mciSendString("status [alias] mode", tch, 100, NULL);

将[别名]播放或停止为“tch”。 如果它停止了,我只需使用“seek [alias] start”命令重新加载midi文件。 我应该提一下,这会导致延迟,而东西是计算或其他什么 - 所以如果你不把它放在一个单独的线程中,你的程序将会冻结。

我知道我有点晚了,但我刚刚遇到(并解决了)这个问题:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM