2
これは初めてSwiftでSFSpeechRecognizerを使用しており、1つの機能が動作しません。 audioButtonPressed
ボタンを押すと認識がうまく始まり、もう一度押すと停止します。認識を再開するためにもう一度押すと、認識が機能せず、空白のテキスト表示が表示されます。私はこれをどのようにするべきですか?Swift SFSpeechRecognizerが2回動作しない
がここに呼ばれている私のコード私が最初にプレスaudiobutton、録画を開始
@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")
}
}
だとそれが呼ばれて、それが再び録画を停止押すと、完璧に動作し、正常に動作しますが、その後認識開始をしないもう一度押しますもう一度....アイデア?
2回目に録画開始ボタンを押すと、あなたのメソッド 'startRecording'が再び呼び出されますか? –