annotate mixer/converters.c @ 579:6927c489964c

Bug fix for CoreAudio seeking. Comments inline in code.
author Eric Wing <ewing@anscamobile.com>
date Mon, 08 Nov 2010 21:02:49 -0800
parents 2e8907ff98e9
children
rev   line source
486
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
1 /*
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
2 * SDL_sound -- An sound processing toolkit.
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
3 * Copyright (C) 2001 Ryan C. Gordon.
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
4 *
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
8 * version 2.1 of the License, or (at your option) any later version.
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
9 *
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
13 * Lesser General Public License for more details.
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
14 *
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
18 */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
19
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
20 /**
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
21 * This file implements the mixer itself. Largely, this is handled in the
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
22 * SDL audio callback.
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
23 *
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
24 * Documentation is in SDL_sound.h ... It's verbose, honest. :)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
25 *
552
2e8907ff98e9 Replaced references to COPYING with references to LICENSE.txt ...
Ryan C. Gordon <icculus@icculus.org>
parents: 526
diff changeset
26 * Please see the file LICENSE.txt in the source's root directory.
486
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
27 *
526
2df1f5c62d38 Updated my email address.
Ryan C. Gordon <icculus@icculus.org>
parents: 486
diff changeset
28 * This file written by Ryan C. Gordon. (icculus@icculus.org)
486
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
29 */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
30
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
31 #if HAVE_CONFIG_H
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
32 # include <config.h>
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
33 #endif
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
34
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
35 #include <stdio.h>
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
36 #include <stdlib.h>
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
37 #include <string.h>
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
38
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
39 #include "SDL.h"
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
40 #include "SDL_thread.h"
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
41 #include "SDL_sound.h"
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
42
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
43 #define __SDL_SOUND_INTERNAL__
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
44 #include "SDL_sound_internal.h"
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
45
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
46
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
47 static void conv_mix_buf_u8_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
48 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
49 register Uint8 *stream = _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
50 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
51 register Uint32 max = len * 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
52 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
53 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
54 *stream = (Uint8) ((((mixbuf[i]+mixbuf[i+1])*0.5f) * 127.0f) + 128.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
55 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
56 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
57 } /* conv_mix_buf_s8s */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
58
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
59 static void conv_mix_buf_s8_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
60 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
61 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
62 register Sint8 *stream = (Sint8 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
63 register Uint32 max = len * 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
64 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
65 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
66 *stream = (Sint8) (((mixbuf[i] + mixbuf[i+1]) * 0.5f) * 127.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
67 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
68 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
69 } /* conv_mix_buf_s8s */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
70
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
71 static void conv_mix_buf_s16_lsb_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
72 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
73 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
74 register Sint16 *stream = (Sint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
75 register Sint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
76 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
77 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
78 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
79 val = (Sint16) (((mixbuf[i] + mixbuf[i+1]) * 0.5f) * 32767.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
80 *stream = SDL_SwapLE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
81 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
82 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
83 } /* conv_mix_buf_s16_lsb_mono */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
84
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
85 static void conv_mix_buf_s16_msb_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
86 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
87 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
88 register Sint16 *stream = (Sint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
89 register Sint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
90 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
91 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
92 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
93 val = (Sint16) (((mixbuf[i] + mixbuf[i+1]) * 0.5f) * 32767.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
94 *stream = SDL_SwapBE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
95 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
96 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
97 } /* conv_mix_buf_s16_msb_mono */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
98
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
99 static void conv_mix_buf_u16_lsb_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
100 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
101 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
102 register Uint16 *stream = (Uint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
103 register Uint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
104 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
105 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
106 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
107 val = (Uint16)((((mixbuf[i]+mixbuf[i+1])*0.5f) * 32767.0f) + 32768.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
108 *stream = SDL_SwapLE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
109 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
110 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
111 } /* conv_mix_buf_s16_lsb_mono */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
112
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
113 static void conv_mix_buf_u16_msb_mono(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
114 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
115 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
116 register Uint16 *stream = (Uint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
117 register Uint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
118 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
119 for (i = 0; i < max; i += 2)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
120 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
121 val = (Uint16)((((mixbuf[i]+mixbuf[i+1])*0.5f) * 32767.0f) + 32768.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
122 *stream = SDL_SwapBE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
123 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
124 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
125 } /* conv_mix_buf_s16_lsb_mono */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
126
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
127 static void conv_mix_buf_u8_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
128 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
129 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
130 register Uint8 *stream = _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
131 register Uint32 max = len;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
132 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
133 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
134 *stream = (Uint8) ((mixbuf[i] * 127.0f) + 128.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
135 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
136 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
137 } /* conv_mix_buf_s8s */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
138
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
139 static void conv_mix_buf_s8_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
140 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
141 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
142 register Sint8 *stream = (Sint8 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
143 register Uint32 max = len;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
144 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
145 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
146 *stream = (Sint8) (mixbuf[i] * 127.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
147 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
148 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
149 } /* conv_mix_buf_s8s */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
150
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
151 static void conv_mix_buf_s16lsb_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
152 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
153 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
154 register Sint16 *stream = (Sint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
155 register Sint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
156 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
157 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
158 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
159 val = (Sint16) (mixbuf[i] * 32767.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
160 *stream = SDL_SwapLE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
161 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
162 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
163 } /* conv_mix_buf_s16_lsb_stereo */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
164
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
165 static void conv_mix_buf_s16msb_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
166 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
167 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
168 register Sint16 *stream = (Sint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
169 register Sint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
170 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
171 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
172 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
173 val = (Sint16) (mixbuf[i] * 32767.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
174 *stream = SDL_SwapBE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
175 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
176 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
177 } /* conv_mix_buf_s16_msb_stereo */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
178
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
179 static void conv_mix_buf_u16lsb_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
180 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
181 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
182 register Uint16 *stream = (Uint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
183 register Uint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
184 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
185 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
186 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
187 val = (Uint16) ((mixbuf[i] * 32767.0f) + 32768.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
188 *stream = SDL_SwapLE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
189 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
190 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
191 } /* conv_mix_buf_s16_lsb_stereo */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
192
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
193 static void conv_mix_buf_u16msb_stereo(void *userdata, Uint8 *_stream, int len)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
194 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
195 register Uint32 i;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
196 register Uint16 *stream = (Uint16 *) _stream;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
197 register Uint16 val;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
198 register Uint32 max = len / 2;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
199 for (i = 0; i < max; i++)
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
200 {
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
201 val = (Uint16) ((mixbuf[i] * 32767.0f) + 32768.0f);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
202 *stream = SDL_SwapBE16(val);
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
203 stream++;
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
204 } /* for */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
205 } /* conv_mix_buf_s16_msb_stereo */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
206
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
207 /* end of converters.c ... */
859dd2ef3197 Added some seriously INCOMPLETE mixer code.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
208