【发布时间】:2013-12-17 14:24:48
【问题描述】:
我正在编写一个可视化音乐的应用程序。到目前为止,我已经将 ipod 库中的音频文件转换为 PCM 并放置在 APPs 目录中。现在我正在尝试对该 PCM 文件执行 FFT,以便随着时间的推移为我提供频率和分贝。这是我发现的使用 Apple Accelerate 框架执行 FFT 的代码:
int bufferFrames = 1024;
int bufferlog2 = round(log2(bufferFrames));
FFTSetup fftSetup = vDSP_create_fftsetup(bufferlog2, kFFTRadix2);
float outReal[bufferFrames / 2];
float outImaginary[bufferFrames / 2];
COMPLEX_SPLIT out = { .realp = outReal, .imagp = outImaginary };
vDSP_ctoz((COMPLEX *)data, 2, &out, 1, bufferFrames / 2);
vDSP_fft_zrip(fftSetup, &out, 1, bufferlog2, FFT_FORWARD);
现在我不明白如何输入 PCM 文件。我相信“数据”是一组复杂的对象,其中包含将应用 FFT 的音频部分。如何从 PCM 文件构建这样的数据结构?
我发现了一些可能有用的 Java 代码,但不确定如何将其转换为 C。还有 audioData 以及如何从 PCM 文件中填充它:
Complex[] complexData = new Complex[audioData.length];
for (int i = 0; i < complexData.length; i++) {
complextData[i] = new Complex(audioData[i], 0);
}
【问题讨论】:
标签: ios objective-c fft audio-processing