Ошибка домена =kAFAssistantErrorDomain Code=209 "(null)" - кнопка сброса убивает диктовку
Я постоянно получаю это сообщение об ошибке, когда я нажимаю кнопку сброса для моего приложения с распознаванием речи. Это происходит только в том случае, если я нажимаю кнопку, когда приложение активно прослушивает распознавание речи. Приложение выглядит так, как будто оно все еще записывает, но больше не потребует ввода. Это также не позволит мне остановить запись. Код ниже.
@IBAction func resetTapped(_ sender: Any) {
if audioEngine.isRunning {
audioEngine.stop()
recognitionRequest?.endAudio()
}
globalVariables.tempText = ""
globalVariables.finalText = ""
globalVariables.boolRecording = false
self.inView.text = ""
self.resultView.text = ""
inView.backgroundColor = UIColor.red
}
private let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "en-US"))
private var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
private var recognitionTask: SFSpeechRecognitionTask?
private let audioEngine = AVAudioEngine()
func startRecording() -> String {
self.inView.text = ""
if recognitionTask != nil {
recognitionTask?.cancel()
recognitionTask = nil
}
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
guard let recognitionRequest = recognitionRequest else {
fatalError("Unable to create an SFSpeechAudioBufferRecognitionRequest object")
}
recognitionRequest.shouldReportPartialResults = true
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
if globalVariables.boolRecording == true {
self.inView.text = result?.bestTranscription.formattedString
globalVariables.tempText = self.spaceChanges(String: self.recordingChanges(String: self.inView.text))
self.resultView.text = globalVariables.finalText + globalVariables.tempText
}
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.audioEngine.stop()
self.audioEngine.inputNode.removeTap(onBus: 0)
self.recognitionRequest = nil
self.recognitionTask = nil
}
})
audioEngine.inputNode.removeTap(onBus: 0)
let recordingFormat = audioEngine.inputNode.outputFormat(forBus: 0)
audioEngine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in self.recognitionRequest?.append(buffer) }
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
print("audioEngine couldn't start because of an error.")
}
return self.inView.text
}