音频单位样本值范围

2 c++ math trigonometry audiounit

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

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

所以我想知道在我开始收到脏声之前我的最大样本值是多少.

jus*_*tin 5

在OS X上

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

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

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

这有一些例外:

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

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

在iOS上

由于iOS设备上的浮点处理速度要慢得多,因此AudioUnitSampleTypecanonic被指定为Q7.24固定点.

可在此处找到此格式的说明.另请参阅本主题的相关帖子.

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

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