如何从iOS上的AudioQueue服务获取样本

时间:2012-12-21 14:35:32

标签: iphone ios audio core-audio audioqueue

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

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

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

感谢,

更新

AudioQueueProcessingTapNew

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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