@@ -38,12 +38,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
38
#include "companders.h"
39
39
40
40
const static DIO_s8 LogTable [128 ] =
41
- {
42
- 1 , 1 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
43
- 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
44
- 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
45
- 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 };
41
+ {
42
+ 1 , 1 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 , 5 ,
43
+ 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 ,
44
+ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 ,
45
+ 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7 , 7
46
+ };
46
47
48
+
47
49
DIO_s8 DIO_LinearToALaw (DIO_s16 sample )
48
50
{
49
51
const DIO_s16 cClip = 32635 ;
@@ -109,6 +111,25 @@ DIO_s16 DIO_ALawToLinear(DIO_s8 aLawByte)
109
111
return ALawDecompTable [addr ];
110
112
}
111
113
114
+ static DIO_s8 MuLawLogTable [256 ] =
115
+ {
116
+ 0 ,0 ,1 ,1 ,2 ,2 ,2 ,2 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,3 ,
117
+ 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,4 ,
118
+ 5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,
119
+ 5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,5 ,
120
+ 6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,
121
+ 6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,
122
+ 6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,
123
+ 6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,6 ,
124
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
125
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
126
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
127
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
128
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
129
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
130
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,
131
+ 7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7 ,7
132
+ };
112
133
#define cBias 0x84
113
134
#define cClip 32635
114
135
@@ -125,52 +146,50 @@ DIO_s8 DIO_LinearToULaw(DIO_s16 sample)
125
146
sample = cClip ;
126
147
sample += cBias ;
127
148
128
- // Convert the magnitude to uLaw
129
- if (sample >= 256 )
130
- {
131
- exponent = LogTable [(sample >> 7 ) & 0xFF ];
132
- mantissa = (sample >> (exponent + 3 )) & 0x0F ;
133
- compandedValue = ~((sign | (exponent << 4 ) | mantissa ) & 0xFF );
134
- }
135
- else
136
- {
137
- compandedValue = ~((sign | sample >> 4 ) & 0xFF );
138
- }
149
+
150
+ exponent = MuLawLogTable [(sample >> 7 ) & 0xFF ];
151
+ mantissa = (sample >> (exponent + 3 )) & 0x0F ;
152
+ compandedValue = ~(sign | (exponent << 4 ) | mantissa );
139
153
140
- return compandedValue ;
154
+ return ( DIO_s8 ) compandedValue & 0xff ;
141
155
}
142
156
143
157
DIO_s16 DIO_ULawToLinear (DIO_s8 uLawByte )
144
158
{
145
159
static const DIO_s16 ULawDecompTable [256 ] = {
146
- -32124 , -31100 , -30076 , -29052 , -28028 , -27004 , -25980 , -24956 ,
147
- -23932 , -22908 , -21884 , -20860 , -19836 , -18812 , -17788 , -16764 ,
148
- -15996 , -15484 , -14972 , -14460 , -13948 , -13436 , -12924 , -12412 ,
149
- -11900 , -11388 , -10876 , -10364 , -9852 , -9340 , -8828 , -8316 ,
150
- -7932 , -7676 , -7420 , -7164 , -6908 , -6652 , -6396 , -6140 ,
151
- -5884 , -5628 , -5372 , -5116 , -4860 , -4604 , -4348 , -4092 ,
152
- -3900 , -3772 , -3644 , -3516 , -3388 , -3260 , -3132 , -3004 ,
153
- -2876 , -2748 , -2620 , -2492 , -2364 , -2236 , -2108 , -1980 ,
154
- -1884 , -1828 , -1772 , -1716 , -1660 , -1604 , -1548 , -1492 ,
155
- -1436 , -1380 , -1324 , -1268 , -1212 , -1156 , -1100 , -1044 ,
156
- -988 , -932 , -876 , -820 , -764 , -708 , -652 , -596 ,
157
- -556 , -532 , -508 , -484 , -460 , -436 , -412 , -388 ,
158
- -364 , -340 , -316 , -292 , -268 , -244 , -220 , -196 ,
159
- -172 , -148 , -124 , -100 , -76 , -52 , -28 , -4 ,
160
- 32124 , 31100 , 30076 , 29052 , 28028 , 27004 , 25980 , 24956 ,
161
- 23932 , 22908 , 21884 , 20860 , 19836 , 18812 , 17788 , 16764 ,
162
- 15996 , 15484 , 14972 , 14460 , 13948 , 13436 , 12924 , 12412 ,
163
- 11900 , 11388 , 10876 , 10364 , 9852 , 9340 , 8828 , 8316 ,
164
- 7932 , 7676 , 7420 , 7164 , 6908 , 6652 , 6396 , 6140 ,
165
- 5884 , 5628 , 5372 , 5116 , 4860 , 4604 , 4348 , 4092 ,
166
- 3900 , 3772 , 3644 , 3516 , 3388 , 3260 , 3132 , 3004 ,
167
- 2876 , 2748 , 2620 , 2492 , 2364 , 2236 , 2108 , 1980 ,
168
- 1884 , 1828 , 1772 , 1716 , 1660 , 1604 , 1548 , 1492 ,
169
- 1436 , 1380 , 1324 , 1268 , 1212 , 1156 , 1100 , 1044 ,
170
- 988 , 932 , 876 , 820 , 764 , 708 , 652 , 596 ,
171
- 556 , 532 , 508 , 484 , 460 , 436 , 412 , 388 ,
172
- 364 , 340 , 316 , 292 , 268 , 244 , 220 , 196 ,
173
- 172 , 148 , 124 , 100 , 76 , 52 , 28 , 4 };
160
+ -32124 ,-31100 ,-30076 ,-29052 ,-28028 ,-27004 ,-25980 ,-24956 ,
161
+ -23932 ,-22908 ,-21884 ,-20860 ,-19836 ,-18812 ,-17788 ,-16764 ,
162
+ -15996 ,-15484 ,-14972 ,-14460 ,-13948 ,-13436 ,-12924 ,-12412 ,
163
+ -11900 ,-11388 ,-10876 ,-10364 , -9852 , -9340 , -8828 , -8316 ,
164
+ -7932 , -7676 , -7420 , -7164 , -6908 , -6652 , -6396 , -6140 ,
165
+ -5884 , -5628 , -5372 , -5116 , -4860 , -4604 , -4348 , -4092 ,
166
+ -3900 , -3772 , -3644 , -3516 , -3388 , -3260 , -3132 , -3004 ,
167
+ -2876 , -2748 , -2620 , -2492 , -2364 , -2236 , -2108 , -1980 ,
168
+ -1884 , -1820 , -1756 , -1692 , -1628 , -1564 , -1500 , -1436 ,
169
+ -1372 , -1308 , -1244 , -1180 , -1116 , -1052 , -988 , -924 ,
170
+ -876 , -844 , -812 , -780 , -748 , -716 , -684 , -652 ,
171
+ -620 , -588 , -556 , -524 , -492 , -460 , -428 , -396 ,
172
+ -372 , -356 , -340 , -324 , -308 , -292 , -276 , -260 ,
173
+ -244 , -228 , -212 , -196 , -180 , -164 , -148 , -132 ,
174
+ -120 , -112 , -104 , -96 , -88 , -80 , -72 , -64 ,
175
+ -56 , -48 , -40 , -32 , -24 , -16 , -8 , -1 ,
176
+ 32124 , 31100 , 30076 , 29052 , 28028 , 27004 , 25980 , 24956 ,
177
+ 23932 , 22908 , 21884 , 20860 , 19836 , 18812 , 17788 , 16764 ,
178
+ 15996 , 15484 , 14972 , 14460 , 13948 , 13436 , 12924 , 12412 ,
179
+ 11900 , 11388 , 10876 , 10364 , 9852 , 9340 , 8828 , 8316 ,
180
+ 7932 , 7676 , 7420 , 7164 , 6908 , 6652 , 6396 , 6140 ,
181
+ 5884 , 5628 , 5372 , 5116 , 4860 , 4604 , 4348 , 4092 ,
182
+ 3900 , 3772 , 3644 , 3516 , 3388 , 3260 , 3132 , 3004 ,
183
+ 2876 , 2748 , 2620 , 2492 , 2364 , 2236 , 2108 , 1980 ,
184
+ 1884 , 1820 , 1756 , 1692 , 1628 , 1564 , 1500 , 1436 ,
185
+ 1372 , 1308 , 1244 , 1180 , 1116 , 1052 , 988 , 924 ,
186
+ 876 , 844 , 812 , 780 , 748 , 716 , 684 , 652 ,
187
+ 620 , 588 , 556 , 524 , 492 , 460 , 428 , 396 ,
188
+ 372 , 356 , 340 , 324 , 308 , 292 , 276 , 260 ,
189
+ 244 , 228 , 212 , 196 , 180 , 164 , 148 , 132 ,
190
+ 120 , 112 , 104 , 96 , 88 , 80 , 72 , 64 ,
191
+ 56 , 48 , 40 , 32 , 24 , 16 , 8 , 0
192
+ };
174
193
175
194
return ULawDecompTable [(unsigned char )uLawByte ];
176
195
}
0 commit comments