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

Posted

技术标签:

【中文标题】iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz【英文标题】:The iPhone simulator audio only works for 44100Hz, 22050Hz, and 11025Hz 【发布时间】:2011-04-04 20:10:48 【问题描述】:

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

。否则它会奇怪地失败。

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

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

我尝试将采样率设置为 44100/4 (11025Hz),效果很好。所以我尝试将音频会话采样率设置为 11024 并且它坏了。与 11026 相同。11025 有效。

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

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

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

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

【问题讨论】:

是什么让您认为任何形式的 ios 都需要处理任何采样率? 因为我在开始会话后向它询问实际费率,它告诉我它正在执行我要求的费率。我了解这可能不是受支持的价格。我最感兴趣的是在模拟器上录制 8k 音频。 我再次问:“是什么让您认为任何形式的 iOS 都需要处理任何采样率?”您要求该采样率,但这并不意味着 iOS 模拟器可以满足您的要求。适应。 我再次告诉你,我问模拟器是否同意我要求的费率,它告诉我同意。无论如何,我只想知道模拟器是否处理 8kHz。它告诉我确实如此,但随后它吓坏了。 【参考方案1】:

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

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

如果我将单元子类型设置为 VoiceProcessingIO,8kHz 可以正常工作,我认为麦克风端每隔几次读取就会有点挑剔。

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

【讨论】:

【参考方案2】:

模拟器之所以这样命名是因为它不是模拟器。

【讨论】:

是的,我知道。但它似乎试图模拟一个可以做 44100 或 8000 的设备,但在 8000 部分上搞砸了。【参考方案3】:

首先,有一些“规范”采样率。我知道的是 8000、11025、22050、41000、48000 和 96000 Hz。我不希望任何音频系统能够以任意值工作,除了那些规范的。

话虽如此,众所周知,模拟器的行为与实际的 iDevice 不完全相同,尤其是音频子系统。例如,IIRC 模拟器无法播放 iOS 设备能够播放的所有音频格式。正如@JustSid 所说,它是模拟器而不是模拟器。没有什么能取代在实际设备上进行的测试。

【讨论】:

我用真机测试过,效果很好。我们有一种情况,我们需要在两个应用程序之间进行演示,而我们现场只有一个物理设备。如果我可以将模拟器用作其他应用程序,那将是一个很大的便利,但我无法让它在 8kHz 下工作。 @Vagrant:那么您可能想要更改您的 AudioUnit 队列:不要更改硬件采样率,而是添加一个转换器并让它进行采样率转换。这样模拟器和设备的行为应该是一样的。 这将是我的下一步,但我想首先检查是否有其他人让模拟器以 8kHz 工作,这是一个相当标准的速率。我还试图指出,模拟器不会报告非标准费率的故障,而是会尝试以非常糟糕的方式运行。

以上是关于iPhone 模拟器音频仅适用于 44100Hz、22050Hz 和 11025Hz的主要内容,如果未能解决你的问题,请参考以下文章

从 44100 到 96000 Hz 的音频上采样和线性插值

音频引擎仅在运行 iOS 10 的设备(iphone 6)上失败,在所有模拟器设备上运行良好或真实设备直到 iphone 6s

我的 NSDateFormatter 仅适用于 iPhone 模拟器

iphone 模拟器地理定位功能是不是仅适用于以太网/有线网络连接?

libfdk_aac音频采样率和编码字节数注意

如何在 AVCaptureSession 上设置音频采样率?