Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Win32 - Midi looping with MCISendString

Tags:

c++

winapi

audio

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?

like image 845
Brian Gradin Avatar asked Nov 02 '22 21:11

Brian Gradin


1 Answers

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.

like image 158
Brian Gradin Avatar answered Nov 12 '22 21:11

Brian Gradin