繁体   English   中英

在通话或Facetime会话期间,尝试使用SpeechRecognizer会导致应用崩溃

[英]While in a phone call or Facetime session, attempting to use SpeechRecognizer crashes app

标题中描述的方案将产生以下错误:

因未捕获的异常'com.apple.coreaudio.avfaudio'而终止应用程序,原因:'必需条件为false:IsFormatSampleRateAndChannelCountValid(格式)

在那之后,我被倾倒到app代理中,并没有给出错误的帮助。

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

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

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

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)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM