0

我正在尝试从 AudioQueue 获取样本以在 iPhone 上显示音乐频谱(如在 iTunes 中)。

我已经阅读了很多帖子,但几乎所有的帖子都询问在录制时获取样本,而不是播放:(

我正在使用 AudioQueue 服务来传输音频。请帮助理解以下几点:1/我在哪里可以访问样本(PCM,非 mp3(我正在使用 mp3 流)2/我应该在自己的缓冲区中收集样本以应用 fft 吗?3/是否有可能获得频率没有 fft 转换? 4/如何将缓冲区中的 fft shift 与当前播放的样本同步?

谢谢,

更新:

AudioQueueProcessingTapNew

对于 iOS6+,这对我来说很好。但是 iOS5 呢?

4

1 回答 1

1

对于播放音频,我们的想法是在将样本提供给音频队列回调之前获取样本。您可能需要事先将任何压缩音频文件格式转换为原始 PCM 样本。这可以使用 AVFoundation 转换器或文件阅读器服务之一来完成。

然后,您可以从用于馈送音频队列回调缓冲区的同一源复制数据帧,并应用您的 FFT 或其他 DSP 对其进行可视化。

您可以使用 FFT 或一组带通滤波器来获取频率信息,但 FFT 在这方面非常有效。

同步需要通过反复试验来完成,因为 Apple 没有指定确切的音频和视图图形显示延迟,这在 iOS 设备和操作系统版本之间可能会有所不同。但是较短的音频队列缓冲区或使用 RemoteIO 音频单元可以让您更好地控制音频延迟,而 OpenGL ES 可以让您更好地控制图形延迟。

于 2012-12-22T03:58:28.843 回答