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