[sdlsound] SDL_Sound Win32 sample ?

R Bresner robert at simtrek.com
Wed Oct 2 07:36:11 EDT 2002


Ryan C. Gordon wrote:
>>Now, I'm trying now to make it more Windows friendly. That is,
>>I'm trying to use a timer callback for reading data instead of
>>the, for example, sdl_desired.callback.
>>SDL_OpenAudio fails with a NULL callback, however, and WM_TIMER
>>callbacks don't quit fit the sdl_desired world.
> 
> 
> The callback is running in a separate thread; do you really need to use a
> timer event?
> 
> --ryan.
> 
> 
> 

Howdy --

Well, I'm not very sure which is the best/right way to do it.

I think I may have figured out a way to do what I meant
I want to do... versus what I managed to write in my first email.
I'm using the WM_TIMER to SDL_Decode() and update my GUI.
Then I'm filling the stream from my buffer in the callback.

There's a bit of skipping tho, that I can't account for.
I've got samples=8129, decode buf=32786, audio buf=16384.
And a callback that looks like this:

void mp3AudioCallback(void *userdata, Uint8 *stream, int len)
{
	int bw;
	static int pos = 0;
	static Uint8 *bpos = 0;

	if( bpos == 0 ) {
		bpos = decoded_buffer;
	}

	if( pos + len > nBufferSize )
		len = nBufferSize - pos;
	
	memcpy(stream, bpos, len );
	bpos += len;
	pos += len;
	if( len == 0 ) {
		// finished playing buffer.
		SDL_PauseAudio(1);
	}
}

void *decoded_buffer and Uint32 nBufferSize are currently a couple
global vars.

So. Am I going about this entirely wrong? What is causing
the skipping? Why is the sky blue? Why do birds sing?

How many surrealists does it take to change a light bulb?
Pink elephant.

Thanks,

--
Rob




More information about the sdlsound mailing list