@@ -38,12 +38,14 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3838#include "companders.h"
3939
4040const 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+ };
4647
48+
4749DIO_s8 DIO_LinearToALaw (DIO_s16 sample )
4850{
4951 const DIO_s16 cClip = 32635 ;
@@ -109,6 +111,25 @@ DIO_s16 DIO_ALawToLinear(DIO_s8 aLawByte)
109111 return ALawDecompTable [addr ];
110112}
111113
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+ };
112133#define cBias 0x84
113134#define cClip 32635
114135
@@ -125,52 +146,50 @@ DIO_s8 DIO_LinearToULaw(DIO_s16 sample)
125146 sample = cClip ;
126147 sample += cBias ;
127148
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 );
139153
140- return compandedValue ;
154+ return ( DIO_s8 ) compandedValue & 0xff ;
141155}
142156
143157DIO_s16 DIO_ULawToLinear (DIO_s8 uLawByte )
144158{
145159 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+ };
174193
175194 return ULawDecompTable [(unsigned char )uLawByte ];
176195}
0 commit comments