将16Bit PCM值转换为-1到1的值

时间:2011-03-07 16:18:16

标签: audio core-audio pcm

这是我的第一篇文章,所以我希望有人可以提供帮助!

我正在使用AudioFileReadPackets函数读取音频数据(在CoreAudio中),此代码正常工作并将16位PCM值加载到缓冲区中。

第一个样本值是:'65491'(此音频开头有静音)。我知道这是一个无符号整数,所以我的问题是,如何将此值转换为-1到1的范围。

目前我将样本值除以32768.0为浮点变量,就像这样......

    for (UInt32 i = 0; i < packetCount; i++){ 

            sample = *(audioData + i);


            //turn it into the range -1.0 - 1.0
            monoFloatDataLeft[i] = (float)sample / 32768.0;

        }

然而,对于上面给出的样本(例如),这导致输出'1.998626709'不为零(因为它应该用于静音)?

这样说,当我稍后在文件中查看一个样本时,我知道它的值在'0.3'左右,算法的结果出现在'0.311584473',我相信它是正确的吗?

那么为什么第一个样本没有被读为零,我知道它们是什么?

如果有人可以提供帮助,我将非常感激!

萨姆

1 个答案:

答案 0 :(得分:1)

您需要先从无符号数据中减去32768,因此它居中为0。