我收集到您可以使用委托方法来告诉AV语音何时结束
extension MyViewController: AVSpeechSynthesizerDelegate {
func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) {
print("speech finished")
}
}
但是您如何判断演讲是否正在进行并且 还没有结束?
现在,我以
开始讲话voice.speak(utt)
//do something
我想在对方说before
时说些什么,他们说完了。仅在voice.speak(utt)
下方添加一行内容似乎无效。我认为这是由于比赛条件造成的。我不能确定它是在触发语音后立即触发,还是在发话完成之后在委托方法触发之前触发。
补全集团将无济于事,因为我想在话语完成之前做点什么。那么,如何在发声时做些事情,换句话说,就是在发声的确切时刻开始做某事?
答案 0 :(得分:1)
您如何判断演讲是否正在进行...
从AVSpeechSynthesizer实例的isSpeaking
方法中获取指示合成器是否正在讲话的布尔值。
...还没有完成?
借助AVSpeechSynthesizerDelegate
protocol的didStart
方法检测起点,该方法将提供相关的语音。
此外,如果您想确切知道发声的位置,请使用willSpeakRangeOfSpeechString
协议的AVSpeechSynthesizerDelegate
。
All these elements应该可以帮助您根据需要检测来自AVSpeech和AVUtterance的语音。