原因:由于涉及到pcm的音频混音,故创建一个Demo进行混音测试,主要使用方法为归一化(自适应混音加权),平均调整权重法,自动对齐算法,及有人说的newlc中的一段算法,以上算法有可能名称叫法不同。
平均调整权重法(平均法):不同的会话成员具有相同的权重,该方法虽然不会引入噪声,但是随着会话成员的增多,各路语音的衰减将愈加严重.
自适应混音加权:使用可变的衰减因子对语音进行衰减,该衰减因子代表了语音的权重,该衰减因子随着数据的变化而变化,当数据溢出时,则相应的使衰减因子变小,使后续的数据在衰减后处于临界值以内,没有溢出时,让衰减因子慢慢增大,使数据变化相对平滑。(随着会话成员增多也会出现溢出问题)
自动对齐算法:考虑参与混音的多路音视频信号自身特点,以它们自身的比例作为权重,从而决定它们在合成后的输出中所占比重。(测试发现高频信号损失严重)
箝位算法:时域叠加,进行溢出检测,然后进行饱和运算.(一般通用使用,但是容易溢出).
混音原理简单说一下:声音是由于物体的振动对周围的空气产生压力而传播的一种压力波,转成电信号后经过抽样,量化,仍然是连续平滑的波形信号,量化后的波形信号的频率与声音的频率对应,振幅与声音的音量对应,量化的语音信号的叠加等价于空气中声波的叠加,所以当采样率一致时,混音可以实现为将各对应信号的采样数据线性叠加。而问题的关键就是如何处理叠加后溢出问题。
测试验证如下:
首先使用FFmpeg生成pcm文件和FFpaly进行播放命令行如下: