alaw.c

来自「speech signal process tools」· C语言 代码 · 共 38 行

C
38
字号
int alaw2linear(unsigned char alawbyte){  int sign, mantissa, exponent;  alawbyte ^= 0x55;  sign = alawbyte & 0x80;  mantissa = alawbyte & 0x0f;  exponent = (alawbyte & 0x70) >> 4;  if (exponent > 0) mantissa |= 0x10;  mantissa = (mantissa << 4) + 0x0008;  if (exponent > 1) mantissa <<= exponent - 1;  return sign ? mantissa : -mantissa;}unsigned char linear2alaw(int sample){  int sign, mantissa, exponent;  static unsigned char table[128] =  {    0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,    5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,     6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,    6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,     7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,     7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,     7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,     7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7  };  sign = (sample >> 8) & 0x80;  if (sign) sample = ~sample;  sample >>= 4;  exponent = table[sample >> 4];  if (exponent > 1) sample >>= exponent - 1;  return ((sample & 0x000f) | (exponent << 4) | (sign ^ 0x80)) ^ 0x0055;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?