我可能遗漏了一些简单的东西 - 但我似乎无法让它发挥作用。我有一个简单的音频延迟 - 固定数组大小[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是一个特殊的整数?
先谢谢 安德鲁
答案 0 :(得分:0)
您的代码有点难以理解 - 例如,我不清楚为什么您需要将浮点数更改为整数,变量的初始值(如len)或循环发生的位置。我甚至不确定它是什么语言(python?),也许那些知道语言的人很明显,在这种情况下,我为我的无知道歉。
但是,我可以推测它适用于65536的事实可能与65536是2的幂有关,并且不知何故该属性可以解决你所拥有的任何其他错误。我不会尝试修复你的代码,因为正如我所说,我无法遵循它 - 再次,抱歉。相反,请参阅我的答案,告诉您如何编写延迟和回声。它是类似于c的伪代码,应该很容易移植,而且代码行很少: