| <HTML |
| ><HEAD |
| ><TITLE |
| >Audio Examples</TITLE |
| ><META |
| NAME="GENERATOR" |
| CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+ |
| "><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 |
| SUMMARY="Header navigation 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" |
| ACCESSKEY="P" |
| >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" |
| ACCESSKEY="N" |
| >Next</A |
| ></TD |
| ></TR |
| ></TABLE |
| ><HR |
| ALIGN="LEFT" |
| WIDTH="100%"></DIV |
| ><DIV |
| CLASS="SECT1" |
| ><H1 |
| CLASS="SECT1" |
| ><A |
| NAME="GUIDEAUDIOEXAMPLES" |
| ></A |
| >Audio Examples</H1 |
| ><P |
| ></P |
| ><DIV |
| CLASS="SECT2" |
| ><H2 |
| CLASS="SECT2" |
| ><A |
| NAME="AEN382" |
| ></A |
| >Opening the audio device</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="AEN386" |
| ></A |
| >Playing audio</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 |
| SUMMARY="Footer navigation table" |
| WIDTH="100%" |
| BORDER="0" |
| CELLPADDING="0" |
| CELLSPACING="0" |
| ><TR |
| ><TD |
| WIDTH="33%" |
| ALIGN="left" |
| VALIGN="top" |
| ><A |
| HREF="guideeventexamples.html" |
| ACCESSKEY="P" |
| >Prev</A |
| ></TD |
| ><TD |
| WIDTH="34%" |
| ALIGN="center" |
| VALIGN="top" |
| ><A |
| HREF="index.html" |
| ACCESSKEY="H" |
| >Home</A |
| ></TD |
| ><TD |
| WIDTH="33%" |
| ALIGN="right" |
| VALIGN="top" |
| ><A |
| HREF="guidecdromexamples.html" |
| ACCESSKEY="N" |
| >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" |
| ACCESSKEY="U" |
| >Up</A |
| ></TD |
| ><TD |
| WIDTH="33%" |
| ALIGN="right" |
| VALIGN="top" |
| >CDROM Examples</TD |
| ></TR |
| ></TABLE |
| ></DIV |
| ></BODY |
| ></HTML |
| > |