iphone - iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz

标签 iphone ios-simulator core-audio audio-recording

有人使用模拟器在 AudioUnit 级别处理 8kHz 音频吗?

iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz。否则它会奇怪地失败。

我在 iPhone 模拟器中录制音频时遇到问题。该代码在硬件设备上运行良好,但在模拟器中奇怪地失败。

我正在处理 AudioUnit 级别,并将采样率(通过 Audio Session 属性)设置为 8000Hz。在硬件上工作正常,但在模拟器上,渲染回调要求一个适当大小的数据 block ,然后每 11.6 毫秒回调一次,要求一个字节。

我尝试将采样率设置为 44100/4 (11025Hz),效果很好。所以我尝试将 Audio Session 采样率设置为 11024,但它失败了。与 11026 相同。11025 有效。

我的猜测是模拟器的音频代码中有一个错误。我认为它内部必须有一个四分之一秒长的缓冲区,并且它无法处理采样率不是其倍数的情况。

任何人都可以在模拟器中用自己的代码尝试这个吗?尝试 11024、11025 和 11026 的采样率,看看是否只有 11025 有效?

更新:如果我要求 11024,它会给我 8000,但渲染回调会继续传递 ioData,只要求单个帧(1 字节)。当我要求 8000Hz 时,行为相同。

更新2:当我在 AudioQueue API 级别编程时,模拟器也可以正常工作。它在那里处理 8kHz。它似乎只是在 AudioUnit API 级别搞砸了。

最佳答案

据我所知,当您要求模拟器的远程 I/O 单元在 8kHz 模式下工作时,模拟器会进入功能障碍模式。或 44100/4 倍数以外的任何模式。

再说一次,这并不是说它拒绝我的格式或建议更好的格式。问题是它假装同意,然后进入一种奇怪的模式,一次请求一两个字节,可能是因为一些栅栏错误。

如果我将单元子类型设置为 VoiceProcessingIO,8kHz 工作正常,但麦克风一侧每隔几次读取就会变得有点麻烦。

所以问题是模拟器的远程 I/O 单元声称支持 8kHz,但只有将其配置为 VoiceProcessing 子类型时它才有效。

关于iphone - iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5543767/

相关文章:

iphone - 捕获导航 Controller 中的后退单击

iphone - 我可以覆盖 UIControlEventTouchUpInside 的 UISegmentedControl 吗?

iphone - 我想以编程方式从照片库中删除图像?

iPhone图形在模拟器上工作而不是在设备上

ios - AudioKit:如何点击同一输入进行多次使用(AudioKitUI + 语音识别)

ios - 为 iPhone 编译 GLib?

ios - FBSOpenApplicationErrorDomain 代码 =4 错误

swift - 无法运行模拟器 操作无法完成。 (LaunchServicesError 错误 0。)

iphone - 是否有适用于iOS的实时线性相位均衡器?

ios - AudioFileOpenURL 和 ExtAudioFileOpenURL 有什么区别?