我正在播放程序中的音频文件,并且在音频渲染回调中,我将增益乘数应用于输入信号并将其添加到输出缓冲区。这是一些伪代码来说明我的操作:
void audioCallback(AudioOutputBuffer* ao, AudioInput* ai, int startSample, int numSamples){
for (int i=startSample; i<numSamples+startSample; i++){
ao[i] = ai[i]*gain;
}
}
基本上我只是将数据乘以某个乘数。在这种情况下,gain
是通过 GUI 回调调整的浮动成员。如果我在音频仍在播放时调整此值,我可以听到当我移动滑块时音频变得更柔和或更响亮,但我听到很多小的爆裂声和咔嗒声。
不太确定这笔交易是什么。我知道插值,如果音频发生了音高偏移,我会这样做,但我不确定是否需要做任何额外的插值,或者如果在音频文件完成播放之前实时调整增益,我会这样做。
如果我在音频开始播放之前调整滑块,增益设置正确并且我没有点击。
我在这里错过了什么吗?除了输入信号的乘法器之外,增益还如何实现?