1<HTML 2><HEAD 3><TITLE 4>SDL_ConvertAudio</TITLE 5><META 6NAME="GENERATOR" 7CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ 8"><LINK 9REL="HOME" 10TITLE="SDL Library Documentation" 11HREF="index.html"><LINK 12REL="UP" 13TITLE="Audio" 14HREF="audio.html"><LINK 15REL="PREVIOUS" 16TITLE="SDL_BuildAudioCVT" 17HREF="sdlbuildaudiocvt.html"><LINK 18REL="NEXT" 19TITLE="SDL_MixAudio" 20HREF="sdlmixaudio.html"></HEAD 21><BODY 22CLASS="REFENTRY" 23BGCOLOR="#FFF8DC" 24TEXT="#000000" 25LINK="#0000ee" 26VLINK="#551a8b" 27ALINK="#ff0000" 28><DIV 29CLASS="NAVHEADER" 30><TABLE 31SUMMARY="Header navigation table" 32WIDTH="100%" 33BORDER="0" 34CELLPADDING="0" 35CELLSPACING="0" 36><TR 37><TH 38COLSPAN="3" 39ALIGN="center" 40>SDL Library Documentation</TH 41></TR 42><TR 43><TD 44WIDTH="10%" 45ALIGN="left" 46VALIGN="bottom" 47><A 48HREF="sdlbuildaudiocvt.html" 49ACCESSKEY="P" 50>Prev</A 51></TD 52><TD 53WIDTH="80%" 54ALIGN="center" 55VALIGN="bottom" 56></TD 57><TD 58WIDTH="10%" 59ALIGN="right" 60VALIGN="bottom" 61><A 62HREF="sdlmixaudio.html" 63ACCESSKEY="N" 64>Next</A 65></TD 66></TR 67></TABLE 68><HR 69ALIGN="LEFT" 70WIDTH="100%"></DIV 71><H1 72><A 73NAME="SDLCONVERTAUDIO" 74></A 75>SDL_ConvertAudio</H1 76><DIV 77CLASS="REFNAMEDIV" 78><A 79NAME="AEN7048" 80></A 81><H2 82>Name</H2 83>SDL_ConvertAudio -- Convert audio data to a desired audio format.</DIV 84><DIV 85CLASS="REFSYNOPSISDIV" 86><A 87NAME="AEN7051" 88></A 89><H2 90>Synopsis</H2 91><DIV 92CLASS="FUNCSYNOPSIS" 93><A 94NAME="AEN7052" 95></A 96><P 97></P 98><PRE 99CLASS="FUNCSYNOPSISINFO" 100>#include "SDL.h"</PRE 101><P 102><CODE 103><CODE 104CLASS="FUNCDEF" 105>int <B 106CLASS="FSFUNC" 107>SDL_ConvertAudio</B 108></CODE 109>(SDL_AudioCVT *cvt);</CODE 110></P 111><P 112></P 113></DIV 114></DIV 115><DIV 116CLASS="REFSECT1" 117><A 118NAME="AEN7058" 119></A 120><H2 121>Description</H2 122><P 123><TT 124CLASS="FUNCTION" 125>SDL_ConvertAudio</TT 126> takes one parameter, <TT 127CLASS="PARAMETER" 128><I 129>cvt</I 130></TT 131>, which was previously initilized. Initilizing a <A 132HREF="sdlaudiocvt.html" 133><SPAN 134CLASS="STRUCTNAME" 135>SDL_AudioCVT</SPAN 136></A 137> is a two step process. First of all, the structure must be passed to <A 138HREF="sdlbuildaudiocvt.html" 139><TT 140CLASS="FUNCTION" 141>SDL_BuildAudioCVT</TT 142></A 143> along with source and destination format parameters. Secondly, the <SPAN 144CLASS="STRUCTNAME" 145>cvt</SPAN 146>-><TT 147CLASS="STRUCTFIELD" 148><I 149>buf</I 150></TT 151> and <SPAN 152CLASS="STRUCTNAME" 153>cvt</SPAN 154>-><TT 155CLASS="STRUCTFIELD" 156><I 157>len</I 158></TT 159> fields must be setup. <SPAN 160CLASS="STRUCTNAME" 161>cvt</SPAN 162>-><TT 163CLASS="STRUCTFIELD" 164><I 165>buf</I 166></TT 167> should point to the audio data and <SPAN 168CLASS="STRUCTNAME" 169>cvt</SPAN 170>-><TT 171CLASS="STRUCTFIELD" 172><I 173>len</I 174></TT 175> should be set to the length of the audio data in bytes. Remember, the length of the buffer pointed to by <TT 176CLASS="STRUCTFIELD" 177><I 178>buf</I 179></TT 180> show be <TT 181CLASS="STRUCTFIELD" 182><I 183>len</I 184></TT 185>*<TT 186CLASS="STRUCTFIELD" 187><I 188>len_mult</I 189></TT 190> bytes in length.</P 191><P 192>Once the <SPAN 193CLASS="STRUCTNAME" 194>SDL_AudioCVT</SPAN 195>structure is initilized then we can pass it to <TT 196CLASS="FUNCTION" 197>SDL_ConvertAudio</TT 198>, which will convert the audio data pointer to by <SPAN 199CLASS="STRUCTNAME" 200>cvt</SPAN 201>-><TT 202CLASS="STRUCTFIELD" 203><I 204>buf</I 205></TT 206>. If <TT 207CLASS="FUNCTION" 208>SDL_ConvertAudio</TT 209> returned <SPAN 210CLASS="RETURNVALUE" 211>0</SPAN 212> then the conversion was completed successfully, otherwise <SPAN 213CLASS="RETURNVALUE" 214>-1</SPAN 215> is returned.</P 216><P 217>If the conversion completed successfully then the converted audio data can be read from <SPAN 218CLASS="STRUCTNAME" 219>cvt</SPAN 220>-><TT 221CLASS="STRUCTFIELD" 222><I 223>buf</I 224></TT 225>. The amount of valid, converted, audio data in the buffer is equal to <SPAN 226CLASS="STRUCTNAME" 227>cvt</SPAN 228>-><TT 229CLASS="STRUCTFIELD" 230><I 231>len</I 232></TT 233>*<TT 234CLASS="STRUCTFIELD" 235><I 236>cvt</I 237></TT 238>-><SPAN 239CLASS="STRUCTNAME" 240>len_ratio</SPAN 241>.</P 242></DIV 243><DIV 244CLASS="REFSECT1" 245><A 246NAME="AEN7093" 247></A 248><H2 249>Examples</H2 250><PRE 251CLASS="PROGRAMLISTING" 252>/* Converting some WAV data to hardware format */ 253void my_audio_callback(void *userdata, Uint8 *stream, int len); 254 255SDL_AudioSpec *desired, *obtained; 256SDL_AudioSpec wav_spec; 257SDL_AudioCVT wav_cvt; 258Uint32 wav_len; 259Uint8 *wav_buf; 260int ret; 261 262/* Allocated audio specs */ 263desired = malloc(sizeof(SDL_AudioSpec)); 264obtained = malloc(sizeof(SDL_AudioSpec)); 265 266/* Set desired format */ 267desired->freq=22050; 268desired->format=AUDIO_S16LSB; 269desired->samples=8192; 270desired->callback=my_audio_callback; 271desired->userdata=NULL; 272 273/* Open the audio device */ 274if ( SDL_OpenAudio(desired, obtained) < 0 ){ 275 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); 276 exit(-1); 277} 278 279free(desired); 280 281/* Load the test.wav */ 282if( SDL_LoadWAV("test.wav", &wav_spec, &wav_buf, &wav_len) == NULL ){ 283 fprintf(stderr, "Could not open test.wav: %s\n", SDL_GetError()); 284 SDL_CloseAudio(); 285 free(obtained); 286 exit(-1); 287} 288 289/* Build AudioCVT */ 290ret = SDL_BuildAudioCVT(&wav_cvt, 291 wav_spec.format, wav_spec.channels, wav_spec.freq, 292 obtained->format, obtained->channels, obtained->freq); 293 294/* Check that the convert was built */ 295if(ret==-1){ 296 fprintf(stderr, "Couldn't build converter!\n"); 297 SDL_CloseAudio(); 298 free(obtained); 299 SDL_FreeWAV(wav_buf); 300} 301 302/* Setup for conversion */ 303wav_cvt.buf = malloc(wav_len * wav_cvt.len_mult); 304wav_cvt.len = wav_len; 305memcpy(wav_cvt.buf, wav_buf, wav_len); 306 307/* We can delete to original WAV data now */ 308SDL_FreeWAV(wav_buf); 309 310/* And now we're ready to convert */ 311SDL_ConvertAudio(&wav_cvt); 312 313/* do whatever */ 314. 315. 316. 317. 318 </PRE 319></DIV 320><DIV 321CLASS="REFSECT1" 322><A 323NAME="AEN7096" 324></A 325><H2 326>See Also</H2 327><P 328><A 329HREF="sdlbuildaudiocvt.html" 330><TT 331CLASS="FUNCTION" 332>SDL_BuildAudioCVT</TT 333></A 334>, 335<A 336HREF="sdlaudiocvt.html" 337><TT 338CLASS="FUNCTION" 339>SDL_AudioCVT</TT 340></A 341></P 342></DIV 343><DIV 344CLASS="NAVFOOTER" 345><HR 346ALIGN="LEFT" 347WIDTH="100%"><TABLE 348SUMMARY="Footer navigation table" 349WIDTH="100%" 350BORDER="0" 351CELLPADDING="0" 352CELLSPACING="0" 353><TR 354><TD 355WIDTH="33%" 356ALIGN="left" 357VALIGN="top" 358><A 359HREF="sdlbuildaudiocvt.html" 360ACCESSKEY="P" 361>Prev</A 362></TD 363><TD 364WIDTH="34%" 365ALIGN="center" 366VALIGN="top" 367><A 368HREF="index.html" 369ACCESSKEY="H" 370>Home</A 371></TD 372><TD 373WIDTH="33%" 374ALIGN="right" 375VALIGN="top" 376><A 377HREF="sdlmixaudio.html" 378ACCESSKEY="N" 379>Next</A 380></TD 381></TR 382><TR 383><TD 384WIDTH="33%" 385ALIGN="left" 386VALIGN="top" 387>SDL_BuildAudioCVT</TD 388><TD 389WIDTH="34%" 390ALIGN="center" 391VALIGN="top" 392><A 393HREF="audio.html" 394ACCESSKEY="U" 395>Up</A 396></TD 397><TD 398WIDTH="33%" 399ALIGN="right" 400VALIGN="top" 401>SDL_MixAudio</TD 402></TR 403></TABLE 404></DIV 405></BODY 406></HTML 407>