我有两个波形文件,我提取了数字样本。我需要同时玩这两个。如何组合两个样本以生成两个声音一起播放的输出样本。如何对N个同步样本进行此操作?是否像添加样本一样简单并取平均值?
答案 0 :(得分:4)
组合声音(以相同的采样率)只涉及两个数组的元素添加。除非您有净空问题,否则您不需要除以N.如果总和的值超过最大输出水平,则会导致削波,从而产生可听见的失真。
除非你有一个大的N或一个小的N,你的每个源声音被归一化到最大输出水平,你应该没有剪裁问题。如果您事先知道信号的波形,则可以预先简单地将每个波形按相同的标量值进行缩放,以使输出不会被剪切。或者,如果您将声音渲染为离线,则可以对波形求和,然后对复合信号进行归一化,使其不会剪辑。
如果您正在处理N个源的实时输入流,则可以使用限制器最小化剪切。
http://en.wikipedia.org/wiki/Dynamic_range_compression#Limiting
答案 1 :(得分:1)
是的,您可以简单地将两者相加,然后除以2。 实际上,这是平均值。
当两个样本具有相同的采样率时,它实际上就像那样简单。
答案 2 :(得分:1)
通过将各个样本添加到一起来合并数字音频。
当组合几个不相关的声源but the relationship between loudness and N number of sources is not linear时,会有响度增加。四个同时发出的声音大约是一个声音的两倍,而不是声音的四倍。 (这是6dB的增长。)
正如您所怀疑的那样,在同时播放多个声音时需要记住最终输出音量,但在组合N个同时音源时除以N则不是正确的方法。
最简单的方法是为您的应用程序添加音量控件。当用户声音太大时,用户会关闭它。这很简单,并且在组合少量声音时通常是正确的方法。
手动音量控制不是解决所有问题的正确方法。例如第一人称射击游戏。想象一下,从一条安静的走廊跑到一场肆虐的枪战中。声音环境将从非常安静的几个声源变为非常响亮的声源。在这些情况下,您可能需要某种形式的automatic gain control。