This function opens the audio device with the desired parameters, and returns 0 if successful, placing
the actual hardware parameters in the structure pointed to by obtained. If obtained is NULL, the audio
data passed to the callback function will be guaranteed to be in the requested format, and will be
automatically converted to the hardware audio format if necessary. This function returns -1 if it failed
to open the audio device, or couldn't set up the audio thread.
To open the audio device a desiredSDL_AudioSpec must be created.
SDL_AudioSpec *desired;
.
.
desired=(SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec));
You must then fill this structure with your desired audio specifications.
desired->freqdesired->formatdesired->samplesdesired->callback
void callback(void *userdata, Uint8 *stream, int len);
userdata is the pointer stored in userdata field of the SDL_AudioSpec. stream is a pointer to the audio
buffer you want to fill with information and len is the length of the audio buffer in bytes.
desired->userdataSDL_OpenAudio reads these fields from the desiredSDL_AudioSpec structure pass to the function and
attempts to find an audio configuration matching your desired. As mentioned above, if the obtained
parameter is NULL then SDL with convert from your desired audio settings to the hardware settings as it
plays.
If obtained is NULL then the desiredSDL_AudioSpec is your working specification, otherwise the obtainedSDL_AudioSpec becomes the working specification and the desirec specification can be deleted. The data in
the working specification is used when building SDL_AudioCVT's for converting loaded data to the hardware
format.
SDL_OpenAudio calculates the size and silence fields for both the desired and obtained specifications.
The size field stores the total size of the audio buffer in bytes, while the silence stores the value
used to represent silence in the audio buffer
The audio device starts out playing silence when it's opened, and should be enabled for playing by
calling SDL_PauseAudio(0) when you are ready for your audio callback function to be called. Since the
audio driver may modify the requested size of the audio buffer, you should allocate any local mixing
buffers after you open the audio device.