音频延迟 - 包装变量?

时间:2012-10-18 23:08:33

标签: audio delay

我可能遗漏了一些简单的东西 - 但我似乎无法让它发挥作用。我有一个简单的音频延迟 - 固定数组大小[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是一个特殊的整数?

先谢谢 安德鲁

1 个答案:

答案 0 :(得分:0)

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

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

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

how to add echo effect on audio file using objective-c

相关问题