0,0 → 1,220 |
<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="AEN382" |
>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="AEN386" |
>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 |
> |