我正在从一组样本生成一个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在大胆中的样子,在正弦波被切断的位置放大:
最后尖锐的尖峰似乎是我听到的咔哒声的原因 . 为什么这会导致咔嗒声而不是瞬间停止声音?如何在没有咔嗒声的情况下停止声音?我需要在准确的时间停止复制样本,所以我不确定我是否可以淡化它们 .
即使使用更复杂的波形(例如停止语音剪辑),也会出现此问题 .
这里's the recorded sound file if anyone'感兴趣的是:http://clyp.it/yc2mpqni
2 回答
在过零点处停止样品 . 这将消除飙升 .
PCM波形中的任何突然尖峰实际上都是咔嗒声 .
如果您事先知道要复制的样本数量,您可以提前开始淡出它们 - 超过0.05秒的线性截止斜率是一个很好的起点 .