我最近接了一个项目,我需要对传入的麦克风数据执行实时滑动 FFT 分析。我选择在其中执行此操作的环境是 OpenGL 和 Cinder,并使用 C++。
这是我在音频编程方面的第一次体验,我有点困惑。
这是我试图在我的 OpenGL 应用程序中实现的目标:
所以在每一帧中,都有一部分传入的数据。在 for 循环(因此多次通过)中,将消耗当前数据的一个窗口,并对它执行 FFT 分析。对于 for 循环的下一次迭代,窗口将通过数据等推进“hop-size”,直到到达数据的末尾。
现在这个过程必须是连续的。但是正如你在上图中看到的那样,一旦我当前的应用程序框架结束并且下一帧的数据进入时,我就无法从前一帧离开的位置拾取(因为数据已经消失了)。您可以在图中看到它,蓝色区域位于两帧之间。
现在您可能会说,选择窗口大小/跳跃大小的方式不会发生这种情况,但这是不可能的,因为这些参数应该让用户在我的项目中进行配置。
也非常欢迎针对这种面向 C++11 的处理提出建议!
谢谢!