音频单位样本值范围

时间:2012-08-24 16:07:23

标签: c++ math audiounit sine

我想知道音频单元在缓冲区中期望的值。现在,当我计算一个频率为0.5的正弦波样本时,一切正常。

但是,当我想同时播放几个频率时,例如同时播放5个频率,我将样本混合在一起,样本值越来越高,声音不再干净。

所以我想知道在开始发出肮脏的声音之前我的最大样本值是多少。

1 个答案:

答案 0 :(得分:5)

在OS X上

样本值通常在[-1.0...1.0)内,其中最大值和最小值对应于0 dBFS。但是,您应该准备好处理更大的样本值。

许多使用浮点渲染/混合图的人习惯于在不考虑超过0 dBFS的情况下工作。只有在输出到硬件或音频文件时,它们才可以验证信号是否不超过0 dBFS。

如果你只有一个合成5个正弦的合成器,每个都是-6 dBFS,那么在正常情况下,即使你超过[-1 ... 1)也不会有信号削波,因为你使用的是浮点数数字代表你的信号。

有一些例外:

  • 您正在使用一个不使用浮点混音器的异常AU主机(我想不到一个主动开发的主机)
  • 或者在输出到DAC之前没有降低输出
  • 或者在将输出保存到文件之前不降低输出(虽然音频文件也可以保存在浮点状态)
  • 信号路径中某处的组件不会以浮点或浮点输入进行处理。这种情况在专用硬件处理器中很常见,但是现在很多第三方插件都处于浮点状态。

我通常会通过向它发送一个显然会剪辑的信号来证明/反驳这一点。当然,选择使用整数处理的信号处理器/发生器可以(并且应该)留下大量的余量以避免削波(因为处理器不太可能使用小于32位的任何处理音频)。

在iOS上

由于iOS设备上的浮点处理速度要慢得多,因此将标准AudioUnitSampleType指定为Q7.24固定点。

对此格式的解释can be found here。另请参阅本主题的帖子。

因为这不是浮点数,所以你必须更加小心你的增益阶段,以避免内部削波。

另请注意,可以在iOS上配置32位float图表。在这种情况下,您应避免在处理器的输出处超过[-1.0...1.0),因为很可能您的输出将很快转换为非浮点表示(与OS X相比),除非您当然可以直接控制加工链下游适当点的增益分级,并适当调整这些点的振幅。