| 1 | .TH "SDL_ConvertAudio" "3" "Tue 11 Sep 2001, 22:58" "SDL" "SDL API Reference" |
| 2 | .SH "NAME" |
| 3 | SDL_ConvertAudio \- Convert audio data to a desired audio format\&. |
| 4 | .SH "SYNOPSIS" |
| 5 | .PP |
| 6 | \fB#include "SDL\&.h" |
| 7 | .sp |
| 8 | \fBint \fBSDL_ConvertAudio\fP\fR(\fBSDL_AudioCVT *cvt\fR); |
| 9 | .SH "DESCRIPTION" |
| 10 | .PP |
| 11 | \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\&. |
| 12 | .PP |
| 13 | 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\&. |
| 14 | .PP |
| 15 | 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\&. |
| 16 | .SH "EXAMPLES" |
| 17 | .PP |
| 18 | .nf |
| 19 | \f(CW/* Converting some WAV data to hardware format */ |
| 20 | void my_audio_callback(void *userdata, Uint8 *stream, int len); |
| 21 | |
| 22 | SDL_AudioSpec *desired, *obtained; |
| 23 | SDL_AudioSpec wav_spec; |
| 24 | SDL_AudioCVT wav_cvt; |
| 25 | Uint32 wav_len; |
| 26 | Uint8 *wav_buf; |
| 27 | int ret; |
| 28 | |
| 29 | /* Allocated audio specs */ |
| 30 | desired=(SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); |
| 31 | obtained=(SDL_AudioSpec *)malloc(sizeof(SDL_AudioSpec)); |
| 32 | |
| 33 | /* Set desired format */ |
| 34 | desired->freq=22050; |
| 35 | desired->format=AUDIO_S16LSB; |
| 36 | desired->samples=8192; |
| 37 | desired->callback=my_audio_callback; |
| 38 | desired->userdata=NULL; |
| 39 | |
| 40 | /* Open the audio device */ |
| 41 | if ( SDL_OpenAudio(desired, obtained) < 0 ){ |
| 42 | fprintf(stderr, "Couldn\&'t open audio: %s |
| 43 | ", SDL_GetError()); |
| 44 | exit(-1); |
| 45 | } |
| 46 | |
| 47 | free(desired); |
| 48 | |
| 49 | /* Load the test\&.wav */ |
| 50 | if( SDL_LoadWAV("test\&.wav", &wav_spec, &wav_buf, &wav_len) == NULL ){ |
| 51 | fprintf(stderr, "Could not open test\&.wav: %s |
| 52 | ", SDL_GetError()); |
| 53 | SDL_CloseAudio(); |
| 54 | free(obtained); |
| 55 | exit(-1); |
| 56 | } |
| 57 | |
| 58 | /* Build AudioCVT */ |
| 59 | ret = SDL_BuildAudioCVT(&wav_cvt, |
| 60 | wav_spec\&.format, wav_spec\&.channels, wav_spec\&.freq, |
| 61 | obtained->format, obtained->channels, obtained->freq); |
| 62 | |
| 63 | /* Check that the convert was built */ |
| 64 | if(ret==-1){ |
| 65 | fprintf(stderr, "Couldn\&'t build converter! |
| 66 | "); |
| 67 | SDL_CloseAudio(); |
| 68 | free(obtained); |
| 69 | SDL_FreeWAV(wav_buf); |
| 70 | } |
| 71 | |
| 72 | /* Setup for conversion */ |
| 73 | wav_cvt\&.buf=(Uint8 *)malloc(wav_len*wav_cvt\&.len_mult); |
| 74 | wav_cvt\&.len=wav_len; |
| 75 | memcpy(wav_cvt\&.buf, wav_buf, wav_len); |
| 76 | |
| 77 | /* We can delete to original WAV data now */ |
| 78 | SDL_FreeWAV(wav_buf); |
| 79 | |
| 80 | /* And now we\&'re ready to convert */ |
| 81 | SDL_ConvertAudio(&wav_cvt); |
| 82 | |
| 83 | /* do whatever */ |
| 84 | \&. |
| 85 | \&. |
| 86 | \&. |
| 87 | \&. |
| 88 | |
| 89 | \fR |
| 90 | .fi |
| 91 | .PP |
| 92 | .SH "SEE ALSO" |
| 93 | .PP |
| 94 | \fI\fBSDL_BuildAudioCVT\fP\fR, \fI\fBSDL_AudioCVT\fP\fR |
| 95 | .\" created by instant / docbook-to-man, Tue 11 Sep 2001, 22:58 |