Dies ist das erste Mal, dass ich SFSpeechRecognizer in Swift verwende und ein Teil der Funktionalität nicht funktioniert. Wenn ich den Knopf audioButtonPressed
drücke, scheint die Erkennung gut zu beginnen, und wenn ich sie erneut drücke, wird sie gestoppt. Wenn ich es erneut drücke, um die Erkennung erneut zu starten, funktioniert die Erkennung nicht und hinterlässt eine leere Textansicht. Wie soll ich das machen?Swift SFSpeechRecognizer funktioniert nicht zweimal
Hier ist mein Code
@IBAction func audioButtonPressed(_ sender: Any) {
if isRecording {
stopRecording()
delegate?.speechRecognitionComplete(query: query)
audioButton.backgroundColor = UIColor.red
isRecording = false
} else {
startRecording()
audioButton.backgroundColor = UIColor.green
isRecording = true
}
}
func stopRecording() {
audioEngine.stop()
audioEngine.inputNode?.removeTap(onBus: 0)
recognitionRequest = nil
recognitionTask = nil
}
func startRecording() {
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
guard let recognitionRequest = recognitionRequest else {
return
}
recognitionRequest.shouldReportPartialResults = true
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in
var isFinal = false
if result != nil {
self.query = result?.bestTranscription.formattedString
self.audioTextField.text = self.query
isFinal = (result?.isFinal)!
}
if error != nil || isFinal {
self.stopRecording()
}
})
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
} catch {
print("the audio session isn't configured correctly")
}
let recordingFormat = audioEngine.inputNode?.outputFormat(forBus: 0)
audioEngine.inputNode?.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, time) in
self.recognitionRequest?.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
audioTextField.text = "How may I help you"
} catch {
print("audio engine failed to start")
}
}
Als ich zum ersten Mal drücken audiobutton, starten Sie die Aufnahme aufgerufen wird und es funktioniert perfekt, drücken sie wieder die Aufnahme stoppen aufgerufen und funktioniert gut, aber dann wieder drücken nicht die Anerkennung Anfang machen wieder .... Ideen?
Ihre Methode 'startRecording' wird erneut aufgerufen, wenn Sie die Aufnahmetaste zum zweiten Mal drücken? –