| .TH "SDL_ConvertAudio" "3" "Tue 11 Sep 2001, 22:58" "SDL" "SDL API Reference" |
| .SH "NAME" |
| SDL_ConvertAudio \- Convert audio data to a desired audio format\&. |
| .SH "SYNOPSIS" |
| .PP |
| \fB#include "SDL\&.h" |
| .sp |
| \fBint \fBSDL_ConvertAudio\fP\fR(\fBSDL_AudioCVT *cvt\fR); |
| .SH "DESCRIPTION" |
| .PP |
| \fBSDL_ConvertAudio\fP takes one parameter, \fBcvt\fR, which was previously initilized\&. Initilizing a \fI\fBSDL_AudioCVT\fR\fR is a two step process\&. First of all, the structure must be passed to \fI\fBSDL_BuildAudioCVT\fP\fR along with source and destination format parameters\&. Secondly, the \fBcvt\fR->\fBbuf\fR and \fBcvt\fR->\fBlen\fR fields must be setup\&. \fBcvt\fR->\fBbuf\fR should point to the audio data and \fBcvt\fR->\fBlen\fR should be set to the length of the audio data in bytes\&. Remember, the length of the buffer pointed to by \fBbuf\fR show be \fBlen\fR*\fBlen_mult\fR bytes in length\&. |
| .PP |
| Once the \fBSDL_AudioCVT\fRstructure is initilized then we can pass it to \fBSDL_ConvertAudio\fP, which will convert the audio data pointer to by \fBcvt\fR->\fBbuf\fR\&. If \fBSDL_ConvertAudio\fP returned \fB0\fR then the conversion was completed successfully, otherwise \fB-1\fR is returned\&. |
| .PP |
| If the conversion completed successfully then the converted audio data can be read from \fBcvt\fR->\fBbuf\fR\&. The amount of valid, converted, audio data in the buffer is equal to \fBcvt\fR->\fBlen\fR*\fBcvt\fR->\fBlen_ratio\fR\&. |
| .SH "EXAMPLES" |
| .PP |
| .nf |
| \f(CW/* Converting some WAV data to hardware format */ |
| void my_audio_callback(void *userdata, Uint8 *stream, int len); |
| |
| SDL_AudioSpec *desired, *obtained; |
| SDL_AudioSpec wav_spec; |
| SDL_AudioCVT wav_cvt; |
| Uint32 wav_len; |
| Uint8 *wav_buf; |
| int ret; |
| |
| /* Allocated audio specs */ |
| desired=(SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); |
| obtained=(SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); |
| |
| /* Set desired format */ |
| desired->freq=22050; |
| desired->format=AUDIO_S16LSB; |
| desired->samples=8192; |
| desired->callback=my_audio_callback; |
| desired->userdata=NULL; |
| |
| /* Open the audio device */ |
| if ( SDL_OpenAudio(desired, obtained) < 0 ){ |
| fprintf(stderr, "Couldn\&'t open audio: %s |
| ", SDL_GetError()); |
| exit(-1); |
| } |
| |
| free(desired); |
| |
| /* Load the test\&.wav */ |
| if( SDL_LoadWAV("test\&.wav", &wav_spec, &wav_buf, &wav_len) == NULL ){ |
| fprintf(stderr, "Could not open test\&.wav: %s |
| ", SDL_GetError()); |
| SDL_CloseAudio(); |
| free(obtained); |
| exit(-1); |
| } |
| |
| /* Build AudioCVT */ |
| ret = SDL_BuildAudioCVT(&wav_cvt, |
| wav_spec\&.format, wav_spec\&.channels, wav_spec\&.freq, |
| obtained->format, obtained->channels, obtained->freq); |
| |
| /* Check that the convert was built */ |
| if(ret==-1){ |
| fprintf(stderr, "Couldn\&'t build converter! |
| "); |
| SDL_CloseAudio(); |
| free(obtained); |
| SDL_FreeWAV(wav_buf); |
| } |
| |
| /* Setup for conversion */ |
| wav_cvt\&.buf=(Uint8 *)malloc(wav_len*wav_cvt\&.len_mult); |
| wav_cvt\&.len=wav_len; |
| memcpy(wav_cvt\&.buf, wav_buf, wav_len); |
| |
| /* We can delete to original WAV data now */ |
| SDL_FreeWAV(wav_buf); |
| |
| /* And now we\&'re ready to convert */ |
| SDL_ConvertAudio(&wav_cvt); |
| |
| /* do whatever */ |
| \&. |
| \&. |
| \&. |
| \&. |
| |
| \fR |
| .fi |
| .PP |
| .SH "SEE ALSO" |
| .PP |
| \fI\fBSDL_BuildAudioCVT\fP\fR, \fI\fBSDL_AudioCVT\fP\fR |
| .\" created by instant / docbook-to-man, Tue 11 Sep 2001, 22:58 |