swift iOS语音识别重复暂停并恢复其转录

j9per5c4  于 2023-08-02  发布在  Swift
关注(0)|答案(1)|浏览(245)

我在iOS语音识别中遇到了一个奇怪的行为。它暂停了一段时间的转录,并在一段时间后恢复它,而不做任何从应用程序方面(字面上我只是一直等待拿着我的iPhone,它突然恢复)。它并不总是发生,但有时会发生。
我通过将requiresOnDeviceRecognition设置为true来使用设备上模式,因此,从我的理解来看,不应该像网络模式那样有一分钟的限制。
到目前为止,我观察到两件事。
首先,我查看了Xcode中的能源报告,它显示了一些线索。当它暂停转录时,它似乎完全停止了它的活动。

  • 当它工作时:* x1c 0d1x
  • 暂停时:*
  • 恢复时:*

    其次,下面是恢复转录时的Xcode控制台日志。不知道这是否与问题有关,但只是FYI。
2023-07-25 17:54:25.249013+0900 ***[2968:837713] [tcp] tcp_input [C87.1.1.1:3] flags=[R] seq=3535393450, ack=0, win=0 state=LAST_ACK rcv_nxt=3535393450, snd_una=907886974
2023-07-25 17:54:25.251148+0900 ***[2968:837713] [tcp] tcp_input [C87.1.1.1:3] flags=[R] seq=3535393450, ack=0, win=0 state=CLOSED rcv_nxt=3535393450, snd_una=907886974

字符串
这是一种Speech框架要求吗?如果有必要,我很乐意分享实现。- 谢谢-谢谢

[更新]

另一个观察结果是,当它不工作时,一些线程似乎很忙碌。似乎存在约40-50秒的不活动模式。


有趣的是,当我在转录工作时继续说话时,这个忙碌时期不会出现。然后在我停止说话后,不活动模式又开始了。
x1c4d 1x的

[更新2]

即使转录不工作,安装到AVAudioEngine的inputNode的tapBlock也会被回调。self.recognitionRequest也不是nil。

let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in
    self.recognitionRequest?.append(buffer)
}

ep6jt1vc

ep6jt1vc1#

我找到了原因和解决办法。
我使用的是AVAudioSession的.voiceChat模式。但是在我把它换成.default之后,这个问题就不再出现了!
根据Apple document,它说它以某种方式优化了.voiceChat模式下设备的I/O,所以我猜它可能与SpeechRecognizer不兼容。
此模式适用于使用playAndRecord类别的IP语音(VoIP)应用。设置此模式时,会话将优化设备的语音音调均衡,并将允许的音频路由集减少为仅适用于语音聊天的路由。
不确定细节,但无论如何,发现SpeechRecognizer在使用.voiceChat AVAudioSession模式沉默一段时间后停止转录。

相关问题