I'm making a game, and I'm using midi files for the background music. Here's the code I'm currently using:
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";
}
}
This works great, except it only plays the song once through. I tried to loop it by adding "repeat" in the mci play command, but then it doesn't play anything at all. How can I loop the music?
I looked at the multimedia command string reference on MSDN and found out that
TCHAR tch[100];
mciSendString("status [alias] mode", tch, 100, NULL);
will put whether [alias] is playing or stopped into "tch". If it's stopped, I just use the "seek [alias] to start" command to reload the midi file. I should mention that this causes a delay while stuff is computing or whatever - so your program will freeze if you don't put this in a separate thread.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With