|
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(&wanted, NULL) < 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 > 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 > 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 > |