Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SDL_ConvertAudio(3)		SDL API Reference	     SDL_ConvertAudio(3)

NAME
     SDL_ConvertAudio - Convert audio data to a desired audio format.

SYNOPSIS
     #include "SDL.h"

     int SDL_ConvertAudio(SDL_AudioCVT *cvt);

DESCRIPTION
     SDL_ConvertAudio takes one parameter, cvt, which was previously initilized.
     Initilizing  a SDL_AudioCVT is a two step process. First of all, the struc-
     ture 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 success-
     fully, 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.

EXAMPLES
     /* 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 */
     .
     .
     .
     .

SEE ALSO
     SDL_BuildAudioCVT, SDL_AudioCVT

SDL			     Tue 11 Sep 2001, 22:58	     SDL_ConvertAudio(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=SDL_ConvertAudio&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help