我从一个采样数组中生成一个wav文件。我注意到如果我开始然后停止复制一个波形,它会产生一个“咔哒”声。这里有一个简单的例子,我在那里定期复制正弦波之后没有声音(16位有符号立体声PCM在44100赫兹):停止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看起来像厚颜无耻的东西,在一个点放大,其中正弦波被切断:
末的大幅攀升似乎是点击的声音,我听到的原因。为什么这会导致点击声音,而不是立即停止声音?如何在没有听到咔哒声的情况下阻止声音?我需要在确切的时间停止复制样本,所以我不确定我可以淡出它们。
即使有更复杂的波形(例如停止语音片段),这个问题也会发生在我身上。
这里是录制的声音文件,如果任何人的兴趣:http://clyp.it/yc2mpqni
有没有可能传递所有代码?我很好奇看到整个wave文件是如何构建的。 – plafratt 2014-09-29 22:02:25
我没有写自己写的wav编写代码,我从一个简单的C++函数中获取它:http://ltheory.com/blog/writeWav.txt – user3124047 2014-09-29 23:04:01
好的,谢谢你的链接。 – plafratt 2014-09-29 23:11:36