Home | History | Annotate | Download | only in html
      1 <HTML
      2 ><HEAD
      3 ><TITLE
      4 >Audio Examples</TITLE
      5 ><META
      6 NAME="GENERATOR"
      7 CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
      8 "><LINK
      9 REL="HOME"
     10 TITLE="SDL Library Documentation"
     11 HREF="index.html"><LINK
     12 REL="UP"
     13 TITLE="Examples"
     14 HREF="guideexamples.html"><LINK
     15 REL="PREVIOUS"
     16 TITLE="Event Examples"
     17 HREF="guideeventexamples.html"><LINK
     18 REL="NEXT"
     19 TITLE="CDROM Examples"
     20 HREF="guidecdromexamples.html"></HEAD
     21 ><BODY
     22 CLASS="SECT1"
     23 BGCOLOR="#FFF8DC"
     24 TEXT="#000000"
     25 LINK="#0000ee"
     26 VLINK="#551a8b"
     27 ALINK="#ff0000"
     28 ><DIV
     29 CLASS="NAVHEADER"
     30 ><TABLE
     31 SUMMARY="Header navigation table"
     32 WIDTH="100%"
     33 BORDER="0"
     34 CELLPADDING="0"
     35 CELLSPACING="0"
     36 ><TR
     37 ><TH
     38 COLSPAN="3"
     39 ALIGN="center"
     40 >SDL Library Documentation</TH
     41 ></TR
     42 ><TR
     43 ><TD
     44 WIDTH="10%"
     45 ALIGN="left"
     46 VALIGN="bottom"
     47 ><A
     48 HREF="guideeventexamples.html"
     49 ACCESSKEY="P"
     50 >Prev</A
     51 ></TD
     52 ><TD
     53 WIDTH="80%"
     54 ALIGN="center"
     55 VALIGN="bottom"
     56 >Chapter 4. Examples</TD
     57 ><TD
     58 WIDTH="10%"
     59 ALIGN="right"
     60 VALIGN="bottom"
     61 ><A
     62 HREF="guidecdromexamples.html"
     63 ACCESSKEY="N"
     64 >Next</A
     65 ></TD
     66 ></TR
     67 ></TABLE
     68 ><HR
     69 ALIGN="LEFT"
     70 WIDTH="100%"></DIV
     71 ><DIV
     72 CLASS="SECT1"
     73 ><H1
     74 CLASS="SECT1"
     75 ><A
     76 NAME="GUIDEAUDIOEXAMPLES"
     77 ></A
     78 >Audio Examples</H1
     79 ><P
     80 ></P
     81 ><DIV
     82 CLASS="SECT2"
     83 ><H2
     84 CLASS="SECT2"
     85 ><A
     86 NAME="AEN382"
     87 ></A
     88 >Opening the audio device</H2
     89 ><P
     90 ><PRE
     91 CLASS="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(&#38;wanted, NULL) &#60; 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
    112 CLASS="SECT2"
    113 ><H2
    114 CLASS="SECT2"
    115 ><A
    116 NAME="AEN386"
    117 ></A
    118 >Playing audio</H2
    119 ><P
    120 ><PRE
    121 CLASS="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 &#62; 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 &#62; 0 ) {
    158         SDL_Delay(100);         /* Sleep 1/10 second */
    159     }
    160     SDL_CloseAudio();</PRE
    161 ></P
    162 ></DIV
    163 ></DIV
    164 ><DIV
    165 CLASS="NAVFOOTER"
    166 ><HR
    167 ALIGN="LEFT"
    168 WIDTH="100%"><TABLE
    169 SUMMARY="Footer navigation table"
    170 WIDTH="100%"
    171 BORDER="0"
    172 CELLPADDING="0"
    173 CELLSPACING="0"
    174 ><TR
    175 ><TD
    176 WIDTH="33%"
    177 ALIGN="left"
    178 VALIGN="top"
    179 ><A
    180 HREF="guideeventexamples.html"
    181 ACCESSKEY="P"
    182 >Prev</A
    183 ></TD
    184 ><TD
    185 WIDTH="34%"
    186 ALIGN="center"
    187 VALIGN="top"
    188 ><A
    189 HREF="index.html"
    190 ACCESSKEY="H"
    191 >Home</A
    192 ></TD
    193 ><TD
    194 WIDTH="33%"
    195 ALIGN="right"
    196 VALIGN="top"
    197 ><A
    198 HREF="guidecdromexamples.html"
    199 ACCESSKEY="N"
    200 >Next</A
    201 ></TD
    202 ></TR
    203 ><TR
    204 ><TD
    205 WIDTH="33%"
    206 ALIGN="left"
    207 VALIGN="top"
    208 >Event Examples</TD
    209 ><TD
    210 WIDTH="34%"
    211 ALIGN="center"
    212 VALIGN="top"
    213 ><A
    214 HREF="guideexamples.html"
    215 ACCESSKEY="U"
    216 >Up</A
    217 ></TD
    218 ><TD
    219 WIDTH="33%"
    220 ALIGN="right"
    221 VALIGN="top"
    222 >CDROM Examples</TD
    223 ></TR
    224 ></TABLE
    225 ></DIV
    226 ></BODY
    227 ></HTML
    228 >