3

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

我正在使用 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”,我认为这是正确的?

那么为什么第一个样本没有被读取为零,正如我所知道的那样?

4

1 回答 1

1

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

于 2011-03-07T16:21:59.510 回答