forked from KolibriOS/kolibrios
220 lines
3.6 KiB
HTML
220 lines
3.6 KiB
HTML
|
<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
|
||
|
>
|