Преобразование из 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; - Ян Эбботт

Другие вопросы по тегам