从u-law转换为PCM,16位

时间:2016-12-12 11:11:35

标签: c pcm mu-law

我目前在我的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);
}

有人可以告诉我第二个功能有什么问题吗? 感谢

1 个答案:

答案 0 :(得分:0)

尝试将i = (c & 0x00FF);替换为i = (c & 0x00FF) ^ 0x00FF;                     –伊恩·雅培