基于傅立叶变换创建iPhone音乐Visualiser

时间:2010-12-22 02:32:33

标签: iphone objective-c cocoa-touch xcode fft

我正在为iPhone设计音乐可视化应用程序。

我想通过iPhone的麦克风获取数据,在其上运行傅立叶变换然后创建可视化来实现这一目标。

我能够得到的最好的例子是aurioTuch,它可以根据FFT数据生成完美的图形。但是我一直在努力在我自己的项目中理解/复制aurioTouch。

我无法理解aurioTouch在进行FFT之前从麦克风中获取数据的确切位置?

在我的项目中还有其他代码可以用来做这个吗?还是其他任何提示?

1 个答案:

答案 0 :(得分:3)

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

我将追溯阅读代码的步骤:

  1. SpectrumAnalysis.cpp开始(因为很明显音频必须以某种方式进入此类),您可以看到类方法SpectrumAnalysisProcess具有第二个输入参数const int32_t* inTimeSig - - 听起来很有希望,因为我们正在寻找输入时间信号。
  2. 在此方法上使用右键单击菜单项Find in project,您可以看到除了明显的定义&声明,此方法仅在FFTBufferManager::ComputeFFT方法中使用,其中mAudioBuffer作为其第二个参数(步骤1中的inTimeSig)。寻找这个类数据成员提供了超过2或3个结果,但大多数只是定义/内存分配等。有趣的搜索结果是mAudioBuffer用作memcopy的参数,里面方法FFTBufferManager::GrabAudioData
  3. 再次使用搜索选项,我们看到FFTBufferManager::GrabAudioData仅在名为PerformThru的方法中被调用一次。此方法有一个名为ioData(听起来很有希望)的输入参数,类型为AudioBufferList
  4. 正在寻找PerformThru,我们看到它在以下行中使用:inputProc.inputProc = PerformThru; - 我们几乎就在那里::它看起来像是在注册一个回调函数。正在寻找inputProc的类型,我们确实看到它是AURenderCallbackStruct - 就是这样。回调由音频框架调用,音频框架负责向其提供样本。
  5. 您可能需要阅读AURenderCallbackStruct的文档(或更好的Audio Unit Hosting)以获得更深入的了解,但我希望这给您一个很好的起点。