这是我的第一篇文章,所以我希望有人能帮助我!
我正在使用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.311584473‘标记附近,算法的结果是'0.3’,我相信它是正确的?
那么,为什么第一批样本没有被读取为零,正如我所知的那样?
发布于 2011-03-08 00:22:00
你需要先从你的无符号数据中减去32768,所以它以0为中心。
https://stackoverflow.com/questions/5222056
复制相似问题