我正在为iphone设计一个音乐可视化应用程序。
我想通过iPhone的MIC来获取数据,在它上运行傅立叶变换,然后创建可视化。
我能得到的最好的例子是aurioTuch它基于fft数据生成一个完美的图。然而,在我自己的项目中,我一直在努力理解/复制Auriotouch。
我无法理解Auriotouch在进行FFT之前从麦克风中提取数据的具体位置?
另外,在我的项目中,有没有其他的代码示例可以用来实现这一点?或者其他的建议?

最佳答案

由于我正计划使用MIC的输入,我认为你的问题是一个很好的机会来熟悉相关的样本代码。
我将追溯阅读代码的步骤:
SpectrumAnalysis.cpp中开始(由于音频必须以某种方式到达这个类),您可以看到类方法SpectrumAnalysisProcess具有第二个输入参数const int32_t* inTimeSig ---听起来是一个有前途的起点,因为输入的时间信号是我们正在寻找的。
在这个方法上使用右键菜单项,您可以看到,除了明显的定义和声明外,该方法仅在中使用,在该方法中,它作为其第二个参数(第1步中的cc)。寻找这个类数据成员会给出更多的2个或3个结果,但是大多数都是定义/内存分配等。有趣的搜索结果是,Find in project被用作参数到FFTBufferManager::ComputeFFT,在方法mAudioBuffer中。
再次使用search选项,我们看到inTimeSig在一个名为mAudioBuffer的方法中只调用一次。此方法有一个名为memcopy的输入参数(听起来很有前途),类型为FFTBufferManager::GrabAudioData
我们在下面的一行中看到了它,它是:在注册回调函数时。在寻找FFTBufferManager::GrabAudioData的类型时,我们确实看到它是PerformThru-就是它。回调是由音频框架调用的,它负责用示例来填充它。
您可能需要阅读ioData的文档(或者更好,Audio Unit Hosting)以获得更深的理解,但我希望这给了您一个好的起点。

09-03 18:47