Subversion Repositories tpanel

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
478 andreas 1
/*
2
 * Copyright (C) 2024 by Andreas Theofilu <andreas@theosys.at>
3
 *
4
 * This program is free software; you can redistribute it and/or modify
5
 * it under the terms of the GNU General Public License as published by
6
 * the Free Software Foundation; either version 3 of the License, or
7
 * (at your option) any later version.
8
 *
9
 * This program is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
 * GNU General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU General Public License
15
 * along with this program; if not, write to the Free Software Foundation,
16
 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
17
 */
18
 
19
#ifndef TAUDIOCONVERT_H
20
#define TAUDIOCONVERT_H
21
 
22
#include <cstdint>
23
 
24
class TAudioConvert
25
{
26
    public:
27
        TAudioConvert();
28
        ~TAudioConvert();
29
 
30
        int16_t uLawDecodeDigital(int8_t number);
31
        int8_t uLawEncodeDigital(int16_t number);
32
        int8_t linearToMuLaw(int16_t sample);
33
        int8_t linearToALaw(int16_t sample);
34
        int16_t muLawToLinear(uint8_t ulawbyte);
35
        int16_t aLawToLinear(uint8_t alawbyte);
36
 
37
    private:
38
        int cBias{0x0084};
39
        int cClip{32635};
40
 
41
        unsigned char MuLawCompressTable[256] =
42
        {
43
            0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
44
            4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
45
            5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
46
            5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
47
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
48
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
49
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
50
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
51
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
52
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
53
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
54
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
55
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
56
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
57
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
58
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
59
        };
60
 
61
        unsigned char ALawCompressTable[128] =
62
        {
63
            1,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,
64
            5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
65
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
66
            6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
67
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
68
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
69
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
70
            7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7
71
        };
72
 
73
        int16_t MuLawDecompressTable[256] =
74
        {
75
            -32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,
76
            -23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,
77
            -15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,
78
            -11900,-11388,-10876,-10364, -9852, -9340, -8828, -8316,
79
            -7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,
80
            -5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,
81
            -3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,
82
            -2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,
83
            -1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,
84
            -1372, -1308, -1244, -1180, -1116, -1052,  -988,  -924,
85
            -876,  -844,  -812,  -780,  -748,  -716,  -684,  -652,
86
            -620,  -588,  -556,  -524,  -492,  -460,  -428,  -396,
87
            -372,  -356,  -340,  -324,  -308,  -292,  -276,  -260,
88
            -244,  -228,  -212,  -196,  -180,  -164,  -148,  -132,
89
            -120,  -112,  -104,   -96,   -88,   -80,   -72,   -64,
90
            -56,   -48,   -40,   -32,   -24,   -16,    -8,     0,
91
            32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,
92
            23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,
93
            15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,
94
            11900, 11388, 10876, 10364,  9852,  9340,  8828,  8316,
95
            7932,  7676,  7420,  7164,  6908,  6652,  6396,  6140,
96
            5884,  5628,  5372,  5116,  4860,  4604,  4348,  4092,
97
            3900,  3772,  3644,  3516,  3388,  3260,  3132,  3004,
98
            2876,  2748,  2620,  2492,  2364,  2236,  2108,  1980,
99
            1884,  1820,  1756,  1692,  1628,  1564,  1500,  1436,
100
            1372,  1308,  1244,  1180,  1116,  1052,   988,   924,
101
            876,   844,   812,   780,   748,   716,   684,   652,
102
            620,   588,   556,   524,   492,   460,   428,   396,
103
            372,   356,   340,   324,   308,   292,   276,   260,
104
            244,   228,   212,   196,   180,   164,   148,   132,
105
            120,   112,   104,    96,    88,    80,    72,    64,
106
            56,    48,    40,    32,    24,    16,     8,     0
107
        };
108
 
109
        int16_t ALawDecompressTable[256] =
110
        {
111
            -5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
112
            -7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
113
            -2752, -2624, -3008, -2880, -2240, -2112, -2496, -2368,
114
            -3776, -3648, -4032, -3904, -3264, -3136, -3520, -3392,
115
            -22016,-20992,-24064,-23040,-17920,-16896,-19968,-18944,
116
            -30208,-29184,-32256,-31232,-26112,-25088,-28160,-27136,
117
            -11008,-10496,-12032,-11520,-8960, -8448, -9984, -9472,
118
            -15104,-14592,-16128,-15616,-13056,-12544,-14080,-13568,
119
            -344,  -328,  -376,  -360,  -280,  -264,  -312,  -296,
120
            -472,  -456,  -504,  -488,  -408,  -392,  -440,  -424,
121
            -88,   -72,   -120,  -104,  -24,   -8,    -56,   -40,
122
            -216,  -200,  -248,  -232,  -152,  -136,  -184,  -168,
123
            -1376, -1312, -1504, -1440, -1120, -1056, -1248, -1184,
124
            -1888, -1824, -2016, -1952, -1632, -1568, -1760, -1696,
125
            -688,  -656,  -752,  -720,  -560,  -528,  -624,  -592,
126
            -944,  -912,  -1008, -976,  -816,  -784,  -880,  -848,
127
            5504,  5248,  6016,  5760,  4480,  4224,  4992,  4736,
128
            7552,  7296,  8064,  7808,  6528,  6272,  7040,  6784,
129
            2752,  2624,  3008,  2880,  2240,  2112,  2496,  2368,
130
            3776,  3648,  4032,  3904,  3264,  3136,  3520,  3392,
131
            22016, 20992, 24064, 23040, 17920, 16896, 19968, 18944,
132
            30208, 29184, 32256, 31232, 26112, 25088, 28160, 27136,
133
            11008, 10496, 12032, 11520, 8960,  8448,  9984,  9472,
134
            15104, 14592, 16128, 15616, 13056, 12544, 14080, 13568,
135
            344,   328,   376,   360,   280,   264,   312,   296,
136
            472,   456,   504,   488,   408,   392,   440,   424,
137
            88,    72,   120,   104,    24,     8,    56,    40,
138
            216,   200,   248,   232,   152,   136,   184,   168,
139
            1376,  1312,  1504,  1440,  1120,  1056,  1248,  1184,
140
            1888,  1824,  2016,  1952,  1632,  1568,  1760,  1696,
141
            688,   656,   752,   720,   560,   528,   624,   592,
142
            944,   912,  1008,   976,   816,   784,   880,   848
143
        };
144
};
145
 
146
#endif // TAUDIOCONVERT_H