Search code examples
c++user-interfacesdlsdl-mixer

I have an unintended delay in playing a Mix_Chunk


So I am trying to learn SDL and creating a small game. When the user presses the space bar, it should play a sound. This works, but the sound takes about .5 seconds to play... How would I fix this? I've checked the actual file to see if the delay was just part of it, and that turned out to not be the case.

SDL with c++ on win vista.

Here's some relevant code:

...
Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 )
...

    main() 
    {

    ...

    Mix_PlayMusic( BG_Music, 0 );   //background music

        while( quit == false )
        {
            fps.start();
            fire.handleInput( event, ship.get_x_pos() );
    ...
    }

the handle input function:

void lasersC::handleInput( SDL_Event &event, int x )
{
    Uint8 *keystates = SDL_GetKeyState( NULL );

    if ( keystates[ SDLK_SPACE ] && delay == 0)
    {
        Mix_PlayChannel(-1, laser, 0);
        fired * F = new fired( NULL, S_HEIGHT - 50, x + 20 );

        F->shot  = lasers;
        F->y_pos = S_HEIGHT - 50;
        F->x_pos = x + 20;

        weps.push_back( F );
        delay = 10;
    }
}

If more is needed, let me know.


Solution

  • There is usually a check for DirectX headers when compiling SDL (apparently)

    Can you try to recompile with DirectX support?

    Also, how much buffering are you enforcing at the client side? It may be a problem with that.

    EDIT - After the comments below:

    1. Try to increase the size of your buffer.
    2. What I mean by recompiling with DirectX support is, try to include headers from the following source so that SDL skips checking for them. http://www.libsdl.org/extras/win32/common/directx-devel.tar.gz