次の 2D 配列があります。
float accumulator[MAX_CHANNELS][2*MAX_FRAME_LENGTH];
そして、次のように、すべてのチャネルのコードでメモリのブロックを移動し続けます。
for (int channel = 0; channel < nChannels; channel++) {
memmove(accumulator[channel], accumulator[channel] + stepSize, fftFrameSize * 2 * sizeof(float));
}
ただし、これにより間違った結果が得られ、その理由がわかりません。memmove
使用している通話の何が問題になっていますか?
または、代わりに次の 1D 配列 (チャネルごとに 1 つ) を使用してみましたが、正しい結果が得られました。
float accumulator1[2*MAX_FRAME_LENGTH];
float accumulator2[2*MAX_FRAME_LENGTH];
memmove(accumulator1, accumulator1 + stepSize, fftFrameSize * 2 * sizeof(float));
memmove(accumulator2, accumulator2 + stepSize, fftFrameSize * 2 * sizeof(float));