comparison decoders/timidity/output.c @ 199:2d887640d300

Initial add.
author Ryan C. Gordon <icculus@icculus.org>
date Fri, 04 Jan 2002 06:49:49 +0000
parents
children
comparison
equal deleted inserted replaced
198:f9a752f41ab6 199:2d887640d300
1 /*
2
3 TiMidity -- Experimental MIDI to WAVE converter
4 Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20 output.c
21
22 Audio output (to file / device) functions.
23 */
24
25 #if HAVE_CONFIG_H
26 # include <config.h>
27 #endif
28
29 #include "SDL_sound.h"
30
31 #define __SDL_SOUND_INTERNAL__
32 #include "SDL_sound_internal.h"
33
34 #include "options.h"
35 #include "output.h"
36
37 /*****************************************************************/
38 /* Some functions to convert signed 32-bit data to other formats */
39
40 void s32tos8(void *dp, Sint32 *lp, Sint32 c)
41 {
42 Sint8 *cp=(Sint8 *)(dp);
43 Sint32 l;
44 while (c--)
45 {
46 l=(*lp++)>>(32-8-GUARD_BITS);
47 if (l>127) l=127;
48 else if (l<-128) l=-128;
49 *cp++ = (Sint8) (l);
50 }
51 }
52
53 void s32tou8(void *dp, Sint32 *lp, Sint32 c)
54 {
55 Uint8 *cp=(Uint8 *)(dp);
56 Sint32 l;
57 while (c--)
58 {
59 l=(*lp++)>>(32-8-GUARD_BITS);
60 if (l>127) l=127;
61 else if (l<-128) l=-128;
62 *cp++ = 0x80 ^ ((Uint8) l);
63 }
64 }
65
66 void s32tos16(void *dp, Sint32 *lp, Sint32 c)
67 {
68 Sint16 *sp=(Sint16 *)(dp);
69 Sint32 l;
70 while (c--)
71 {
72 l=(*lp++)>>(32-16-GUARD_BITS);
73 if (l > 32767) l=32767;
74 else if (l<-32768) l=-32768;
75 *sp++ = (Sint16)(l);
76 }
77 }
78
79 void s32tou16(void *dp, Sint32 *lp, Sint32 c)
80 {
81 Uint16 *sp=(Uint16 *)(dp);
82 Sint32 l;
83 while (c--)
84 {
85 l=(*lp++)>>(32-16-GUARD_BITS);
86 if (l > 32767) l=32767;
87 else if (l<-32768) l=-32768;
88 *sp++ = 0x8000 ^ (Uint16)(l);
89 }
90 }
91
92 void s32tos16x(void *dp, Sint32 *lp, Sint32 c)
93 {
94 Sint16 *sp=(Sint16 *)(dp);
95 Sint32 l;
96 while (c--)
97 {
98 l=(*lp++)>>(32-16-GUARD_BITS);
99 if (l > 32767) l=32767;
100 else if (l<-32768) l=-32768;
101 *sp++ = SDL_Swap16((Sint16)(l));
102 }
103 }
104
105 void s32tou16x(void *dp, Sint32 *lp, Sint32 c)
106 {
107 Uint16 *sp=(Uint16 *)(dp);
108 Sint32 l;
109 while (c--)
110 {
111 l=(*lp++)>>(32-16-GUARD_BITS);
112 if (l > 32767) l=32767;
113 else if (l<-32768) l=-32768;
114 *sp++ = SDL_Swap16(0x8000 ^ (Uint16)(l));
115 }
116 }