我想以忠实于声音的方式(最好是近实时)(意味很少或根本没有预见)以数字方式混合两个或多个PCM音频通道(例如,记录的样本)。
物理上“正确”的方法是对样本求和。但是,当您添加两个任意样本时,结果值可能高达最大值的两倍。
例如,如果您的样本是16位值,则结果最多为65536 * 2。这导致剪裁。
幼稚的解决方案是除以N,其中N是要混合的声道数。然而,这导致每个样本的响度仅为1 / Nth,这是完全不现实的。在现实世界中,当两个乐器同时演奏时,每个乐器的音量不会变成一半。
从阅读的角度来看,一种常见的混合方法是:结果= A + B-AB,其中A和B是要混合的两个归一化样本,而AB是确保更大声的声音越来越“柔和”的术语。
但是,这会导致信号失真。这种失真水平在高质量音频合成中可以接受吗?
还有什么其他方法可以解决此问题?我对高效的低质量算法以及低效率的高质量算法感兴趣。
我是在数字音乐合成的背景下问我的问题,目的是将多个乐器音轨混合在一起。音轨可以是合成音频,预先录制的样本或实时麦克风输入。