如何平滑回声持续时间变化以消除音频点击?

信息处理 声音的
2022-02-18 23:44:31

我使用下图实现了回声效果: 在此处输入图像描述

在此处输入图像描述

总而言之,回声效应基本上是一种正反馈效应,它通过延迟线 zD 实现,该延迟线将输入信号延迟 D 个样本。我的效果很好。我得到了回声效果。

我的问题是我让用户在运行时调整 D 样本量,就像在 Pioneer 设备中一样,您可以将回声设置为 4beats、2beats、1beats 等。当用户请求更改节拍持续时间时,我会立即更改音频插件中的 D 参数。问题是有时这会由于突然的音频电平变化而导致点击。我试图找到一种方法来解决这个问题,但到目前为止,我无论如何都想不出来。当用户更改参数 D 时,如何确保音频电平是连续的(不会出现尖峰并导致音频点击)?

2个回答

也许,当D更改,您可以从旧的音频交叉淡入淡出D在新的音频D.

如果您在延迟旁边运行音高检测器(并将检测到的周期长度存储在相应的数组中),您可以一次交叉淡入一个周期,直到您到达新的周期内D. 然后非常缓慢地滑动到确切位置D.

一种方法是使用一个简单的单极平滑滤波器。单极低通滤波器通常用于平滑噪声信号以寻找其中缓慢移动的趋势。一极滤波器定义为

y(n)=x(n)+a1y(n1)H(z)=Y(z)X(z)=11a1z1
极点位于z=a1. 在此类需要平滑插值参数的应用中,极点通常位于 DC 附近,您可以使用a10.99. 这意味着您的滤波器的输出在 0Hz 附近以 -20dB/decade 的速率开始滚动。

在此处输入图像描述

您正在将此过滤器应用于您的参数值,D,由用户更改。此过滤器可确保您的参数值平滑变化(过滤掉快速变化),并且不会在音频中引起任何咔嗒声。您的插件中必须有一个函数来处理该更新。x(n)是滑块的输入值,y(n)将是您将发送到音频回调函数中的回声效果的平滑和过滤值。在更新方法中,您需要存储输出的最后一个元素的值,y(n1), 计算当前值y(n).