我正在较短的音频剪辑(44100 * 14 个样本)和较长的音频剪辑(44100 * 60 * 6 个样本)之间执行互相关。据我了解,因此我无法打开 FFT。在测试kiss_fftr 和kiss_fftri 时,我发现逆运算返回的噪声很大(但在节奏上仍与输入相似)。我已经确认我的输入音频是正确的,并且损坏仅发生在此函数中:
static std::vector<std::vector<float>> do_fft(std::vector<std::vector<float>> song, std::vector<std::vector<float>> loop)
{
loop[0].resize(kiss_fftr_next_fast_size_real(loop[0].size())); // TODO: resize this to song size instead of loop size when done testing
loop[1].resize(loop[0].size()); // TODO: make this dynamic
std::vector<std::vector<kiss_fft_cpx>> fft_loop;
std::vector<std::vector<float>> output;
for (int chan = 0; chan < loop.size(); chan++)
{
fft_loop.push_back(std::vector<kiss_fft_cpx>());
fft_loop[chan].resize(loop[chan].size());
output.push_back(std::vector<float>());
output[chan].resize(loop[chan].size()); // TODO: resize this to song size instead of loop size when done testing
}
kiss_fftr_cfg cfg_loop = kiss_fftr_alloc(loop[0].size(), 0, NULL, NULL);
kiss_fftr(cfg_loop, &loop[0][0], &fft_loop[0][0]);
kiss_fft_free(cfg_loop);
kiss_fftr_cfg cfgi_loop = kiss_fftr_alloc(fft_loop[0].size(), 1, NULL, NULL);
kiss_fftri(cfgi_loop, &fft_loop[0][0], &output[0][0]);
kiss_fft_free(cfgi_loop);
return output;
}
与输入相比,输出如下所示:
放大以显示细节:
如果您想知道内存,该程序是 64 位的,只使用几 GB 的内存(只是几场演出,没什么大不了的:P)