Win32 - Midi looping with MCISendString
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播放命令中添加"repeat"来循环它,但它根本不播放任何东西。我如何循环播放音乐?
我查看了MSDN上的多媒体命令字符串参考,发现
TCHAR tch[100];
mciSendString("status [alias] mode", tch, 100, NULL);
将[alias]是否正在播放或停止放入"tch"。如果它停止了,我只需使用"seek [alias] to start"命令重新加载midi文件。我应该提到的是,这会导致延迟,当东西正在计算或其他-所以你的程序将冻结,如果你不把它放在一个单独的线程。
我知道我有点晚了但我刚刚遇到(并解决)了这个问题:
mciSendString("seek [alias] to start", tch, 100, NULL);
这适用于简单的.wav
文件,我想它也适用于.mid
。当我想播放打开的文件时,我只需发送两个命令:
mciSendString("seek [alias] to start",NULL,100,NULL);
mciSendString("play [alias]",NULL,0,NULL);
相关文章:
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- specialized std::default_delete with QQmlComponent
- VS2019 - Sudo Remote Debugging on Linux with Cmake project
- Inference pytorch C++ with alexnet and cv::imread image
- Pybind11: init<> with lambda
- Win32 - Midi looping with MCISendString