我正在创建一个音频延迟单元。本质上,传入样本进入循环缓冲区,并从一些读取指针中挑选出来,该读取指针是写入指针后面的多个样本。对于每个新样本,这些指针都会递增 1。
此外,为了允许小数延迟,我实际上有两个读取指针,一个样本相隔,并根据浮点延迟参数使用双线性插值在它们之间混合。 (我可以使用 sinc 插值或其他东西,但还没有为此烦恼。)
当延迟设置为特定值时一切正常。但是,当用户在播放声音时改变延迟时,由于延迟抽头的变化,噼啪声也会很明显。据推测,它正在以不同的样本拾取信号,并在音频波形中引入随机阶跃不连续性。
我想知道是否有任何 DSP 音频爱好者知道如何解决这个问题,因为我知道我玩过延迟盒,但这种效果不会发生,但目前我想不出一个解决方案。
最佳答案
当您更改延迟时,总会有某种失真。这只是选择您想要的东西的问题。
正如您所发现的,如果您只是掉进一个随机点,从一个样本值到下一个样本值的急剧跳跃通常会引起可听见的爆裂声。一种选择是将音频静音一小段时间,然后重新启动。如果这仍然太突然,您可以在几毫秒内将值缩小到零,然后在几毫秒内将它们放大到新的缓冲区位置。 (有效地快速调低音量,然后在您到达新位置后调高音量。)
Propellerhead 的 Reason 实际上模拟了加快和减慢录音速度,就好像它是磁带延迟,而您正在移动头部。这非常复杂……您实际上是在动态地对缓冲音频重新采样,直到到达新的缓冲位置。
关于audio - 实现音频延迟效果单元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19340160/