2

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

但是,当我想同时播放多个频率时,例如一次播放 5 个频率,我通过将样本相加来将样本混合在一起,样本值会变得更高,并且声音不再干净。

所以我想知道我的最大采样值是多少,然后才开始听到脏音。

4

1 回答 1

5

在 OS X 上

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

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

如果您只有一个将 5 个正弦相加的合成器,每个正弦为 -6 dBFS,那么在正常情况下应该没有信号削波,即使您超过 [-1...1),因为您使用浮点数来表示你的信号。

有几个例外:

  • 您正在使用不使用浮点混合器的不寻常的 AU 主机(我想不出一个正在积极开发的主机)
  • 或在输出到达 DAC 之前不降低输出
  • 或在将输出保存到文件之前不降低输出(尽管音频文件也可以保存为浮点数)
  • 信号路径中某处的组件不以浮点方式处理或不支持浮点输入。这对于专用硬件处理器很常见,但如今许多第 3 方插件都以浮点方式处理。

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

在 iOS 上

因为 iOS 设备上的浮点处理速度要慢得多,所以规范AudioUnitSampleType被指定为 Q7.24 定点。

可以在此处找到此格式的说明。另请参阅围绕此主题的帖子。

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

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

于 2012-08-24T16:29:46.343 回答