2012-08-24 51 views
2

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

但是当我想要同时播放几个频率时,例如同时播放5个频率,我将这些样本合计起来,样本值就会变得更高,并且声音不再清晰。

所以我想知道我的最大样本值可以在我开始变得肮脏的声音之前。

+0

你可以对它们进行标准化,而不是直接添加它们,你可以为每个样本执行一个均值。 –

+0

关于如何完成的任何示例? – networkprofile

+0

如果在你的代码中你正在做'out [i] = a [i] + b [i] + c [i]',那么现在你应该'out [i] =(a [i] + b [i] + C [1])/ 3'。 –

回答

6

在OS X

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

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

如果你只有一个合成器,合计5个正弦,每个都在-6 dBFS,在正常情况下,即使你超过[-1 ... 1),也不应该剪切信号,因为你正在使用浮动点数代表你的信号。

也有少数例外情况:

  • 你使用不使用浮点混频器不同寻常的AU主机(我想不出一个被积极开发的)
  • 或不使产量下降它击中DAC之前
  • 或没带下来之前它被保存到一个文件中(虽然录音文件可在浮点保存太)输出
  • 组件某处信号路径不处理在浮点或支持浮点输入秒。这对于专用硬件处理器来说很常见,但现在很多第三方插件都处于浮点处理状态。

我会典型地通过发送一个明显的剪辑信号来证明/反驳。当然,选择使用ints进行处理的信号处理器/发生器可以(并且应该)留出大量的空间来避免削波(因为处理器不太可能使用小于32位的任何处理来处理音频)。

在iOS

因为浮点处理是在iOS设备慢得多,所述法服AudioUnitSampleType被指定为Q7.24固定点。

对这种格式的解释can be found here。另请参阅与此主题相关的帖子。

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

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

+0

通过在达到DAC之前将输出降低到什么程度意味着什么。这与振幅有什么关系?我只是将我的样本总和发送到缓冲区。我的代码基于此示例:http://cocoawithlove.com/2010/10/ios-tone-generator-introduction-to.html – networkprofile

+0

@Sled该文章是关于iOS上的AudioUnits - 与桌面完全不同的世界,原始/通用/开放的AudioUnit。将不得不更新答案。我的答案是关于OS X上的AU. – justin

+0

对不起,我应该提到这是一个iOS应用程序,但并不认为这很重要。 – networkprofile