0

我可能遗漏了一些简单的东西——但我似乎无法让它发挥作用。我有一个简单的音频延迟 - 具有 [65536] 的固定数组大小 - 它完美地工作 - 问题是 - 如果我尝试使数组大小 - 更短或更长 - 它会爆炸!

这是工作代码:

    float b[65536]; // initialisation
    int p, r0, r1;
    float len, d, feedback; // d = decimal part of length
    int leni; // integer value of length

    if (len > 65534) len = 65534; 
    else if (len < 1) len = 1;
    leni = (int) len; // float to INT conversions are cpu intensive. 

    d = len - leni;
    r0 = p - leni; // loop
    r1 = r0 - 1;
    if (r0 < 0) r0 += 65536;
    if (r1 < 0) r1 += 65536;

 output = b[r0] + d * (b[r1] - b[r0]);
    b[p] = input + output * feedback;
    p++;
    if (p > 65535) p = 0;

现在这里是非工作代码:

    float b[16384]; // initialisation
    int p, r0, r1;
    float len, d, feedback; // d = decimal part of length
    int leni; // integer value of length

    if (len > 16382) len = 16382;
    else if (len < 1) len = 1;
    leni = (int) len; // float to INT conversions are cpu intensive. 

    d = len - leni;
    r0 = p - leni; // loop
    r1 = r0 - 1;
    if (r0 < 0) r0 += 16384;
    if (r1 < 0) r1 += 16384;

 output = b[r0] + d * (b[r1] - b[r0]);
    b[p] = input + output * feedback;
    p++;
    if (p > 16383) p = 0;

不知道该怎么做,我是不是把它包装错了——还是 65536 是一个特殊的 int 案例?

提前感谢安德鲁

4

1 回答 1

0

您的代码有点难以理解——例如,我不清楚为什么您需要将浮点数更改为整数,变量的初始值(如 len)是什么或循环发生的位置。我什至不确定它是什么语言(python?),也许这些事情对于了解该语言的人来说是显而易见的,在这种情况下,我为我的无知道歉。

但是,我可以推测它适用于 65536 的事实可能与 65536 是 2 的幂有关,并且不知何故,该属性可以解决您拥有的任何其他错误。

我不会尝试修复您的代码,因为正如我所说,我无法遵循它 - 再次抱歉。相反,请参阅我的答案here,它告诉您如何编写延迟和回声。它是类似 c 的伪代码,应该很容易移植,而且代码行数很少:

如何使用objective-c在音频文件上添加回声效果

于 2012-10-19T15:40:42.877 回答