每个样本16bit
该怎么对两路语音进行混音呢?
我的算法很简单,就是让两路先分别除以二,再相加
比如,设两路数据存在ByteBuffer对象byteBuffer1、byteBuffer2里(capacity都为960),则
byteBuffer1.flip();
byteBuffer2.flip();
short[] sArray1 = new short[480];
short[] sArray2 = new short[480];
byte[] bArray = new byte[960];
byteBuffer1.asShortBuffer().get(sArray1);
byteBuffer2.asShortBuffer().get(sArray2);
for(int i = 0;i < 480; i++){
int sumi = sArray1[i]/2 + sArray2[i]/2;
short num = (short)sumi;
bArray[i * 2] = (byte) (num >>> 8);
bArray[i * 2 + 1] = (byte)num;
}
但是这样得到的混音后音频完全是噪音,使用Audition打开发现振幅都很大,推测为产生了溢出
第一路音频波形:
第二路音频波形:
混音后的音频波形:
以上音频文件全部以little-edian方式打开,第一、二路音频播放没有问题
请问问题出在哪?该怎么修改呢?
short型数据直接相加,再判断是否溢出,就是>32767 就等于32767 或 <-32768就等于-32768.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。