Skip to content

Latest commit

 

History

History
129 lines (112 loc) · 2.45 KB

output.c

File metadata and controls

129 lines (112 loc) · 2.45 KB
 
Oct 18, 2017
Oct 18, 2017
1
2
/*
Oct 21, 1999
Oct 21, 1999
3
4
5
6
TiMidity -- Experimental MIDI to WAVE converter
Copyright (C) 1995 Tuukka Toivonen <toivonen@clinet.fi>
This program is free software; you can redistribute it and/or modify
Dec 31, 2011
Dec 31, 2011
7
it under the terms of the Perl Artistic License, available in COPYING.
Oct 21, 1999
Oct 21, 1999
8
Oct 18, 2017
Oct 18, 2017
9
10
11
12
output.c
Audio output (to file / device) functions.
*/
Oct 21, 1999
Oct 21, 1999
13
Oct 18, 2017
Oct 18, 2017
14
15
#if HAVE_CONFIG_H
# include <config.h>
Oct 21, 1999
Oct 21, 1999
16
17
#endif
Oct 18, 2017
Oct 18, 2017
18
#include "SDL.h"
Oct 21, 1999
Oct 21, 1999
19
Oct 18, 2017
Oct 18, 2017
20
21
#include "options.h"
#include "output.h"
Oct 21, 1999
Oct 21, 1999
22
23
24
25
/*****************************************************************/
/* Some functions to convert signed 32-bit data to other formats */
Oct 18, 2017
Oct 18, 2017
26
void s32tos8(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
27
{
Oct 18, 2017
Oct 18, 2017
28
29
Sint8 *cp=(Sint8 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
30
31
32
33
34
while (c--)
{
l=(*lp++)>>(32-8-GUARD_BITS);
if (l>127) l=127;
else if (l<-128) l=-128;
Oct 18, 2017
Oct 18, 2017
35
*cp++ = (Sint8) (l);
Oct 21, 1999
Oct 21, 1999
36
37
38
}
}
Oct 18, 2017
Oct 18, 2017
39
void s32tou8(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
40
{
Oct 18, 2017
Oct 18, 2017
41
42
Uint8 *cp=(Uint8 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
43
44
45
46
47
while (c--)
{
l=(*lp++)>>(32-8-GUARD_BITS);
if (l>127) l=127;
else if (l<-128) l=-128;
Oct 18, 2017
Oct 18, 2017
48
*cp++ = 0x80 ^ ((Uint8) l);
Oct 21, 1999
Oct 21, 1999
49
50
51
}
}
Oct 18, 2017
Oct 18, 2017
52
void s32tos16(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
53
{
Oct 18, 2017
Oct 18, 2017
54
55
Sint16 *sp=(Sint16 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
56
57
58
59
60
while (c--)
{
l=(*lp++)>>(32-16-GUARD_BITS);
if (l > 32767) l=32767;
else if (l<-32768) l=-32768;
Oct 18, 2017
Oct 18, 2017
61
*sp++ = (Sint16)(l);
Oct 21, 1999
Oct 21, 1999
62
63
64
}
}
Oct 18, 2017
Oct 18, 2017
65
void s32tou16(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
66
{
Oct 18, 2017
Oct 18, 2017
67
68
Uint16 *sp=(Uint16 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
69
70
71
72
73
while (c--)
{
l=(*lp++)>>(32-16-GUARD_BITS);
if (l > 32767) l=32767;
else if (l<-32768) l=-32768;
Oct 18, 2017
Oct 18, 2017
74
*sp++ = 0x8000 ^ (Uint16)(l);
Oct 21, 1999
Oct 21, 1999
75
76
77
}
}
Oct 18, 2017
Oct 18, 2017
78
void s32tos16x(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
79
{
Oct 18, 2017
Oct 18, 2017
80
81
Sint16 *sp=(Sint16 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
82
83
84
85
86
while (c--)
{
l=(*lp++)>>(32-16-GUARD_BITS);
if (l > 32767) l=32767;
else if (l<-32768) l=-32768;
Oct 18, 2017
Oct 18, 2017
87
*sp++ = SDL_Swap16((Sint16)(l));
Oct 21, 1999
Oct 21, 1999
88
89
90
}
}
Oct 18, 2017
Oct 18, 2017
91
void s32tou16x(void *dp, Sint32 *lp, Sint32 c)
Oct 21, 1999
Oct 21, 1999
92
{
Oct 18, 2017
Oct 18, 2017
93
94
Uint16 *sp=(Uint16 *)(dp);
Sint32 l;
Oct 21, 1999
Oct 21, 1999
95
96
97
98
99
while (c--)
{
l=(*lp++)>>(32-16-GUARD_BITS);
if (l > 32767) l=32767;
else if (l<-32768) l=-32768;
Oct 18, 2017
Oct 18, 2017
100
*sp++ = SDL_Swap16(0x8000 ^ (Uint16)(l));
Oct 21, 1999
Oct 21, 1999
101
102
}
}
Oct 21, 2017
Oct 21, 2017
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
void s32tof32(void *dp, Sint32 *lp, Sint32 c)
{
float *sp=(float *)(dp);
while (c--)
{
*sp++ = (float)(*lp++) / 2147483647.0f;
}
}
void s32tos32(void *dp, Sint32 *lp, Sint32 c)
{
Sint32 *sp=(Sint32 *)(dp);
while (c--)
{
*sp++ = (*lp++);
}
}
void s32tos32x(void *dp, Sint32 *lp, Sint32 c)
{
Sint32 *sp=(Sint32 *)(dp);
while (c--)
{
*sp++ = SDL_Swap32(*lp++);
}
}