Я создаю wav-файл из массива образцов. Я заметил, что если я начну, а затем остановлю копирование сигнала, он издаст звук «щелчка». Вот простой пример, когда я периодически копирую синусоиду, за которой не следует звук (16-битный стереофонический импульсно-кодовый сигнал со знаком при частоте 44 100 Гц):
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