我目前在我的C源代码中使用两个函数将A-law文件转换为PCM 16位和U-law文件转换为PCM 16位。 U-law文件到PCM 16位的转换不成功。生成的PCM 16位文件有很多噪音。
下面有两个功能:
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);
}
有人可以告诉我第二个功能有什么问题吗? 感谢
答案 0 :(得分:0)
尝试将i = (c & 0x00FF);
替换为i = (c & 0x00FF) ^ 0x00FF;
–伊恩·雅培