我已经实现了语音识别功能,可以在命令的基础上操作应用程序。
但是,当用户尝试连续一段时间(不到1分钟)开始结束语音识别时,应用程序崩溃并显示错误消息:- libc ++ abi.dylib:以NSException类型的未捕获异常终止 strong>
仅当用户快速执行此操作时,应用程序才会崩溃。
如果正常尝试从头到尾,则可以正常工作。
无法找出原因。
**
**
开始讲话:- ///开始语音识别
InputStream inputStream = FileHandle.class.getResourceAsStream(path);
*
*
func startListening() {
if AVAudioSession.sharedInstance().category == AVAudioSessionCategorySoloAmbient
{
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
}
audioEngine = AVAudioEngine()
if !(audioEngine?.isRunning)! {
startRecording()
//print("start listening............")
}
}
停止语音识别:- ///结束语音识别
/// Start recording/listening
private func startRecording() {
guard let audio_engine = self.audioEngine else {return}
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
let inputNode = audio_engine.inputNode
guard let recognitionRequest = recognitionRequest else {
// fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
print("fatalError : Unable to create an SFSpeechAudioBufferRecognitionRequest object")
return
}
recognitionRequest.shouldReportPartialResults = true
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
if let transcript = result?.bestTranscription.formattedString{
self.speechResponse!(transcript,.authorized,nil)
}
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
audio_engine.stop()
inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
if self.isContinueListening == true{
self.startRecording()
}
}
})
let recordingFormat = inputNode.outputFormat(forBus: 0)
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
self.recognitionRequest?.append(buffer)
}
audio_engine.prepare()
do {
try audio_engine.start()
} catch {
print("audioEngine couldn't start because of an error")
}
}
即使试图拖延但没有运气
谢谢!