我有一个 8khz 的单声道样本缓冲区,我试图通过修改其中的样本数量来控制它的播放速度。当减速时(例如 speedScale 值为 0.5),这些值会重复 - 样本缓冲区:[0.1, 0.2, 0.3..] 变为 [0.1, 0.1, 0.2, 0.2, 0.3, 0.3 ..]。当我这样做时,虽然速度已经正确减慢,但我注意到发生了混叠。我的印象是重复这样的样本不需要低通滤波来避免混叠。难道我做错了什么?
这是减速/加速的代码:
function process(buffer, speedScale) {
size = ceil(buffer.size / speedScale);
counter = 0.0;
ratio = 1 * speedScale;
processed = [];
for (i = 0; i < size; i++) {
index = floor(counter);
processed[i] = buffer.samples[index];
counter += ratio;
}
return processed;
}
