我從一個採樣數組中生成一個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