我正在从样本数组中生成一个 wav 文件。我注意到如果我开始然后停止复制波形,它会产生“咔哒”声。这是一个简单的例子,我定期复制一个正弦波,然后没有声音(44100 赫兹的 16 位有符号立体声 pcm):
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 在 audacity 中的样子,在正弦波被截断的点放大:
末端的尖峰似乎是我听到咔嗒声的原因。为什么这会引起咔嗒声而不是立即停止声音?如何在没有咔嗒声的情况下停止声音?我需要在准确的时间停止复制样本,所以我不确定是否可以淡出它们。
即使使用更复杂的波形(例如停止语音剪辑),我也会遇到这个问题。
如果有人感兴趣,这里是录制的声音文件:http://clyp.it/yc2mpqni
最佳答案
PCM 波形中的任何突然尖峰实际上都是咔嗒声。
如果您事先知道要复制多少样本,则可以尽早开始淡出它们——超过 0.05 秒时间的线性截止斜率是一个很好的起点。
关于c - 停止 PCM 示例会导致点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26108786/