如何在C ++中使用fft生成audio频谱?
我想生成一个mp3audio文件的audio频谱(如在这个video中所见)。 基本上这个问题需要计算audio信号的fft。 我如何在C / C ++中编程?
我已经看了几个开源库,如FFTW ,我真的不知道如何使用这些来解决我的问题。 任何帮助将不胜感激。 提前致谢!
因为答案中包含了大量有用的信息和build议,所以有很多类似/相关的问题值得一读,但实质上你需要这样做:
- 将audio数据转换为FFT所需的格式(例如int – > float,单独的L / R通道)
- 应用合适的窗口function (如Hann又名Hanning窗口 )
- 应用FFT(注意:如果使用典型的复数到复数的FFT,则将input数组的虚部设置为零)
- 计算第一个N / 2个FFT输出点的大小(
sqrt(re*re + im*im)
) - 可选地将幅度转换为dB(log)标度(
20 * log10(magnitude)
) - 绘制N / 2(对数)幅度值
请注意,虽然FFTW是一个非常好的和非常快的FFT,但对于初学者来说可能有些压倒性的 – 如果你想把它作为商业产品的一部分,它也是非常昂贵的 – 我build议从KissFFT开始。