热情软件屋

 

如何消除两个音频文件混合时遇到的杂音


编号: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回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio