Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
402 lines (366 loc) · 15.1 KB

SDL_mixer.c

File metadata and controls

402 lines (366 loc) · 15.1 KB
 
Apr 26, 2001
Apr 26, 2001
1
2
/*
SDL - Simple DirectMedia Layer
Feb 1, 2006
Feb 1, 2006
3
Copyright (C) 1997-2006 Sam Lantinga
Apr 26, 2001
Apr 26, 2001
4
5
This library is free software; you can redistribute it and/or
Feb 1, 2006
Feb 1, 2006
6
modify it under the terms of the GNU Lesser General Public
Apr 26, 2001
Apr 26, 2001
7
License as published by the Free Software Foundation; either
Feb 1, 2006
Feb 1, 2006
8
version 2.1 of the License, or (at your option) any later version.
Apr 26, 2001
Apr 26, 2001
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Feb 1, 2006
Feb 1, 2006
13
Lesser General Public License for more details.
Apr 26, 2001
Apr 26, 2001
14
Feb 1, 2006
Feb 1, 2006
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Apr 26, 2001
Apr 26, 2001
18
19
Sam Lantinga
Dec 14, 2001
Dec 14, 2001
20
slouken@libsdl.org
Apr 26, 2001
Apr 26, 2001
21
*/
Feb 21, 2006
Feb 21, 2006
22
#include "SDL_config.h"
Apr 26, 2001
Apr 26, 2001
23
24
25
/* This provides the default mixing callback for the SDL audio routines */
Nov 18, 2003
Nov 18, 2003
26
#include "SDL_cpuinfo.h"
Feb 10, 2006
Feb 10, 2006
27
28
#include "SDL_timer.h"
#include "SDL_audio.h"
Apr 26, 2001
Apr 26, 2001
29
#include "SDL_sysaudio.h"
Nov 9, 2002
Nov 9, 2002
30
#include "SDL_mixer_MMX.h"
Jan 20, 2003
Jan 20, 2003
31
#include "SDL_mixer_MMX_VC.h"
Jun 3, 2003
Jun 3, 2003
32
#include "SDL_mixer_m68k.h"
Nov 9, 2002
Nov 9, 2002
33
Apr 26, 2001
Apr 26, 2001
34
35
36
37
/* This table is used to add two sound values together and pin
* the value to avoid overflow. (used with permission from ARDI)
* Changed to use 0xFE instead of 0xFF for better sound quality.
*/
Jul 10, 2006
Jul 10, 2006
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
static const Uint8 mix8[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24,
0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A,
0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x5B,
0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66,
0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C,
0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92,
0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D,
0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8,
0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,
0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE,
0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9,
0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4,
0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA,
0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5,
0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE
Apr 26, 2001
Apr 26, 2001
86
87
88
89
90
91
};
/* The volume ranges from 0 - 128 */
#define ADJUST_VOLUME(s, v) (s = (s*v)/SDL_MIX_MAXVOLUME)
#define ADJUST_VOLUME_U8(s, v) (s = (((s-128)*v)/SDL_MIX_MAXVOLUME)+128)
Jul 10, 2006
Jul 10, 2006
92
93
void
SDL_MixAudio(Uint8 * dst, const Uint8 * src, Uint32 len, int volume)
Apr 26, 2001
Apr 26, 2001
94
{
Jul 10, 2006
Jul 10, 2006
95
96
/* Mix the user-level audio format */
if (current_audio) {
Aug 24, 2006
Aug 24, 2006
97
SDL_AudioFormat format;
Jul 10, 2006
Jul 10, 2006
98
99
100
101
102
if (current_audio->convert.needed) {
format = current_audio->convert.src_format;
} else {
format = current_audio->spec.format;
}
Aug 24, 2006
Aug 24, 2006
103
SDL_MixAudioFormat(dst, src, format, len, volume);
Jul 10, 2006
Jul 10, 2006
104
}
Aug 24, 2006
Aug 24, 2006
105
106
107
108
109
110
111
112
113
114
115
}
void
SDL_MixAudioFormat(Uint8 * dst, const Uint8 * src, SDL_AudioFormat format,
Uint32 len, int volume)
{
if (volume == 0) {
return;
}
Jul 10, 2006
Jul 10, 2006
116
switch (format) {
Apr 26, 2001
Apr 26, 2001
117
Jul 10, 2006
Jul 10, 2006
118
119
case AUDIO_U8:
{
Feb 21, 2006
Feb 21, 2006
120
#if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
121
122
123
SDL_MixAudio_m68k_U8((char *) dst, (char *) src,
(unsigned long) len, (long) volume,
(char *) mix8);
Jun 3, 2003
Jun 3, 2003
124
#else
Jul 10, 2006
Jul 10, 2006
125
Uint8 src_sample;
Apr 26, 2001
Apr 26, 2001
126
Jul 10, 2006
Jul 10, 2006
127
128
129
130
131
132
133
while (len--) {
src_sample = *src;
ADJUST_VOLUME_U8(src_sample, volume);
*dst = mix8[*dst + src_sample];
++dst;
++src;
}
Jun 3, 2003
Jun 3, 2003
134
#endif
Jul 10, 2006
Jul 10, 2006
135
136
}
break;
Apr 26, 2001
Apr 26, 2001
137
Jul 10, 2006
Jul 10, 2006
138
139
case AUDIO_S8:
{
Feb 21, 2006
Feb 21, 2006
140
#if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
141
142
143
144
if (SDL_HasMMX()) {
SDL_MixAudio_MMX_S8((char *) dst, (char *) src,
(unsigned int) len, (int) volume);
} else
Feb 26, 2006
Feb 26, 2006
145
#elif ((defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
146
147
148
149
if (SDL_HasMMX()) {
SDL_MixAudio_MMX_S8_VC((char *) dst, (char *) src,
(unsigned int) len, (int) volume);
} else
Nov 9, 2002
Nov 9, 2002
150
#endif
Feb 21, 2006
Feb 21, 2006
151
#if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
152
153
SDL_MixAudio_m68k_S8((char *) dst, (char *) src,
(unsigned long) len, (long) volume);
Jun 3, 2003
Jun 3, 2003
154
#else
Jul 10, 2006
Jul 10, 2006
155
156
157
158
159
160
{
Sint8 *dst8, *src8;
Sint8 src_sample;
int dst_sample;
const int max_audioval = ((1 << (8 - 1)) - 1);
const int min_audioval = -(1 << (8 - 1));
Apr 26, 2001
Apr 26, 2001
161
Jul 10, 2006
Jul 10, 2006
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
src8 = (Sint8 *) src;
dst8 = (Sint8 *) dst;
while (len--) {
src_sample = *src8;
ADJUST_VOLUME(src_sample, volume);
dst_sample = *dst8 + src_sample;
if (dst_sample > max_audioval) {
*dst8 = max_audioval;
} else if (dst_sample < min_audioval) {
*dst8 = min_audioval;
} else {
*dst8 = dst_sample;
}
++dst8;
++src8;
}
}
Jun 3, 2003
Jun 3, 2003
179
#endif
Jul 10, 2006
Jul 10, 2006
180
181
}
break;
Apr 26, 2001
Apr 26, 2001
182
Jul 10, 2006
Jul 10, 2006
183
184
case AUDIO_S16LSB:
{
Feb 21, 2006
Feb 21, 2006
185
#if defined(__GNUC__) && defined(__i386__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
186
187
188
189
if (SDL_HasMMX()) {
SDL_MixAudio_MMX_S16((char *) dst, (char *) src,
(unsigned int) len, (int) volume);
} else
Feb 26, 2006
Feb 26, 2006
190
#elif ((defined(_MSC_VER) && defined(_M_IX86)) || defined(__WATCOMC__)) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
191
192
193
194
if (SDL_HasMMX()) {
SDL_MixAudio_MMX_S16_VC((char *) dst, (char *) src,
(unsigned int) len, (int) volume);
} else
Nov 9, 2002
Nov 9, 2002
195
#endif
Feb 21, 2006
Feb 21, 2006
196
#if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
197
198
SDL_MixAudio_m68k_S16LSB((short *) dst, (short *) src,
(unsigned long) len, (long) volume);
Jun 3, 2003
Jun 3, 2003
199
#else
Jul 10, 2006
Jul 10, 2006
200
201
202
203
204
{
Sint16 src1, src2;
int dst_sample;
const int max_audioval = ((1 << (16 - 1)) - 1);
const int min_audioval = -(1 << (16 - 1));
Apr 26, 2001
Apr 26, 2001
205
Jul 10, 2006
Jul 10, 2006
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
len /= 2;
while (len--) {
src1 = ((src[1]) << 8 | src[0]);
ADJUST_VOLUME(src1, volume);
src2 = ((dst[1]) << 8 | dst[0]);
src += 2;
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
dst[0] = dst_sample & 0xFF;
dst_sample >>= 8;
dst[1] = dst_sample & 0xFF;
dst += 2;
}
}
Jun 3, 2003
Jun 3, 2003
224
#endif
Jul 10, 2006
Jul 10, 2006
225
226
}
break;
Apr 26, 2001
Apr 26, 2001
227
Jul 10, 2006
Jul 10, 2006
228
229
case AUDIO_S16MSB:
{
Feb 21, 2006
Feb 21, 2006
230
#if defined(__GNUC__) && defined(__M68000__) && defined(SDL_ASSEMBLY_ROUTINES)
Jul 10, 2006
Jul 10, 2006
231
232
SDL_MixAudio_m68k_S16MSB((short *) dst, (short *) src,
(unsigned long) len, (long) volume);
Jun 3, 2003
Jun 3, 2003
233
#else
Jul 10, 2006
Jul 10, 2006
234
235
236
237
Sint16 src1, src2;
int dst_sample;
const int max_audioval = ((1 << (16 - 1)) - 1);
const int min_audioval = -(1 << (16 - 1));
Apr 26, 2001
Apr 26, 2001
238
Jul 10, 2006
Jul 10, 2006
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
len /= 2;
while (len--) {
src1 = ((src[0]) << 8 | src[1]);
ADJUST_VOLUME(src1, volume);
src2 = ((dst[0]) << 8 | dst[1]);
src += 2;
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
dst[1] = dst_sample & 0xFF;
dst_sample >>= 8;
dst[0] = dst_sample & 0xFF;
dst += 2;
}
Jun 3, 2003
Jun 3, 2003
256
#endif
Jul 10, 2006
Jul 10, 2006
257
258
}
break;
Apr 26, 2001
Apr 26, 2001
259
Aug 24, 2006
Aug 24, 2006
260
261
262
263
case AUDIO_S32LSB:
{
const Uint32 *src32 = (Uint32 *) src;
Uint32 *dst32 = (Uint32 *) dst;
Sep 1, 2006
Sep 1, 2006
264
Sint64 src1, src2;
Aug 24, 2006
Aug 24, 2006
265
Sint64 dst_sample;
Aug 28, 2006
Aug 28, 2006
266
267
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
Aug 24, 2006
Aug 24, 2006
268
269
270
len /= 4;
while (len--) {
Sep 1, 2006
Sep 1, 2006
271
src1 = (Sint64) ((Sint32) SDL_SwapLE32(*src32));
Aug 24, 2006
Aug 24, 2006
272
273
src32++;
ADJUST_VOLUME(src1, volume);
Sep 1, 2006
Sep 1, 2006
274
src2 = (Sint64) ((Sint32) SDL_SwapLE32(*dst32));
Aug 24, 2006
Aug 24, 2006
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
*(dst32++) = SDL_SwapLE32((Uint32) ((Sint32) dst_sample));
}
}
break;
case AUDIO_S32MSB:
{
const Uint32 *src32 = (Uint32 *) src;
Uint32 *dst32 = (Uint32 *) dst;
Sep 1, 2006
Sep 1, 2006
290
Sint64 src1, src2;
Aug 24, 2006
Aug 24, 2006
291
Sint64 dst_sample;
Aug 28, 2006
Aug 28, 2006
292
293
const Sint64 max_audioval = ((((Sint64) 1) << (32 - 1)) - 1);
const Sint64 min_audioval = -(((Sint64) 1) << (32 - 1));
Aug 24, 2006
Aug 24, 2006
294
295
296
len /= 4;
while (len--) {
Sep 1, 2006
Sep 1, 2006
297
src1 = (Sint64) ((Sint32) SDL_SwapBE32(*src32));
Aug 24, 2006
Aug 24, 2006
298
299
src32++;
ADJUST_VOLUME(src1, volume);
Sep 1, 2006
Sep 1, 2006
300
src2 = (Sint64) ((Sint32) SDL_SwapBE32(*dst32));
Aug 24, 2006
Aug 24, 2006
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
*(dst32++) = SDL_SwapBE32((Uint32) ((Sint32) dst_sample));
}
}
break;
case AUDIO_F32LSB:
{
const float fmaxvolume = 1.0f / ((float) SDL_MIX_MAXVOLUME);
const float fvolume = (float) volume;
const float *src32 = (float *) src;
float *dst32 = (float *) dst;
float src1, src2;
double dst_sample;
/* !!! FIXME: are these right? */
const double max_audioval = 3.40282347e+38F;
const double min_audioval = -3.40282347e+38F;
/* !!! FIXME: this is a little nasty. */
Aug 28, 2006
Aug 28, 2006
325
326
327
328
329
union
{
float f;
Uint32 ui32;
} cvt;
Aug 24, 2006
Aug 24, 2006
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
len /= 4;
while (len--) {
cvt.f = *(src32++);
cvt.ui32 = SDL_SwapLE32(cvt.ui32);
src1 = ((cvt.f * fvolume) * fmaxvolume);
cvt.f = *dst32;
cvt.ui32 = SDL_SwapLE32(cvt.ui32);
src2 = cvt.f;
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
cvt.f = ((float) dst_sample);
cvt.ui32 = SDL_SwapLE32(cvt.ui32);
*(dst32++) = cvt.f;
}
}
break;
case AUDIO_F32MSB:
{
const float fmaxvolume = 1.0f / ((float) SDL_MIX_MAXVOLUME);
const float fvolume = (float) volume;
const float *src32 = (float *) src;
float *dst32 = (float *) dst;
float src1, src2;
double dst_sample;
/* !!! FIXME: are these right? */
const double max_audioval = 3.40282347e+38F;
const double min_audioval = -3.40282347e+38F;
/* !!! FIXME: this is a little nasty. */
Aug 28, 2006
Aug 28, 2006
367
368
369
370
371
union
{
float f;
Uint32 ui32;
} cvt;
Aug 24, 2006
Aug 24, 2006
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
len /= 4;
while (len--) {
cvt.f = *(src32++);
cvt.ui32 = SDL_SwapBE32(cvt.ui32);
src1 = ((cvt.f * fvolume) * fmaxvolume);
cvt.f = *dst32;
cvt.ui32 = SDL_SwapBE32(cvt.ui32);
src2 = cvt.f;
dst_sample = src1 + src2;
if (dst_sample > max_audioval) {
dst_sample = max_audioval;
} else if (dst_sample < min_audioval) {
dst_sample = min_audioval;
}
cvt.f = ((float) dst_sample);
cvt.ui32 = SDL_SwapBE32(cvt.ui32);
*(dst32++) = cvt.f;
}
}
break;
Jul 10, 2006
Jul 10, 2006
396
397
398
399
default: /* If this happens... FIXME! */
SDL_SetError("SDL_MixAudio(): unknown audio format");
return;
}
Apr 26, 2001
Apr 26, 2001
400
}
Jan 20, 2003
Jan 20, 2003
401
Jul 10, 2006
Jul 10, 2006
402
/* vi: set ts=4 sw=4 expandtab: */