【发布时间】:2011-07-10 11:21:33
【问题描述】:
这是我的第一篇文章,所以希望有人能提供帮助!
我正在使用 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 不是浮点的有效样本值。这允许通过简单的乘法或除法进行与浮点数的无损转换。
-
嗨 sbooth,谢谢,是的,我还有一个子程序可以在进一步处理之前将任何 +1.0 值更改为 +0.999...!
标签: objective-c audio core-audio pcm