|
#define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */
#define QUANT_MASK (0xf) /* Quantization field mask. */
#define SEG_SHIFT (4) /* Left shift for segment number. */
#define SEG_MASK (0x70) /* Segment field mask. */
/*
* alaw2linear() - Convert an A-law value to 16-bit linear PCM
*
*/
int alaw2linear(
int a_val)
{
int t;
int seg;a_val ^= 0x55;
t = (a_val & QUANT_MASK) << 4;
seg = (a_val & SEG_MASK) >> SEG_SHIFT;
switch (seg) {
case 0:
t += 8;
break;
case 1:
t += 0x108;
break;
default:
t += 0x108;
t <<= seg - 1;
}
return ((a_val & SIGN_BIT) ? t : -t);
}
Составить ответ ||| Конференция ||| Архив
Ответы
E-mail: info@telesys.ru