首页 文章

停止PCM示例会导致单击

提问于
浏览
1

我正在从一组样本生成一个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在大胆中的样子,在正弦波被切断的位置放大:

enter image description here

最后尖锐的尖峰似乎是我听到的咔哒声的原因 . 为什么这会导致咔嗒声而不是瞬间停止声音?如何在没有咔嗒声的情况下停止声音?我需要在准确的时间停止复制样本,所以我不确定我是否可以淡化它们 .

即使使用更复杂的波形(例如停止语音剪辑),也会出现此问题 .

这里's the recorded sound file if anyone'感兴趣的是:http://clyp.it/yc2mpqni

2 回答

  • 0

    在过零点处停止样品 . 这将消除飙升 .

  • 2

    PCM波形中的任何突然尖峰实际上都是咔嗒声 .

    如果您事先知道要复制的样本数量,您可以提前开始淡出它们 - 超过0.05秒的线性截止斜率是一个很好的起点 .

相关问题