【发布时间】:2012-08-24 16:07:22
【问题描述】:
我想知道音频单元在缓冲区中期望什么样的值。现在,当我计算振幅为 0.5 的单个频率上的正弦波样本时,一切正常。
但是当我想同时播放多个频率时,例如一次播放 5 个频率,然后我通过将它们相加来将样本混合在一起,样本值会变得更高,并且声音不再干净。
所以我想知道我的最大采样值是多少,然后才开始听到脏声音。
【问题讨论】:
-
您可以对它们进行归一化,也就是说,您可以对每个样本执行平均值,而不是简单地添加它们。
-
有什么例子可以说明这是如何做到的吗?
-
如果在你的代码中你正在做
out[i]=a[i]+b[i]+c[i],现在你会做out[i]=(a[i]+b[i]+c[i])/3。 -
如果我从三个音符变为四个音符并突然除以 4,这不会造成任何问题吗?我的意思是,幅度的突然变化不会很明显吗?
-
当然,这很明显,这完全取决于您的目标是什么。如果您想添加两个声音(就像同时弹奏钢琴的两个琴键一样),那么简单的添加是正确的方法;为避免失真,请确保原始幅度足够小,不会超过输出的动态范围。相反,如果您希望峰值不超过原始幅度,请取平均值。如果您想将输出的感知强度保持为输入之一,请除以声音数量的平方根(尽管实际上它更复杂)。
标签: c++ math audiounit trigonometry