作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从 AudioQueue 获取样本以在 iPhone 上显示音乐谱(如 iTunes 中的音乐)。
我读了很多帖子,但几乎所有帖子都询问有关在录制而不是播放时获取样本:(
我正在使用 AudioQueue 服务来传输音频。请帮助理解以下几点:1/我在哪里可以访问样本(PCM,非 mp3(我正在使用 mp3 流)2/我应该在自己的缓冲区中收集样本来应用 fft 吗?3/是否可以在不进行fft变换的情况下获得频率?4/如何将缓冲区中的 fft 移位与当前播放的样本同步?
谢谢
更新:
AudioQueueProcessingTapNew
对于 iOS6+,这对我来说效果很好。但 iOS5 呢?
最佳答案
对于播放音频,其想法是在将样本提供给音频队列回调之前获取样本。您可能需要事先将任何压缩音频文件格式转换为原始 PCM 样本。这可以使用 AVFoundation 转换器或文件读取器服务之一来完成。
然后,您可以从用于馈送音频队列回调缓冲区的同一源复制数据帧,并应用 FFT 或其他 DSP 对其进行可视化。
您可以使用 FFT 或一组带通滤波器来获取频率信息,但 FFT 在这方面非常有效。
同步需要通过反复试验来完成,因为 Apple 没有指定确切的音频和 View 图形显示延迟,而 iOS 设备和操作系统版本之间的延迟可能会有所不同。但是短音频队列缓冲区或使用 RemoteIO 音频单元可能会让您更好地控制音频延迟,而 OpenGL ES 将使您更好地控制图形延迟。
关于iphone - 如何从 iOS 上的 AudioQueue 服务获取样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992023/
我是一名优秀的程序员,十分优秀!