我正在为iPhone设计音乐可视化应用程序。
我想通过iPhone的麦克风获取数据,在其上运行傅立叶变换然后创建可视化来实现这一目标。
我能够得到的最好的例子是aurioTuch,它可以根据FFT数据生成完美的图形。但是我一直在努力在我自己的项目中理解/复制aurioTouch。
我无法理解aurioTouch在进行FFT之前从麦克风中获取数据的确切位置?
在我的项目中还有其他代码可以用来做这个吗?还是其他任何提示?
答案 0 :(得分:3)
由于我计划使用麦克风输入,我认为您的问题是熟悉相关示例代码的好机会。
我将追溯阅读代码的步骤:
SpectrumAnalysis.cpp
开始(因为很明显音频必须以某种方式进入此类),您可以看到类方法SpectrumAnalysisProcess
具有第二个输入参数const int32_t* inTimeSig
- - 听起来很有希望,因为我们正在寻找输入时间信号。Find in project
,您可以看到除了明显的定义&声明,此方法仅在FFTBufferManager::ComputeFFT
方法中使用,其中mAudioBuffer
作为其第二个参数(步骤1中的inTimeSig
)。寻找这个类数据成员提供了超过2或3个结果,但大多数只是定义/内存分配等。有趣的搜索结果是mAudioBuffer
用作memcopy
的参数,里面方法FFTBufferManager::GrabAudioData
。FFTBufferManager::GrabAudioData
仅在名为PerformThru
的方法中被调用一次。此方法有一个名为ioData
(听起来很有希望)的输入参数,类型为AudioBufferList
。PerformThru
,我们看到它在以下行中使用:inputProc.inputProc = PerformThru;
- 我们几乎就在那里::它看起来像是在注册一个回调函数。正在寻找inputProc
的类型,我们确实看到它是AURenderCallbackStruct
- 就是这样。回调由音频框架调用,音频框架负责向其提供样本。您可能需要阅读AURenderCallbackStruct
的文档(或更好的Audio Unit Hosting)以获得更深入的了解,但我希望这给您一个很好的起点。