Win32-Midi looping с 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";
}
}
Это отлично работает, за исключением того, что он воспроизводит песню только один раз. Я попытался зациклить его, добавив "repeat" в команду воспроизведения mci, но тогда он вообще ничего не воспроизводит. Как я могу зациклить музыку?
2 ответа:
Я посмотрел ссылку на мультимедийную командную строку на MSDN и обнаружил, что
TCHAR tch[100]; mciSendString("status [alias] mode", tch, 100, NULL);
Положит ли [псевдоним] воспроизводится или остановлено на "ТСН". Если он остановлен, я просто использую команду "seek [alias] to 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);