2019-12-11 18:19发布
zenith1032 发表于 2016-7-28 16:25 最后,发现这种方法混音出来效果最好。不失真,无噪音。好犀利,不明白算法。 //if ((sample1 < 0) && ( ...
zenith1032 发表于 2017-5-2 14:39 我要的效果就是混音,不同频率是什么意思??关于算法,我也不大懂。
最多设置5个标签!
实际在windows下用C++中试过,将两个wav合成一个wav。
方法1,有噪音,失真,效果不好。
方法2,噪音较少,效果可以,但不知道怎么调两个音频各自的声音大小。
方法3,方法4还没调通,出来全是噪音。
编辑原因排版。发现数组的【i】,是显示不出来的。
#if REMIX_METHORD == 1
//out=(ka*(DataA-128)+kb*(DataB-128))/(ka+kb)+128;
write_buf【i】 = (11 * (read_buf1【i】- 32768) + 5 * (read_buf2【i】 - 32768)) / 16 + 32768;
#endif
#if REMIX_METHORD == 2
//C = A + B - (A * B >> 0x10)
//if (C > 32767) C = 32767;
//else if (C < -32768) C = -32768;
temp = read_buf1【i】 + read_buf2【i】- (read_buf1【i】 * read_buf2【i】>> 16);
if (temp > 32767)
temp = 32767;
else if (temp < -32768)
temp = -32768;
write_buf = temp;
#endif
#if REMIX_METHORD == 3
//if( data1 < 0 && data2 < 0)
// date_mix = data1+data2 - (data1 * data2 / -(pow(2,16-1)-1));
//else
// date_mix = data1+data2 - (data1 * data2 / (pow(2,16-1)-1));
if (read_buf1【i】< 0 && read_buf2【i】< 0)
temp = read_buf1【i】+ read_buf2【i】 - (read_buf1【i】* read_buf2【i】 / -(pow(2, 16-1) -1));
else
temp = read_buf1【i】 + read_buf2【i】- (read_buf1【i】 * read_buf2【i】/ (pow(2, 16-1) -1));
#endif
#if REMIX_METHORD == 4
alsa_mix_16(read_buf1【i】, read_buf2【i】, &date_mix);
write_buf【i】= date_mix;
if(date_mix > pow(2,16-1) || date_mix < -pow(2,16-1))
cout << "mix error " << endl;
#endif
//if ((sample1 < 0) && (sample2 < 0)) {
// value = sample1 + sample2 - (sample1 * sample2 / -(pow(2,16-1)-1));
//}else{
// value = sample1 + sample2 - (sample1 * sample2 / (pow(2,16-1)-1));
//}
看起来您的方法只是混音的,请问频率不同的处理是如何做的?
就是sample rate,有些音频文件是48K有些是44.1K,语音还有8K的。
一周热门 更多>