1

标题中描述的场景会产生如下错误:

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

在那之后,我被倾倒到应用程序委托中,并且没有为出了什么问题提供太多帮助。

我熟悉正确结束音频会话的必要性,但在我的特殊情况下,这会在开始会话时发生,特别是在这里:

node.installTap(onBus: bus, bufferSize: 1024, format: recordingFormat) { buffer, _ in
    request.append(buffer)
}
4

1 回答 1

1

通过将我的函数追溯到这一行,可以看出这里的罪魁祸首:

let recordingFormat = node.outputFormat(forBus: bus)

由于麦克风被分配给另一个应用程序(在我的情况下,Facetime),它无法访问它以获取在发生崩溃的问题中发布的功能。

我发现通过监控采样率,我可以确定我是否可以独占访问它。

if recordingFormat.sampleRate == 0.0 {
    throw(MyAwesomeError.audioInUse)
}

当值为 0.0 时,它正在使用中。当值为 44100.0 时,我在做生意。

通过将上述检查放在node.installTap(...)函数之前,我可以安全地避免崩溃,然后使用我现有的错误处理代码将情况通知用户。

把所有东西放在一起,它看起来像这样:

let recordingFormat = node.outputFormat(forBus: bus)
if recordingFormat.sampleRate == 0.0 {
    throw(MyAwesomeError.audioInUse)
}
node.installTap(onBus: bus, bufferSize: 1024, format: recordingFormat) { buffer, _ in
    request.append(buffer)
}
于 2019-06-06T05:09:56.363 回答