Take the 2-minute tour ×

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?

share|improve this question
The repeat option is not documented to work for the sequencer. This can get ugly in a hurry, do consider using one of the many audio libraries. –  Hans Passant May 30 '13 at 11:20
add comment

1 Answer

up vote 0 down vote accepted

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.

share|improve this answer
add comment

Your Answer


