Mixing PCM audio samples
我有一个关于混合多个 PCM 样本的简单问题。
我读到混合多个音频 PCM 样本的最佳方法是取每帧样本的平均值。
因此,如果我在除以 5 之前将 5 个 16 位样本相加,显然很有可能它的值大于 16 位短可以容纳的值。
那么,当将多个 16 位样本混合在一起时,我是否先将它们全部存储在 int 中,然后将它们相加并平均,然后再转换回 short?
如果您想混合音频样本,只需将它们添加在一起即可。建立一个平均值并不是正确的方法。
想一想:如果有人拉小提琴,第二把小提琴加入音乐,第一把小提琴的声音会变小吗?不,它不会。第二把小提琴只是增加了信号。
添加 PCM 样本时,您必须处理整数溢出。一种方法是使用全局"主音量",将其应用于混合 PCM 样本。使用这样的全局乘法器可以帮助您确保最终信号大部分在输出数据的 16 位内。
您可能还需要每个通道的音量控制。
最终溢出仍然会到处发生,处理它们的最佳方法是将输出值限制为 16 位输出流的最大和最小可表示值。耳朵会容忍这种情况,只要不经常发生,它就会被忽视。
如果您谈论混合,我建议您使用浮点数。
无论如何,如果你想使用短裤,你可以使用 32 或 64 位整数,或者你简单地先将样本相除,然后再相加。这是可能的,因为这个
等于这个