为什么我的echo程序产生的声音的开头和结尾会有咔哒声?

为什么我的echo程序产生的声音的开头和结尾会有咔哒声?,c,audio,wav,C,Audio,Wav,我有一个程序,可以从声音文件、振幅和延迟(在样本中)创建回声,并将其写入文件。问题是,在回声的开始和结束处,有一种咔嗒声。我不知道怎么修理它 程序将原始声波数据与延迟声波数据相加。这是在假设通道数始终为2的情况下完成的。左右声道始终存在。我测试程序的声音文件有两个通道。声音文件始终是WAV文件 该程序应按如下方式启动: ./render_echo{input file name}{output file name}{samples中的延迟}{amplificate} 例如: ./render_e

我有一个程序,可以从声音文件、振幅和延迟(在样本中)创建回声,并将其写入文件。问题是,在回声的开始和结束处,有一种咔嗒声。我不知道怎么修理它

程序将原始声波数据与延迟声波数据相加。这是在假设通道数始终为2的情况下完成的。左右声道始终存在。我测试程序的声音文件有两个通道。声音文件始终是WAV文件

该程序应按如下方式启动: ./render_echo{input file name}{output file name}{samples中的延迟}{amplificate}

例如: ./render_echo sound 1.wav sound 2.wav 22050 0.4 对于具有半秒延迟的回波,假设采样率为44100

回声程序:

int check\u参数(char*inputFile、char*outputFile、int延迟、浮点振幅){
if(inputFile==NULL){
printf(“错误:输入文件名不正确\n”);
返回1;
}
if(outputFile==NULL){
printf(“错误:输出文件名不正确\n”);
返回1;
}
如果(延迟<0){
printf(“错误:延迟不能为负\n”);
返回1;
}
中频(振幅1.0){
printf(“错误:振幅必须介于0和1之间,互斥。\n”);
返回1;
}
返回0;
}
int main(int argc,字符**argv){
//检查参数的数量是否等于5
如果(argc!=5){
printf(“错误:参数数量错误”);
返回1;
}
//确保参数是正确的
char*inputFileName=argv[1];
char*outputFileName=argv[2];
浮动幅度=atof(argv[4]);
如果(检查参数(inputFileName,outputFileName,atof(argv[3]),振幅)==1){
返回1;
}
//延迟用样本数表示
无符号单延迟=atof(argv[3]);
无符号延迟=单延迟*2;
//printf(“amp%f\n”,振幅);
FILE*inputFile=fopen(inputFileName,“rb”);
if(inputFile==NULL){
printf(“错误:无法读取文件\n”);
返回1;
}
//读波头
无符号数字采样输入单通道;
读取波形头(输入文件和num样本输入单通道);
无符号num\u samples\u input=2*num\u samples\u input\u单通道;
//printf(“Mono%u Dual%u\n”,num\u samples\u input\u monochannel,num\u samples\u input);
//读取波形数据
int16输入波形[采样数输入];
读取(输入文件、输入波形、样本数输入);
//新输出文件信息
无符号num\u samples\u output\u monochannel=num\u samples\u input\u monochannel+单延迟;
无符号num_samples_output=num_samples_output_monochannel*2;
int16输出波形[采样数输出];
memset(输出波形,0,采样数输出);
//新浪潮
int16_t输入_波_双[2][num_samples_输出_monochannel];
memset(输入\波形\双[0],0,采样数\输出\单通道);
memset(输入\波形\双[1],0,采样数\输出\单通道);
//填充输入波形双

for(int i=0;i用于将字符串转换为整数(或者更好,类似于,因为它执行错误检查并允许您指定基数)。@yano argv[3]是采样中的延迟。它不能为负,因为延迟不能为负。振幅必须介于0和1之间。是的,我的错误是计算参数错误。当原始音频曲线的初始或最终高度不为零时,可能会生成一个pop…这意味着音频曲线在生成aud时会上下摆动,例如从+1到-1io这直接控制输出扬声器振膜的物理位置…当音频首次启动时,该振膜处于静止状态,相当于零标记…如果音频启动时的值不是零,则发送到扬声器的信号与扬声器移动部件的物理位置I ad之间存在不匹配在代码中添加一行代码,将第一个和最后一个采样的振幅设置为0,但单击仍然存在。用于将字符串转换为整数(或者更好,类似于,因为它执行错误检查并允许您指定基数)。@yano argv[3]是采样中的延迟。它不能为负,因为延迟不能为负。振幅必须介于0和1之间。是的,我的错误是计算参数错误。当原始音频曲线的初始或最终高度不为零时,可能会生成一个pop…这意味着音频曲线在生成aud时会上下摆动,例如从+1到-1io这直接控制输出扬声器振膜的物理位置…当音频首次启动时,该振膜处于静止状态,相当于零标记…如果音频启动时的值不是零,则发送到扬声器的信号与扬声器移动部件的物理位置I ad之间存在不匹配在代码上添加一行,将第一个和最后一个采样的振幅设置为0,但单击仍然存在。