gpt4 book ai didi

c++ - 音频单元样本值范围

转载 作者:搜寻专家 更新时间:2023-10-31 00:42:21 25 4
gpt4 key购买 nike

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

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

所以我想知道在我开始听到脏音之前我的最大采样值是多少。

最佳答案

在 OS X 上

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

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

如果您只有一个将 5 个正弦相加的合成器,每个正弦为 -6 dBFS,在正常情况下应该不会出现信号削波,即使您超过 [-1...1) 因为您使用的是 float 代表您的信号的数字。

有一些异常(exception)情况:

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

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

在 iOS 上

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

此格式的解释can be found here .另请参阅围绕该主题的帖子。

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

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

关于c++ - 音频单元样本值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12112945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com