the function to call when the audio device needs more data; see Remarks for details

void*

userdata

a pointer that is passed to callback (otherwise ignored by SDL)

Code Examples

SDL_AudioSpecwant,have;SDL_AudioDeviceIDdev;SDL_memset(&want,0,sizeof(want));/* or SDL_zero(want) */want.freq=48000;want.format=AUDIO_F32;want.channels=2;want.samples=4096;want.callback=MyAudioCallback;// you wrote this function elsewhere.dev=SDL_OpenAudioDevice(NULL,0,&want,&have,SDL_AUDIO_ALLOW_FORMAT_CHANGE);

Remarks

freq specifies the number of sample frames sent to the sound device per second. Common values are 11025, 22050, 44100 and 48000. Larger values produce cleaner audio, in much the same way that larger resolutions produce cleaner graphics.

format specifies the size and type of each sample element and may be one of the following:

channels specifies the number of output channels. As of SDL 2.0, supported values are 1 (mono), 2 (stereo), 4 (quad), and 6 (5.1).

samples specifies a unit of audio data. When used with SDL_OpenAudioDevice() this refers to the size of the audio buffer in sample frames. A sample frame is a chunk of audio data of the size specified in format multiplied by the number of channels. When the SDL_AudioSpec is used with SDL_LoadWAV() samples is set to 4096. This field's value must be a power of two.

Channel data is interleaved. Stereo samples are stored in left/right ordering. Quad is stored in front-left/front-right/rear-left/rear-right order. 5.1 is stored in front-left/front-right/center/low-freq/rear-left/rear-right ordering ("low-freq" is the ".1" speaker).

The function prototype for callback is:

voidSDL_AudioCallback(void*userdata,Uint8*stream,intlen)

where its parameters are:

userdata

an application-specific parameter saved in the SDL_AudioSpec structure's userdata field

stream

a pointer to the audio data buffer filled in by SDL_AudioCallback()

len

the length of that buffer in bytes

Once the callback returns, the buffer will no longer be valid. Stereo samples are stored in a LRLRLR ordering.

The callback must completely initialize the buffer; as of SDL 2.0, this buffer is not initialized before the callback is called. If there is nothing to play, the callback should fill the buffer with silence.

With SDL >= 2.0.4 you can choose to avoid callbacks and use SDL_QueueAudio() instead, if you like. Just open your audio device with a NULL callback.