如何消除两个音频文件混合时遇到的杂音
编号:QA001220
建立日期: 1999年6月22日 最后修改日期:1999年6月22日
所属类别:
martin:
visual c++
windows 98
在VC编程中将两个音频文件(WAV文件)混合时遇到有杂音,如何消除?我是把两个音频文件的数据相加除2。
回答:
如果是对8位的wav文件混合,要注意8位音频波形值的范围是0~255,混合的方式是把两个值相加再减128,再判断结果小于0则变0,大于255则变255,源代码如下:
register int x;
register WAVDATA *lpd,*lpData;
for(register DWORD i=0;i {
x=(((*(lpd+i))+(*(lpData+i))))-128;
if(x<0)x=0;
if(x>255)x=255;
*(lpd+i)=(BYTE)(x);
}//把lpd与lpData中数据相加,结果放入lpd中。
如果是16位的文件混合,波形值范围是-32765 ~ 32765,混合的方式为两值相加。再掐头去尾。如果不同格式的文件混合,要先转成相同格式。相加除2的方式会使声音音量小一半,还会有杂音,尽量不要采用。 附我自己的源代码
wavemix.zip,实现两个22khz,8位wave波形相加。请自己在运行目录中放入两个文件:1.wav、2.wav,最好两分钟以上,格式要相同。建议你改用DirectSound编程,所有操作都由机器自动完成。不须繁重的计算了。
此问题由killer回答。
| |
|
|
| |
|
|