1<HTML 2><HEAD 3><TITLE 4>Audio Examples</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="Examples" 14HREF="guideexamples.html"><LINK 15REL="PREVIOUS" 16TITLE="Event Examples" 17HREF="guideeventexamples.html"><LINK 18REL="NEXT" 19TITLE="CDROM Examples" 20HREF="guidecdromexamples.html"></HEAD 21><BODY 22CLASS="SECT1" 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="guideeventexamples.html" 49ACCESSKEY="P" 50>Prev</A 51></TD 52><TD 53WIDTH="80%" 54ALIGN="center" 55VALIGN="bottom" 56>Chapter 4. Examples</TD 57><TD 58WIDTH="10%" 59ALIGN="right" 60VALIGN="bottom" 61><A 62HREF="guidecdromexamples.html" 63ACCESSKEY="N" 64>Next</A 65></TD 66></TR 67></TABLE 68><HR 69ALIGN="LEFT" 70WIDTH="100%"></DIV 71><DIV 72CLASS="SECT1" 73><H1 74CLASS="SECT1" 75><A 76NAME="GUIDEAUDIOEXAMPLES" 77></A 78>Audio Examples</H1 79><P 80></P 81><DIV 82CLASS="SECT2" 83><H2 84CLASS="SECT2" 85><A 86NAME="AEN382" 87></A 88>Opening the audio device</H2 89><P 90><PRE 91CLASS="PROGRAMLISTING" 92> SDL_AudioSpec wanted; 93 extern void fill_audio(void *udata, Uint8 *stream, int len); 94 95 /* Set the audio format */ 96 wanted.freq = 22050; 97 wanted.format = AUDIO_S16; 98 wanted.channels = 2; /* 1 = mono, 2 = stereo */ 99 wanted.samples = 1024; /* Good low-latency value for callback */ 100 wanted.callback = fill_audio; 101 wanted.userdata = NULL; 102 103 /* Open the audio device, forcing the desired format */ 104 if ( SDL_OpenAudio(&wanted, NULL) < 0 ) { 105 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); 106 return(-1); 107 } 108 return(0);</PRE 109></P 110></DIV 111><DIV 112CLASS="SECT2" 113><H2 114CLASS="SECT2" 115><A 116NAME="AEN386" 117></A 118>Playing audio</H2 119><P 120><PRE 121CLASS="PROGRAMLISTING" 122> static Uint8 *audio_chunk; 123 static Uint32 audio_len; 124 static Uint8 *audio_pos; 125 126 /* The audio function callback takes the following parameters: 127 stream: A pointer to the audio buffer to be filled 128 len: The length (in bytes) of the audio buffer 129 */ 130 void fill_audio(void *udata, Uint8 *stream, int len) 131 { 132 /* Only play if we have data left */ 133 if ( audio_len == 0 ) 134 return; 135 136 /* Mix as much data as possible */ 137 len = ( len > audio_len ? audio_len : len ); 138 SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME); 139 audio_pos += len; 140 audio_len -= len; 141 } 142 143 /* Load the audio data ... */ 144 145 ;;;;; 146 147 audio_pos = audio_chunk; 148 149 /* Let the callback function play the audio chunk */ 150 SDL_PauseAudio(0); 151 152 /* Do some processing */ 153 154 ;;;;; 155 156 /* Wait for sound to complete */ 157 while ( audio_len > 0 ) { 158 SDL_Delay(100); /* Sleep 1/10 second */ 159 } 160 SDL_CloseAudio();</PRE 161></P 162></DIV 163></DIV 164><DIV 165CLASS="NAVFOOTER" 166><HR 167ALIGN="LEFT" 168WIDTH="100%"><TABLE 169SUMMARY="Footer navigation table" 170WIDTH="100%" 171BORDER="0" 172CELLPADDING="0" 173CELLSPACING="0" 174><TR 175><TD 176WIDTH="33%" 177ALIGN="left" 178VALIGN="top" 179><A 180HREF="guideeventexamples.html" 181ACCESSKEY="P" 182>Prev</A 183></TD 184><TD 185WIDTH="34%" 186ALIGN="center" 187VALIGN="top" 188><A 189HREF="index.html" 190ACCESSKEY="H" 191>Home</A 192></TD 193><TD 194WIDTH="33%" 195ALIGN="right" 196VALIGN="top" 197><A 198HREF="guidecdromexamples.html" 199ACCESSKEY="N" 200>Next</A 201></TD 202></TR 203><TR 204><TD 205WIDTH="33%" 206ALIGN="left" 207VALIGN="top" 208>Event Examples</TD 209><TD 210WIDTH="34%" 211ALIGN="center" 212VALIGN="top" 213><A 214HREF="guideexamples.html" 215ACCESSKEY="U" 216>Up</A 217></TD 218><TD 219WIDTH="33%" 220ALIGN="right" 221VALIGN="top" 222>CDROM Examples</TD 223></TR 224></TABLE 225></DIV 226></BODY 227></HTML 228>