22 #ifndef AUDIO_QDM2DATA_H 23 #define AUDIO_QDM2DATA_H 25 #include "common/scummsys.h" 32 static const uint16 vlc_tab_level_huffcodes[24] = {
33 0x037c, 0x0004, 0x003c, 0x004c, 0x003a, 0x002c, 0x001c, 0x001a,
34 0x0024, 0x0014, 0x0001, 0x0002, 0x0000, 0x0003, 0x0007, 0x0005,
35 0x0006, 0x0008, 0x0009, 0x000a, 0x000c, 0x00fc, 0x007c, 0x017c
38 static const byte vlc_tab_level_huffbits[24] = {
39 10, 6, 7, 7, 6, 6, 6, 6, 6, 5, 4, 4, 4, 3, 3, 3, 3, 4, 4, 5, 7, 8, 9, 10
43 static const uint16 vlc_tab_diff_huffcodes[37] = {
44 0x1c57, 0x0004, 0x0000, 0x0001, 0x0003, 0x0002, 0x000f, 0x000e,
45 0x0007, 0x0016, 0x0037, 0x0027, 0x0026, 0x0066, 0x0006, 0x0097,
46 0x0046, 0x01c6, 0x0017, 0x0786, 0x0086, 0x0257, 0x00d7, 0x0357,
47 0x00c6, 0x0386, 0x0186, 0x0000, 0x0157, 0x0c57, 0x0057, 0x0000,
48 0x0b86, 0x0000, 0x1457, 0x0000, 0x0457
51 static const byte vlc_tab_diff_huffbits[37] = {
52 13, 3, 3, 2, 3, 3, 4, 4, 6, 5, 6, 6, 7, 7, 8, 8,
53 8, 9, 8, 11, 9, 10, 8, 10, 9, 12, 10, 0, 10, 13, 11, 0,
58 static const byte vlc_tab_run_huffcodes[6] = {
59 0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
62 static const byte vlc_tab_run_huffbits[6] = {
67 static const uint16 vlc_tab_tone_level_idx_hi1_huffcodes[20] = {
68 0x5714, 0x000c, 0x0002, 0x0001, 0x0000, 0x0004, 0x0034, 0x0054,
69 0x0094, 0x0014, 0x0114, 0x0214, 0x0314, 0x0614, 0x0e14, 0x0f14,
70 0x2714, 0x0714, 0x1714, 0x3714
73 static const byte vlc_tab_tone_level_idx_hi1_huffbits[20] = {
74 15, 4, 2, 1, 3, 5, 6, 7, 8, 10, 10, 11, 11, 12, 12, 12, 14, 14, 15, 14
78 static const uint16 vlc_tab_tone_level_idx_mid_huffcodes[24] = {
79 0x0fea, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
80 0x0000, 0x0000, 0x0000, 0x0000, 0x03ea, 0x00ea, 0x002a, 0x001a,
81 0x0006, 0x0001, 0x0000, 0x0002, 0x000a, 0x006a, 0x01ea, 0x07ea
84 static const byte vlc_tab_tone_level_idx_mid_huffbits[24] = {
85 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 9, 7, 5, 3, 1, 2, 4, 6, 8, 10, 12
89 static const uint16 vlc_tab_tone_level_idx_hi2_huffcodes[24] = {
90 0x0664, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0064, 0x00e4,
91 0x00a4, 0x0068, 0x0004, 0x0008, 0x0014, 0x0018, 0x0000, 0x0001,
92 0x0002, 0x0003, 0x000c, 0x0028, 0x0024, 0x0164, 0x0000, 0x0264
95 static const byte vlc_tab_tone_level_idx_hi2_huffbits[24] = {
96 11, 0, 0, 0, 0, 0, 10, 8, 8, 7, 6, 6, 5, 5, 4, 2, 2, 2, 4, 7, 8, 9, 0, 11
100 static const byte vlc_tab_type30_huffcodes[9] = {
101 0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
104 static const byte vlc_tab_type30_huffbits[9] = {
105 6, 3, 3, 2, 2, 3, 4, 5, 6
109 static const byte vlc_tab_type34_huffcodes[10] = {
110 0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
113 static const byte vlc_tab_type34_huffbits[10] = {
114 5, 4, 3, 3, 3, 3, 3, 3, 3, 5
118 static const uint16 vlc_tab_fft_tone_offset_0_huffcodes[23] = {
119 0x038e, 0x0001, 0x0000, 0x0022, 0x000a, 0x0006, 0x0012, 0x0002,
120 0x001e, 0x003e, 0x0056, 0x0016, 0x000e, 0x0032, 0x0072, 0x0042,
121 0x008e, 0x004e, 0x00f2, 0x002e, 0x0036, 0x00c2, 0x018e
124 static const byte vlc_tab_fft_tone_offset_0_huffbits[23] = {
125 10, 1, 2, 6, 4, 5, 6, 7, 6, 6, 7, 7, 8, 7, 8, 8, 9, 7, 8, 6, 6, 8, 10
129 static const uint16 vlc_tab_fft_tone_offset_1_huffcodes[28] = {
130 0x07a4, 0x0001, 0x0020, 0x0012, 0x001c, 0x0008, 0x0006, 0x0010,
131 0x0000, 0x0014, 0x0004, 0x0032, 0x0070, 0x000c, 0x0002, 0x003a,
132 0x001a, 0x002c, 0x002a, 0x0022, 0x0024, 0x000a, 0x0064, 0x0030,
133 0x0062, 0x00a4, 0x01a4, 0x03a4
136 static const byte vlc_tab_fft_tone_offset_1_huffbits[28] = {
137 11, 1, 6, 6, 5, 4, 3, 6, 6, 5, 6, 6, 7, 6, 6, 6,
138 6, 6, 6, 7, 8, 6, 7, 7, 7, 9, 10, 11
142 static const uint16 vlc_tab_fft_tone_offset_2_huffcodes[32] = {
143 0x1760, 0x0001, 0x0000, 0x0082, 0x000c, 0x0006, 0x0003, 0x0007,
144 0x0008, 0x0004, 0x0010, 0x0012, 0x0022, 0x001a, 0x0000, 0x0020,
145 0x000a, 0x0040, 0x004a, 0x006a, 0x002a, 0x0042, 0x0002, 0x0060,
146 0x00aa, 0x00e0, 0x00c2, 0x01c2, 0x0160, 0x0360, 0x0760, 0x0f60
149 static const byte vlc_tab_fft_tone_offset_2_huffbits[32] = {
150 13, 2, 0, 8, 4, 3, 3, 3, 4, 4, 5, 5, 6, 5, 7, 7,
151 7, 7, 7, 7, 8, 8, 8, 9, 8, 8, 9, 9, 10, 11, 13, 12
155 static const uint16 vlc_tab_fft_tone_offset_3_huffcodes[35] = {
156 0x33ea, 0x0005, 0x0000, 0x000c, 0x0000, 0x0006, 0x0003, 0x0008,
157 0x0002, 0x0001, 0x0004, 0x0007, 0x001a, 0x000f, 0x001c, 0x002c,
158 0x000a, 0x001d, 0x002d, 0x002a, 0x000d, 0x004c, 0x008c, 0x006a,
159 0x00cd, 0x004d, 0x00ea, 0x020c, 0x030c, 0x010c, 0x01ea, 0x07ea,
160 0x0bea, 0x03ea, 0x13ea
163 static const byte vlc_tab_fft_tone_offset_3_huffbits[35] = {
164 14, 4, 0, 10, 4, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
165 6, 5, 6, 7, 7, 7, 8, 8, 8, 8, 9, 10, 10, 10, 10, 11,
170 static const uint16 vlc_tab_fft_tone_offset_4_huffcodes[38] = {
171 0x5282, 0x0016, 0x0000, 0x0136, 0x0004, 0x0000, 0x0007, 0x000a,
172 0x000e, 0x0003, 0x0001, 0x000d, 0x0006, 0x0009, 0x0012, 0x0005,
173 0x0025, 0x0022, 0x0015, 0x0002, 0x0076, 0x0035, 0x0042, 0x00c2,
174 0x0182, 0x00b6, 0x0036, 0x03c2, 0x0482, 0x01c2, 0x0682, 0x0882,
175 0x0a82, 0x0082, 0x0282, 0x1282, 0x3282, 0x2282
178 static const byte vlc_tab_fft_tone_offset_4_huffbits[38] = {
179 15, 6, 0, 9, 3, 3, 3, 4, 4, 3, 4, 4, 5, 4, 5, 6,
180 6, 6, 6, 8, 7, 6, 8, 9, 9, 8, 9, 10, 11, 10, 11, 12,
181 12, 12, 14, 15, 14, 14
187 static const uint16 fft_level_exp_alt_huffcodes[28] = {
188 0x1ec6, 0x0006, 0x00c2, 0x0142, 0x0242, 0x0246, 0x00c6, 0x0046,
189 0x0042, 0x0146, 0x00a2, 0x0062, 0x0026, 0x0016, 0x000e, 0x0005,
190 0x0004, 0x0003, 0x0000, 0x0001, 0x000a, 0x0012, 0x0002, 0x0022,
191 0x01c6, 0x02c6, 0x06c6, 0x0ec6
194 static const byte fft_level_exp_alt_huffbits[28] = {
195 13, 7, 8, 9, 10, 10, 10, 10, 10, 9, 8, 7, 6, 5, 4, 3,
196 3, 2, 3, 3, 4, 5, 7, 8, 9, 11, 12, 13
200 static const uint16 fft_level_exp_huffcodes[20] = {
201 0x0f24, 0x0001, 0x0002, 0x0000, 0x0006, 0x0005, 0x0007, 0x000c,
202 0x000b, 0x0014, 0x0013, 0x0004, 0x0003, 0x0023, 0x0064, 0x00a4,
203 0x0024, 0x0124, 0x0324, 0x0724
206 static const byte fft_level_exp_huffbits[20] = {
207 12, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 10, 11, 12
211 static const byte fft_stereo_exp_huffcodes[7] = {
212 0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
215 static const byte fft_stereo_exp_huffbits[7] = {
220 static const byte fft_stereo_phase_huffcodes[9] = {
221 0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
224 static const byte fft_stereo_phase_huffbits[9] = {
225 6, 2, 2, 4, 4, 6, 5, 4, 2
228 static const int fft_cutoff_index_table[4][2] = {
229 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
232 static const int16 fft_level_index_table[256] = {
233 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
234 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
235 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
236 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
237 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
238 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
239 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
240 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
241 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
242 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
243 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
244 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
245 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
246 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
247 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
248 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
251 static const byte last_coeff[3] = {
255 static const byte coeff_per_sb_for_avg[3][30] = {
256 { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
257 { 0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 },
258 { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9 }
261 static const uint32 dequant_table[3][10][30] = {
262 { { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
263 { 0, 256, 256, 205, 154, 102, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
264 { 0, 0, 0, 51, 102, 154, 205, 256, 238, 219, 201, 183, 165, 146, 128, 110, 91, 73, 55, 37, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
265 { 0, 0, 0, 0, 0, 0, 0, 0, 18, 37, 55, 73, 91, 110, 128, 146, 165, 183, 201, 219, 238, 256, 228, 199, 171, 142, 114, 85, 57, 28 },
266 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
267 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
268 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
269 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
270 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
271 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
272 { { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
273 { 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
274 { 0, 0, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
275 { 0, 0, 0, 85, 171, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
276 { 0, 0, 0, 0, 0, 0, 85, 171, 256, 219, 183, 146, 110, 73, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
277 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 73, 110, 146, 183, 219, 256, 228, 199, 171, 142, 114, 85, 57, 28, 0, 0, 0, 0, 0, 0 },
278 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 57, 85, 114, 142, 171, 199, 228, 256, 213, 171, 128, 85, 43 },
279 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
280 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
281 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
282 { { 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
283 { 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
284 { 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
285 { 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
286 { 0, 0, 0, 0, 256, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
287 { 0, 0, 0, 0, 0, 0, 256, 171, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
288 { 0, 0, 0, 0, 0, 0, 0, 85, 171, 256, 192, 128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
289 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 128, 192, 256, 205, 154, 102, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
290 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 102, 154, 205, 256, 213, 171, 128, 85, 43, 0, 0, 0, 0, 0, 0 },
291 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 85, 128, 171, 213, 256, 213, 171, 128, 85, 43 } }
294 static const byte coeff_per_sb_for_dequant[3][30] = {
295 { 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
296 { 0, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6 },
297 { 0, 1, 2, 3, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9 }
301 static const int8 tone_level_idx_offset_table[30][4] = {
302 { -50, -50, 0, -50 },
303 { -50, -50, 0, -50 },
336 static const int8 coding_method_table[5][30] = {
337 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
338 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
340 { 34, 30, 24, 24, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10,
341 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
343 { 34, 30, 30, 30, 24, 24, 16, 16, 16, 16, 16, 16, 10, 10, 10,
344 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10
346 { 34, 34, 30, 30, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16,
347 16, 16, 16, 16, 16, 16, 16, 10, 10, 10, 10, 10, 10, 10, 10
349 { 34, 34, 30, 30, 30, 30, 30, 30, 24, 24, 24, 24, 24, 24, 24,
350 24, 24, 24, 24, 24, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16
354 static const int vlc_stage3_values[60] = {
355 0, 1, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24,
356 28, 36, 44, 52, 60, 76, 92, 108, 124, 156, 188, 220,
357 252, 316, 380, 444, 508, 636, 764, 892, 1020, 1276, 1532, 1788,
358 2044, 2556, 3068, 3580, 4092, 5116, 6140, 7164, 8188, 10236, 12284, 14332,
359 16380, 20476, 24572, 28668, 32764, 40956, 49148, 57340, 65532, 81916, 98300,114684
362 static const float fft_tone_sample_table[4][16][5] = {
363 { { .0100000000f,-.0037037037f,-.0020000000f,-.0069444444f,-.0018416207f },
364 { .0416666667f, .0000000000f, .0000000000f,-.0208333333f,-.0123456791f },
365 { .1250000000f, .0558035709f, .0330687836f,-.0164473690f,-.0097465888f },
366 { .1562500000f, .0625000000f, .0370370370f,-.0062500000f,-.0037037037f },
367 { .1996007860f, .0781250000f, .0462962948f, .0022727272f, .0013468013f },
368 { .2000000000f, .0625000000f, .0370370373f, .0208333333f, .0074074073f },
369 { .2127659619f, .0555555556f, .0329218097f, .0208333333f, .0123456791f },
370 { .2173913121f, .0473484844f, .0280583613f, .0347222239f, .0205761325f },
371 { .2173913121f, .0347222239f, .0205761325f, .0473484844f, .0280583613f },
372 { .2127659619f, .0208333333f, .0123456791f, .0555555556f, .0329218097f },
373 { .2000000000f, .0208333333f, .0074074073f, .0625000000f, .0370370370f },
374 { .1996007860f, .0022727272f, .0013468013f, .0781250000f, .0462962948f },
375 { .1562500000f,-.0062500000f,-.0037037037f, .0625000000f, .0370370370f },
376 { .1250000000f,-.0164473690f,-.0097465888f, .0558035709f, .0330687836f },
377 { .0416666667f,-.0208333333f,-.0123456791f, .0000000000f, .0000000000f },
378 { .0100000000f,-.0069444444f,-.0018416207f,-.0037037037f,-.0020000000f } },
380 { { .0050000000f,-.0200000000f, .0125000000f,-.3030303030f, .0020000000f },
381 { .1041666642f, .0400000000f,-.0250000000f, .0333333333f,-.0200000000f },
382 { .1250000000f, .0100000000f, .0142857144f,-.0500000007f,-.0200000000f },
383 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
384 { .1562500000f,-.0006250000f,-.00049382716f,-.000625000f,-.00049382716f },
385 { .1250000000f,-.0500000000f,-.0200000000f, .0100000000f, .0142857144f },
386 { .1041666667f, .0333333333f,-.0200000000f, .0400000000f,-.0250000000f },
387 { .0050000000f,-.3030303030f, .0020000001f,-.0200000000f, .0125000000f },
388 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
389 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
390 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
391 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
392 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
393 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
394 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
395 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
397 { { .1428571492f, .1250000000f,-.0285714287f,-.0357142873f, .0208333333f },
398 { .1818181818f, .0588235296f, .0333333333f, .0212765951f, .0100000000f },
399 { .1818181818f, .0212765951f, .0100000000f, .0588235296f, .0333333333f },
400 { .1428571492f,-.0357142873f, .0208333333f, .1250000000f,-.0285714287f },
401 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
402 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
403 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
404 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
405 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
406 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
407 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
408 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
409 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
410 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
411 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
412 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } },
414 { { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
415 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
416 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
417 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
418 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
419 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
420 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
421 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
422 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
423 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
424 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
425 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
426 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
427 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
428 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f },
429 { .0000000000f, .0000000000f, .0000000000f, .0000000000f, .0000000000f } }
432 static const float fft_tone_level_table[2][64] = { {
434 0.17677669f, 0.42677650f, 0.60355347f, 0.85355347f,
435 1.20710683f, 1.68359375f, 2.37500000f, 3.36718750f,
436 4.75000000f, 6.73437500f, 9.50000000f, 13.4687500f,
437 19.0000000f, 26.9375000f, 38.0000000f, 53.8750000f,
438 76.0000000f, 107.750000f, 152.000000f, 215.500000f,
439 304.000000f, 431.000000f, 608.000000f, 862.000000f,
440 1216.00000f, 1724.00000f, 2432.00000f, 3448.00000f,
441 4864.00000f, 6896.00000f, 9728.00000f, 13792.0000f,
442 19456.0000f, 27584.0000f, 38912.0000f, 55168.0000f,
443 77824.0000f, 110336.000f, 155648.000f, 220672.000f,
444 311296.000f, 441344.000f, 622592.000f, 882688.000f,
445 1245184.00f, 1765376.00f, 2490368.00f, 0.00000000f,
446 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
447 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
448 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
449 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
452 0.59375000f, 0.84179688f, 1.18750000f, 1.68359375f,
453 2.37500000f, 3.36718750f, 4.75000000f, 6.73437500f,
454 9.50000000f, 13.4687500f, 19.0000000f, 26.9375000f,
455 38.0000000f, 53.8750000f, 76.0000000f, 107.750000f,
456 152.000000f, 215.500000f, 304.000000f, 431.000000f,
457 608.000000f, 862.000000f, 1216.00000f, 1724.00000f,
458 2432.00000f, 3448.00000f, 4864.00000f, 6896.00000f,
459 9728.00000f, 13792.0000f, 19456.0000f, 27584.0000f,
460 38912.0000f, 55168.0000f, 77824.0000f, 110336.000f,
461 155648.000f, 220672.000f, 311296.000f, 441344.000f,
462 622592.000f, 882688.000f, 1245184.00f, 1765376.00f,
463 2490368.00f, 3530752.00f, 0.00000000f, 0.00000000f,
464 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
465 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
466 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f,
467 0.00000000f, 0.00000000f, 0.00000000f, 0.00000000f
470 static const float fft_tone_envelope_table[4][31] = {
471 { .009607375f, .038060248f, .084265202f, .146446645f, .222214907f, .308658302f,
472 .402454883f, .500000060f, .597545207f, .691341758f, .777785182f, .853553414f,
473 .915734828f, .961939812f, .990392685f, 1.00000000f, .990392625f, .961939752f,
474 .915734768f, .853553295f, .777785063f, .691341639f, .597545087f, .500000000f,
475 .402454853f, .308658272f, .222214878f, .146446615f, .084265172f, .038060218f,
477 { .038060248f, .146446645f, .308658302f, .500000060f, .691341758f, .853553414f,
478 .961939812f, 1.00000000f, .961939752f, .853553295f, .691341639f, .500000000f,
479 .308658272f, .146446615f, .038060218f, .000000000f, .000000000f, .000000000f,
480 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
481 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
483 { .146446645f, .500000060f, .853553414f, 1.00000000f, .853553295f, .500000000f,
484 .146446615f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
485 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
486 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
487 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
489 { .500000060f, 1.00000000f, .500000000f, .000000000f, .000000000f, .000000000f,
490 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
491 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
492 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
493 .000000000f, .000000000f, .000000000f, .000000000f, .000000000f, .000000000f,
497 static const float sb_noise_attenuation[32] = {
498 0.0f, 0.0f, 0.3f, 0.4f, 0.5f, 0.7f, 1.0f, 1.0f,
499 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
500 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
501 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f,
504 static const byte fft_subpackets[32] = {
505 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
506 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0
510 static const float dequant_1bit[2][3] = {
511 {-0.920000f, 0.000000f, 0.920000f },
512 {-0.890000f, 0.000000f, 0.890000f }
515 static const float type30_dequant[8] = {
516 -1.0f,-0.625f,-0.291666656732559f,0.0f,
517 0.25f,0.5f,0.75f,1.0f,
520 static const float type34_delta[10] = {
521 -1.0f,-0.60947573184967f,-0.333333343267441f,-0.138071194291115f,0.0f,
522 0.138071194291115f,0.333333343267441f,0.60947573184967f,1.0f,0.0f,