我从一组样本中生成一个wav文件。我注意到如果我开始然后停止复制波形,它会产生一个"点击"声音。这是一个简单的例子,我定期复制一个正弦波,然后没有声音(16位有符号立体声pcm,44100赫兹):
int c, counter = 0;
short *wavdat = malloc(numberOfSamples * 2);
for(c = 0; c < numberOfSamples * 2; c += 2){
counter++;
if(counter % 10000 < 5000){
wavdat[c] = sinf(counter * .1f) * 16000;
wavdat[c+1] = wavdat[c];
}else{
wavdat[c] = wavdat[c+1] = 0;
}
}
这里是wav在大胆中的样子,在正弦波被切断的位置放大:
最后尖锐的尖峰似乎是我听到的咔哒声的原因。为什么这会导致咔嗒声而不是瞬间停止声音?如何在没有咔嗒声的情况下停止声音?我需要在准确的时间停止复制样本,所以我不确定是否可以淡化它们。
即使波形更复杂(例如停止语音剪辑),也会出现此问题。
如果有人感兴趣,请点击录制的声音文件:http://clyp.it/yc2mpqni
答案 0 :(得分:2)
PCM波形中的任何突然尖峰实际上都是咔嗒声。
如果您事先知道要复制的样本数量,您可以提前开始淡出它们 - 超过0.05秒的线性截止斜率是一个很好的起点。
答案 1 :(得分:0)
在过零点停止样品。这将消除飙升。