这个发病检测程序中有几行代码使用了难以合并到 iOS中的FFTW3 库。我想使用Accelerate 框架替换它。
在onsetdshelpers.h中有一个成员变量:
fftwf_plan fftplan;
然后在onsetdshelpers.c中有几个 malloc 方法:
odsbuf->windoweddata = (float*) fftwf_malloc(framesizebytes);
odsbuf->fftbuf = (float*) fftwf_malloc(framesizebytes);
实例化的方法fftplan
odsbuf->fftplan = fftwf_plan_r2r_1d(ods->fftsize, odsbuf->windoweddata, odsbuf->fftbuf, FFTW_R2HC, FFTW_ESTIMATE);
释放内存的方法:
void onsetsds_destroy_audiodata(OnsetsDSAudioBuf *odsbuf){
// take down the FFTW stuff
fftwf_destroy_plan(odsbuf->fftplan);
// free mem
free(odsbuf->data);
free(odsbuf->window);
fftwf_free(odsbuf->windoweddata);
fftwf_free(odsbuf->fftbuf);
}
最后是实际执行 FFT 的方法:
fftwf_execute(odsbuf->fftplan);
我对 C 和 FFT 的了解非常有限。任何让我朝着正确方向前进的指示都非常感谢。