这是我的第一篇文章,所以我希望有人可以提供帮助!
我正在使用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',我相信它是正确的吗?
那么为什么第一个样本没有被读为零,我知道它们是什么?
如果有人可以提供帮助,我将非常感激!
萨姆
答案 0 :(得分:1)
您需要先从无符号数据中减去32768,因此它居中为0。