作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为 iPhone 设计一个音乐可视化应用程序。
我正在考虑通过 iPhone 的麦克风拾取数据,对其运行傅立叶变换,然后创建可视化效果。
我能得到的最好的例子是 aurioTuch它根据 FFT 数据生成完美的图形。但是,我一直在努力在自己的项目中理解/复制 aurioTouch。
我无法理解 aurioTouch 在执行 FFT 之前从麦克风中获取数据的确切位置?
在我的项目中还有其他代码示例可以用来执行此操作吗?或者有什么其他技巧吗?
最佳答案
由于我打算自己使用麦克风输入,所以我认为您的问题是熟悉相关示例代码的好机会。
我会追溯阅读代码的步骤:
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)以获得更深入的理解,但我希望这能给你一个好的起点。
关于iphone - 基于傅里叶变换创建 iPhone 音乐可视化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4505694/
我是一名优秀的程序员,十分优秀!