22#ifndef AUDIO_QDM2DATA_H
23#define AUDIO_QDM2DATA_H
25#include "common/scummsys.h"
32static 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
38static 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
43static 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
51static 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,
58static const byte vlc_tab_run_huffcodes[6] = {
59 0x1f, 0x00, 0x01, 0x03, 0x07, 0x0f
62static const byte vlc_tab_run_huffbits[6] = {
67static 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
73static 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
78static 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
84static 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
89static 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
95static 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
100static const byte vlc_tab_type30_huffcodes[9] = {
101 0x3c, 0x06, 0x00, 0x01, 0x03, 0x02, 0x04, 0x0c, 0x1c
104static const byte vlc_tab_type30_huffbits[9] = {
105 6, 3, 3, 2, 2, 3, 4, 5, 6
109static const byte vlc_tab_type34_huffcodes[10] = {
110 0x18, 0x00, 0x01, 0x04, 0x05, 0x07, 0x03, 0x02, 0x06, 0x08
113static const byte vlc_tab_type34_huffbits[10] = {
114 5, 4, 3, 3, 3, 3, 3, 3, 3, 5
118static 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
124static 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
129static 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
136static 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
142static 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
149static 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
155static 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
163static 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,
170static 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
178static 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
187static 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
194static 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
200static 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
206static 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
211static const byte fft_stereo_exp_huffcodes[7] = {
212 0x3e, 0x01, 0x00, 0x02, 0x06, 0x0e, 0x1e
215static const byte fft_stereo_exp_huffbits[7] = {
220static const byte fft_stereo_phase_huffcodes[9] = {
221 0x35, 0x02, 0x00, 0x01, 0x0d, 0x15, 0x05, 0x09, 0x03
224static const byte fft_stereo_phase_huffbits[9] = {
225 6, 2, 2, 4, 4, 6, 5, 4, 2
228static const int fft_cutoff_index_table[4][2] = {
229 { 1, 2 }, {-1, 0 }, {-1,-2 }, { 0, 0 }
232static 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,
251static const byte last_coeff[3] = {
255static 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 }
261static 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 } }
294static 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 }
301static const int8 tone_level_idx_offset_table[30][4] = {
302 { -50, -50, 0, -50 },
303 { -50, -50, 0, -50 },
336static 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
354static 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
362static 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 } }
432static 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
470static 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,
497static 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,
504static 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
510static const float dequant_1bit[2][3] = {
511 {-0.920000f, 0.000000f, 0.920000f },
512 {-0.890000f, 0.000000f, 0.890000f }
515static const float type30_dequant[8] = {
516 -1.0f,-0.625f,-0.291666656732559f,0.0f,
517 0.25f,0.5f,0.75f,1.0f,
520static 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,