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);
|
}
|
}
|
}
|