liusuyi
6 天以前 307977cfb9fb88f845e36e4041c082ffdd691da5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package cn.org.hentai.jtt1078.util;
 
public class G711Util {
 
    // 优化的G.711A解码方法
    public static byte[] decodeG711AFast(byte[] alawData) {
        byte[] pcmData = new byte[alawData.length * 2];
        for (int i = 0; i < alawData.length; i++) {
            short pcm = ALAW_TABLE[alawData[i] & 0xFF];
            pcmData[i * 2] = (byte) (pcm & 0xFF);
            pcmData[i * 2 + 1] = (byte) (pcm >> 8);
        }
        return pcmData;
    }
 
    // A-law解码查找表
    private static final short[] ALAW_TABLE = new short[256];
 
    static {
        for (int i = 0; i < 256; i++) {
            int alaw = i ^ 0x55;
            int sign = alaw & 0x80;
            int exponent = (alaw & 0x70) >> 4;
            int data = alaw & 0x0F;
 
            data = (data << 4) + 8;
            if (exponent != 0) data += 0x100;
            if (exponent > 1) data <<= (exponent - 1);
 
            ALAW_TABLE[i] = (short) (sign == 0 ? data : -data);
        }
    }
}