おそらく単純なものが欠けていますが、これを機能させることができないようです。[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 ケースですか?
アンドリューに感謝します