2010-12-22 36 views
5

我正在为iPhone设计音乐视觉器应用程序。基于傅立叶变换创建iPhone音乐视觉器

我正在考虑通过iPhone的麦克风拾取数据,对其进行傅里叶变换,然后创建可视化。

我已经能够得到的最好的例子是aurioTuch,它产生了一个基于FFT数据的完美图形。然而,我一直在努力在自己的项目中理解/复制aurioTouch。

我无法理解aurioTouch在执行FFT之前从麦克风拾取数据的位置?

也有任何其他的代码的例子,我可以用我的项目做到这一点?或者其他提示?

+0

不好意思问这个显而易见的问题,但是您是否尝试在调试模式下一步一步地执行程序?你遇到了什么确切的困难? – 2010-12-22 09:23:27

+0

是的,我遵循了程序代码。可能只是我在这里很厚,但我无法确定它从麦克风获取数据的确切位置。对此有何看法? – Dave 2010-12-22 13:07:06

回答

3

由于我计划自己使用麦克风的输入,我认为您的问题是熟悉相关示例代码的好机会。

我会追溯到通过读码的步骤:

  1. 出发在SpectrumAnalysis.cpp(因为它是明显的声音要得到这一类以某种方式),你可以看到类方法SpectrumAnalysisProcess有第二个输入参数const int32_t* inTimeSig ---听起来很有前途,因为我们正在寻找输入时间信号。
  2. 这种方法使用右键菜单项Find in project,你可以看到,除了显而易见的定义&声明,这种方法只用在FFTBufferManager::ComputeFFT方法,它得到mAudioBuffer作为它的第二个参数(inTimeSig步骤内1)。寻找这个类的数据成员给出了更多的2或3个结果,但其中大部分再次只是定义/内存分配等。有趣的搜索结果是mAudioBuffer被用作参数memcopy,在方法FFTBufferManager::GrabAudioData内。
  3. 再次使用搜索选项,我们看到FFTBufferManager::GrabAudioData仅在调用PerformThru的方法中被调用一次。此方法有一个输入参数,称为ioData(听起来很有希望),其类型为AudioBufferList
  4. 寻找PerformThru,我们看到它被用于以下行:inputProc.inputProc = PerformThru; - 我们几乎在那里::它看起来像注册一个回调函数。寻找inputProc的类型,我们确实看到它是AURenderCallbackStruct - 就是这样。该回调由音频框架调用,负责用样本提供。

你可能需要阅读文档AURenderCallbackStruct(或更好的Audio Unit Hosting),以获得更深入的了解,但我希望这给你一个很好的起点。