获取"成绩单"来自Google语音API的价值观

时间:2017-12-28 05:55:18

标签: ios swift speech-to-text google-speech-api google-cloud-speech

我正在尝试获取"成绩单"来自以下结果的值:

{

transcript: "1 2 3 4"
confidence: 0.902119

words {
  start_time {
    nanos: 200000000
  }
  end_time {
    nanos: 700000000
  }
  word: "1"
}
words {
  start_time {
    nanos: 700000000
  }
  end_time {
    nanos: 900000000
  }
  word: "2"
}
words {
  start_time {
    nanos: 900000000
  }
  end_time {
    seconds: 1
  }
  word: "3"
}
words {
  start_time {
    seconds: 1
  }
  end_time {
    seconds: 1
    nanos: 300000000
  }
  word: "4"
}

}

我写的代码是:

结果在response.resultsArray! {

 if let result = result as? StreamingRecognitionResult {
     for alternative in result.alternativesArray {
         if let alternative = alternative as? StreamingRecognitionResult {
                 textView.text = "\(alternative["transcript"])"
           }
            }
            }
                    }

所以,当我试图将值放在textview.text中时,我收到一条错误说明:

"输入' StreamingRecognitionResult'没有下标成员"。

请帮忙。

2 个答案:

答案 0 :(得分:2)

关键行是:

let tmpBestResult = (response.resultsArray.firstObject as! StreamingRecognitionResult)
let tmpBestAlternativeOfResult = tmpBestResult.alternativesArray.firstObject as! SpeechRecognitionAlternative
let bestTranscript = tmpBestAlternativeOfResult.transcript

这些行在streamAudioData()中的位置如下:

SpeechRecognitionService.sharedInstance.streamAudioData(audioData,languageCode: self.selectedLangType.rawValue,
                                                                    completion:

                { [weak self] (response, error) in
                    guard let strongSelf = self else {
                        return
                    }

                    if let error = error {

                        debugPrint(">>)) Process_delegate error >> \(error.localizedDescription)")
                        strongSelf.stopRecordingSpeech()
                        self?.delegate.conversionDidFail(errorMsg: error.localizedDescription)
                    } else if let response = response {
                        var finished = false
                        debugPrint(response)
                        for result in response.resultsArray! {
                            if let result = result as? StreamingRecognitionResult {
                                if result.isFinal {
                                    finished = true
                                }
                            }
                        }

                        let tmpBestResult = (response.resultsArray.firstObject as! StreamingRecognitionResult)
                        let tmpBestAlternativeOfResult = tmpBestResult.alternativesArray.firstObject as! SpeechRecognitionAlternative
                        let bestTranscript = tmpBestAlternativeOfResult.transcript
                        strongSelf.delegate.conversionOnProcess(intermediateTranscript: bestTranscript!, isFinal: finished)
                        if finished {
                            //UI
                            strongSelf.stopRecordingSpeech()
                            strongSelf.delegate.conversionDidFinish(finalTranscript: bestTranscript!)
                        }
                    }
            })

快乐编码;)

答案 1 :(得分:0)

因此代码将更改为:

for alternative in result.alternativesArray {
  if let alternative1 = alternative as? SpeechRecognitionAlternative {
        textView.text = "\(alternative1.transcript)"
  }
}