3

每当代码到达时 inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {[weak self] (buffer:AVAudioPCMBuffer, when:AVAudioTime),应用程序就会崩溃并出现以下错误

由于未捕获的异常“com.apple.coreaudio.avfaudio”而终止应用程序,原因:“所需条件为假:format.sampleRate == hwFormat.sampleRate”

在添加另一个水龙头之前,我厌倦了移除水龙头,我确保我不会添加多个水龙头。奇怪的是,该应用程序在低于 12 的 iOS 上运行良好,并且在所有模拟器上运行良好。

它仅在装有 iOS 12 的真实设备上崩溃。我尝试寻找解决方案,但找不到任何东西。

4

2 回答 2

7

这是采样率不匹配。

输入节点的格式无法更改,因此您需要匹配它。installTap监听一个节点的输出,所以使用 inputNode 的输出格式。

inputNode.installTap(onBus: 0, bufferSize: 1024, format: inputNode.outputFormat(forBus: 0))

另一种选择是将输入连接到混音器,然后使用首选录制格式点击混音器。混频器在其输入和输出之间执行隐式采样率转换。

于 2018-12-14T23:21:49.483 回答
-3

我发现唯一可以改变采样率的是

AVAudioSettings.sharedInstance().setPreferredSampleRate(...)

不幸的是,虽然 8000、12000、16000、22050、44100 似乎都有效,但无法保证您将获得所需的采样率。

以下没有工作:

  1. 在分接 engine.inputNode 中设置我的自定义格式。(例外,同OP)
  2. 添加具有我的自定义格式的混音器并点击它。(例外)
  3. 添加一个混音器,用 inputNode 的格式连接它,用我的自定义格式将混音器连接到主混音器,然后删除 outputNode 的输入,以免将音频发送到扬声器并获得即时反馈。(工作,但全为零)
  4. 在 AVAudioEngine 中根本不使用我的自定义格式,而是使用 AVAudioConverter 从我的水龙头中的硬件速率转换。(缓冲区的长度没有设置,无法判断结果是否正确)

这是使用 iOS 12.3.1。

于 2019-07-19T00:13:48.893 回答