home *** CD-ROM | disk | FTP | other *** search
- <HTML
- ><HEAD
- ><TITLE
- >Audio Examples</TITLE
- ><META
- NAME="GENERATOR"
- CONTENT="Modular DocBook HTML Stylesheet Version 1.64
- "><LINK
- REL="HOME"
- TITLE="SDL Library Documentation"
- HREF="index.html"><LINK
- REL="UP"
- TITLE="Examples"
- HREF="guideexamples.html"><LINK
- REL="PREVIOUS"
- TITLE="Event Examples"
- HREF="guideeventexamples.html"><LINK
- REL="NEXT"
- TITLE="CDROM Examples"
- HREF="guidecdromexamples.html"></HEAD
- ><BODY
- CLASS="SECT1"
- BGCOLOR="#FFF8DC"
- TEXT="#000000"
- LINK="#0000ee"
- VLINK="#551a8b"
- ALINK="#ff0000"
- ><DIV
- CLASS="NAVHEADER"
- ><TABLE
- WIDTH="100%"
- BORDER="0"
- CELLPADDING="0"
- CELLSPACING="0"
- ><TR
- ><TH
- COLSPAN="3"
- ALIGN="center"
- >SDL Library Documentation</TH
- ></TR
- ><TR
- ><TD
- WIDTH="10%"
- ALIGN="left"
- VALIGN="bottom"
- ><A
- HREF="guideeventexamples.html"
- >Prev</A
- ></TD
- ><TD
- WIDTH="80%"
- ALIGN="center"
- VALIGN="bottom"
- >Chapter 4. Examples</TD
- ><TD
- WIDTH="10%"
- ALIGN="right"
- VALIGN="bottom"
- ><A
- HREF="guidecdromexamples.html"
- >Next</A
- ></TD
- ></TR
- ></TABLE
- ><HR
- ALIGN="LEFT"
- WIDTH="100%"></DIV
- ><DIV
- CLASS="SECT1"
- ><H1
- CLASS="SECT1"
- ><A
- NAME="GUIDEAUDIOEXAMPLES"
- >Audio Examples</A
- ></H1
- ><P
- ></P
- ><DIV
- CLASS="SECT2"
- ><H2
- CLASS="SECT2"
- ><A
- NAME="AEN415"
- >Opening the audio device</A
- ></H2
- ><P
- ><PRE
- CLASS="PROGRAMLISTING"
- > SDL_AudioSpec wanted;
- extern void fill_audio(void *udata, Uint8 *stream, int len);
-
- /* Set the audio format */
- wanted.freq = 22050;
- wanted.format = AUDIO_S16;
- wanted.channels = 2; /* 1 = mono, 2 = stereo */
- wanted.samples = 1024; /* Good low-latency value for callback */
- wanted.callback = fill_audio;
- wanted.userdata = NULL;
-
- /* Open the audio device, forcing the desired format */
- if ( SDL_OpenAudio(&wanted, NULL) < 0 ) {
- fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
- return(-1);
- }
- return(0);</PRE
- ></P
- ></DIV
- ><DIV
- CLASS="SECT2"
- ><H2
- CLASS="SECT2"
- ><A
- NAME="AEN419"
- >Playing audio</A
- ></H2
- ><P
- ><PRE
- CLASS="PROGRAMLISTING"
- > static Uint8 *audio_chunk;
- static Uint32 audio_len;
- static Uint8 *audio_pos;
-
- /* The audio function callback takes the following parameters:
- stream: A pointer to the audio buffer to be filled
- len: The length (in bytes) of the audio buffer
- */
- void fill_audio(void *udata, Uint8 *stream, int len)
- {
- /* Only play if we have data left */
- if ( audio_len == 0 )
- return;
-
- /* Mix as much data as possible */
- len = ( len > audio_len ? audio_len : len );
- SDL_MixAudio(stream, audio_pos, len, SDL_MIX_MAXVOLUME)
- audio_pos += len;
- audio_len -= len;
- }
-
- /* Load the audio data ... */
-
- ;;;;;
-
- audio_pos = audio_chunk;
-
- /* Let the callback function play the audio chunk */
- SDL_PauseAudio(0);
-
- /* Do some processing */
-
- ;;;;;
-
- /* Wait for sound to complete */
- while ( audio_len > 0 ) {
- SDL_Delay(100); /* Sleep 1/10 second */
- }
- SDL_CloseAudio();</PRE
- ></P
- ></DIV
- ></DIV
- ><DIV
- CLASS="NAVFOOTER"
- ><HR
- ALIGN="LEFT"
- WIDTH="100%"><TABLE
- WIDTH="100%"
- BORDER="0"
- CELLPADDING="0"
- CELLSPACING="0"
- ><TR
- ><TD
- WIDTH="33%"
- ALIGN="left"
- VALIGN="top"
- ><A
- HREF="guideeventexamples.html"
- >Prev</A
- ></TD
- ><TD
- WIDTH="34%"
- ALIGN="center"
- VALIGN="top"
- ><A
- HREF="index.html"
- >Home</A
- ></TD
- ><TD
- WIDTH="33%"
- ALIGN="right"
- VALIGN="top"
- ><A
- HREF="guidecdromexamples.html"
- >Next</A
- ></TD
- ></TR
- ><TR
- ><TD
- WIDTH="33%"
- ALIGN="left"
- VALIGN="top"
- >Event Examples</TD
- ><TD
- WIDTH="34%"
- ALIGN="center"
- VALIGN="top"
- ><A
- HREF="guideexamples.html"
- >Up</A
- ></TD
- ><TD
- WIDTH="33%"
- ALIGN="right"
- VALIGN="top"
- >CDROM Examples</TD
- ></TR
- ></TABLE
- ></DIV
- ></BODY
- ></HTML
- >