我想知道音频单元在缓冲区中期望的值。现在,当我计算一个频率为0.5的正弦波样本时,一切正常。
但是,当我想同时播放几个频率时,例如同时播放5个频率,我将样本混合在一起,样本值越来越高,声音不再干净。
所以我想知道在开始发出肮脏的声音之前我的最大样本值是多少。
答案 0 :(得分:5)
在OS X上
样本值通常在[-1.0...1.0)
内,其中最大值和最小值对应于0 dBFS。但是,您应该准备好处理更大的样本值。
许多使用浮点渲染/混合图的人习惯于在不考虑超过0 dBFS的情况下工作。只有在输出到硬件或音频文件时,它们才可以验证信号是否不超过0 dBFS。
如果你只有一个合成5个正弦的合成器,每个都是-6 dBFS,那么在正常情况下,即使你超过[-1 ... 1)也不会有信号削波,因为你使用的是浮点数数字代表你的信号。
有一些例外:
我通常会通过向它发送一个显然会剪辑的信号来证明/反驳这一点。当然,选择使用整数处理的信号处理器/发生器可以(并且应该)留下大量的余量以避免削波(因为处理器不太可能使用小于32位的任何处理音频)。
在iOS上
由于iOS设备上的浮点处理速度要慢得多,因此将标准AudioUnitSampleType
指定为Q7.24固定点。
对此格式的解释can be found here。另请参阅本主题的帖子。
因为这不是浮点数,所以你必须更加小心你的增益阶段,以避免内部削波。
另请注意,可以在iOS上配置32位float
图表。在这种情况下,您应避免在处理器的输出处超过[-1.0...1.0)
,因为很可能您的输出将很快转换为非浮点表示(与OS X相比),除非您当然可以直接控制加工链下游适当点的增益分级,并适当调整这些点的振幅。