我正在开发嵌入式 DSP 音频处理器并尝试实现合唱效果。据我了解,合唱效果是原始信号的多个延迟版本,其中延迟本身是随机的。在我的程序中,我将延迟设置为在初始化时随机定义,然后在程序执行期间保持静态。
我面临的挑战是,在使用循环缓冲区存储我过去的信号时,我不能简单地将延迟的信号包裹回循环缓冲区,因为存在多个延迟。
通过一个延迟,我可以简单地检查所需的延迟是否超过了循环缓冲区中的当前位置,如果是,我可以跳到循环缓冲区的末尾减去延迟并添加我在循环缓冲区中的当前位置。
if (Delay > Current_Position_in_Buffer)
{
Circular_Array[Length_of_Array + Current_Position_in_Buffer - Delay];
}
else
{
Circular_Array[Current_Position_in_Buffer - Delay];
}
有没有一种有效的方法来检查和调整每个延迟信号在我的循环数组中的位置,而无需使用 if 语句单独检查每个延迟?