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