Результат функции SpeechKit вызывается несколько раз - PullRequest
0 голосов
/ 11 ноября 2019

Я использую SpeechKit, чтобы вернуть речь к тексту в список. Например, составление списка покупок. Но я продолжаю получать несколько значений. Я не знаю, в чем проблема. Я знаю, что функция вызывается только один раз, но она возвращает несколько значений. Ниже приведен рисунок того, как он выглядит, и код. Пожалуйста, дайте мне несколько советов.

enter image description here

func prepareAudioEngine() {
    let node = audioEngine.inputNode
    let recordingFormat = node.outputFormat(forBus: 0)
    node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, _) in
        self.request.append(buffer)
    }

    audioEngine.prepare()
    do {
        try audioEngine.start()
    } catch {
        return print(error)
    }

    guard let myRecogizer = speechRecognizer else { return }

    if !myRecogizer.isAvailable {
        return
    }

    recordandRecognizeSpeech()
}

func recordandRecognizeSpeech() {
    recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { (result, error) in
        if let result = result {
            let stringArray = result.bestTranscription.formattedString
            let size = stringArray.reversed().firstIndex(of: " ") ?? stringArray.count
            let startWord = stringArray.index(stringArray.endIndex, offsetBy: -size)
            let last = stringArray[startWord...]
            self.detectedTextLabel.text = String(last).capitalized

        } else if let error = error {
            print("There was an error",error)
        }

        self.ingredients.append(Ingredient(name: self.detectedTextLabel.text ?? "Default", imageName: "?"))
        let indexPath = IndexPath(item: self.ingredients.count - 1, section: 0)
        self.tableView.insertRows(at: [indexPath], with: .automatic)
    })
}
...