我有一个关于混合多个 PCM 样本的简单问题。
我读到混合多个音频 PCM 样本的最佳方法是取每帧样本的平均值。
因此,如果我在除以 5 之前将 5 个 16 位样本加在一起,显然很有可能它的值会大于 16 位的 short 可以容纳的值。
因此,当将多个 16 位样本混合在一起时,我是否先将它们全部存储在 int 中,然后将它们相加并求平均值,然后再转换回 short?
最佳答案
如果您想混合音频样本,只需将它们添加在一起即可。建立平均数不是做到这一点的正确方法。
想一想:如果有人拉 fiddle ,第二把 fiddle 加入音乐,第一把 fiddle 的声音会变小吗?不。不会。第二把 fiddle 只是增加了信号。
添加 PCM 样本时,您必须处理整数溢出。一种方法是将全局“主音量”应用于混合 PCM 样本。使用这样的全局乘法器可以帮助您确保最终信号大部分位于输出数据的 16 位内。
您可能还需要每个 channel 的音量控制。
最终溢出仍然会在这里和那里发生,处理它们的最好方法是将输出值限制在 16 位输出流的最大和最小可表示值。耳朵会容忍这种情况,只要不经常发生,它就会被忽视。
关于audio - 混合 PCM 音频样本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21508372/