Tao.Sdl SDK Documentation

Sdl.SDL_ConvertAudio Method 

Convert audio data to a desired audio format.

[Visual Basic]
Public Shared Function SDL_ConvertAudio( _
   ByVal cvt As IntPtr _
) As Integer
[C#]
public static int SDL_ConvertAudio(
   IntPtr cvt
);

Parameters

cvt
IntPtr to Sdl.SDL_AudioCVT struct.

Return Value

If SDL_ConvertAudio returned 0 then the conversion was completed successfully, otherwise -1 is returned.

Remarks

SDL_ConvertAudio takes one parameter, cvt, which was previously initialized. Initilizing a Sdl.SDL_AudioCVT is a two step process. First of all, the structure must be passed to SDL_BuildAudioCVT along with source and destination format parameters. Secondly, the cvt->buf and cvt->len fields must be setup. cvt->buf should point to the audio data and cvt->len should be set to the length of the audio data in bytes. Remember, the length of the buffer pointed to by buf show be len*len_mult bytes in length.

Once the SDL_AudioCVTstructure is initilized then we can pass it to SDL_ConvertAudio, which will convert the audio data pointer to by cvt->buf. If SDL_ConvertAudio returned 0 then the conversion was completed successfully, otherwise -1 is returned.

If the conversion completed successfully then the converted audio data can be read from cvt->buf. The amount of valid, converted, audio data in the buffer is equal to cvt->len*cvt->len_ratio.

            int SDL_ConvertAudio(SDL_AudioCVT *cvt)
            

Example

            /* 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 = malloc(sizeof(SDL_AudioSpec));
                    obtained = 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\n", 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\n", 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!\n");
                SDL_CloseAudio();
                free(obtained);
                SDL_FreeWAV(wav_buf);
            }
                /* Setup for conversion */
                wav_cvt.buf = 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 */
                .
                .
                .
                .
            

See Also

Sdl Class | Tao.Sdl Namespace | Sdl.SDL_AudioCVT | SDL_BuildAudioCVT