attempt to support d1 for mac mission
[btb/d2x.git] / main / mve_audio.c
1 static int audio_exp_table[256] =
2 {
3          0,      1,      2,      3,      4,      5,      6,      7,      8,      9,     10,     11,     12,     13,     14,     15,
4         16,     17,     18,     19,     20,     21,     22,     23,     24,     25,     26,     27,     28,     29,     30,     31,
5         32,     33,     34,     35,     36,     37,     38,     39,     40,     41,     42,     43,     47,     51,     56,     61,
6         66,     72,     79,     86,     94,    102,    112,    122,    133,    145,    158,    173,    189,    206,    225,    245,
7        267,    292,    318,    348,    379,    414,    452,    493,    538,    587,    640,    699,    763,    832,    908,    991,
8       1081,   1180,   1288,   1405,   1534,   1673,   1826,   1993,   2175,   2373,   2590,   2826,   3084,   3365,   3672,   4008,
9       4373,   4772,   5208,   5683,   6202,   6767,   7385,   8059,   8794,   9597,  10472,  11428,  12471,  13609,  14851,  16206,
10      17685,  19298,  21060,  22981,  25078,  27367,  29864,  32589, -29973, -26728, -23186, -19322, -15105, -10503,  -5481,     -1,
11          1,      1,   5481,  10503,  15105,  19322,  23186,  26728,  29973, -32589, -29864, -27367, -25078, -22981, -21060, -19298,
12     -17685, -16206, -14851, -13609, -12471, -11428, -10472,  -9597,  -8794,  -8059,  -7385,  -6767,  -6202,  -5683,  -5208,  -4772,
13      -4373,  -4008,  -3672,  -3365,  -3084,  -2826,  -2590,  -2373,  -2175,  -1993,  -1826,  -1673,  -1534,  -1405,  -1288,  -1180,
14      -1081,   -991,   -908,   -832,   -763,   -699,   -640,   -587,   -538,   -493,   -452,   -414,   -379,   -348,   -318,   -292,
15       -267,   -245,   -225,   -206,   -189,   -173,   -158,   -145,   -133,   -122,   -112,   -102,    -94,    -86,    -79,    -72,
16        -66,    -61,    -56,    -51,    -47,    -43,    -42,    -41,    -40,    -39,    -38,    -37,    -36,    -35,    -34,    -33,
17        -32,    -31,    -30,    -29,    -28,    -27,    -26,    -25,    -24,    -23,    -22,    -21,    -20,    -19,    -18,    -17,
18        -16,    -15,    -14,    -13,    -12,    -11,    -10,     -9,     -8,     -7,     -6,     -5,     -4,     -3,     -2,     -1
19 };
20
21 static int getWord(unsigned char **fin)
22 {
23     int value = ((*fin)[1] << 8) | (*fin)[0];
24     *fin += 2;
25     return value;
26 }
27
28 static void sendWord(short **fout, int nOffset)
29 {
30     *(*fout)++ = nOffset;
31 }
32
33 static void processSwath(short *fout, unsigned char *data, int swath, int *offsets)
34 {
35     int i;
36     for (i=0; i<swath; i++)
37     {
38         offsets[i&1] += audio_exp_table[data[i]];
39         sendWord(&fout, offsets[i&1]);
40     }
41 }
42
43 void mveaudio_uncompress(short *buffer, unsigned char *data, int length)
44 {
45     int nCurOffsets[2];
46     int swath;
47
48     data += 4;
49     swath = getWord(&data) / 2;
50     nCurOffsets[0] = getWord(&data);
51     nCurOffsets[1] = getWord(&data);
52     sendWord(&buffer, nCurOffsets[0]);
53     sendWord(&buffer, nCurOffsets[1]);
54     processSwath(buffer, data, swath, nCurOffsets);
55 }