Преобразование из u-law в PCM, 16 бит
В настоящее время я использую две функции в исходном коде C для преобразования файлов A-law в 16-битные PCM и файлов U-law в 16-битные PCM. Преобразование файлов U-law в PCM 16 бит не является успешным. В производимом 16-битном файле PCM много шума.
Ниже представлены две функции:
short ALawToPcm16(char c)
{
int i;
short val;
i = (c & 0x00FF) ^ 0x0055;
if (i > 0x007F)
{
val = (short)(0x10000 - AIndexToPcm16Bit[i - 0x80]);
}
else
{
val = AIndexToPcm16Bit[i];
}
return(val);
}
short FctMuLawToPcm16(char c)
{
int i;
short val;
i = (c & 0x00FF);
if (i > 0x007F)
{
val = (short)(0x10000 - UIndexToPcm16Bit[i - 0x80]);
}
else
{
val = UIndexToPcm16Bit[i];
}
return(val);
}
Может кто-нибудь сказать, пожалуйста, что не так со второй функцией? Спасибо
1 ответ
Попробуйте заменить i = (c & 0x00FF);
с i = (c & 0x00FF) ^ 0x00FF;
- Ян Эбботт