如果我有一个按钮让AVSpeechSynthesizer说" Hello World"每当我按下它时,语音就不会再开始讲话,直到它完成了第一个文本到语音字符串。
我如何以下两个选项?
当我点击按钮时,让它中断前一个语音字符串并重新开始
让它超越前一个(即多个声音立刻说话)
这是我现在正在做的事情。使用此按钮,按钮不会再次开始说话,直到上一次按下按钮完成说话:
@IBAction func helloButton(sender: AnyObject) {
let utterance = AVSpeechUtterance(string: "Hello World")
let synthesizer = AVSpeechSynthesizer()
synthesizer.speakUtterance(utterance)
}
答案 0 :(得分:4)
为了中断当前语音并启动新语音,您必须停止当前正在播放的语音。要执行此操作,您需要保留对合成器的引用,并在您要开始新语音时调用stopSpeakingAtBoundary
。使用.Immediate
作为停止边界将导致它立即停止。请注意,stopSpeakingAtBounday
将完全清除当前的AVSpeechSynthesizer
队列。
let synthesizer = AVSpeechSynthesizer()
func helloButton(sender: AnyObject) {
synthesizer.stopSpeakingAtBoundary(.Immediate)
let utterance = AVSpeechUtterance(string: "Hello World")
synthesizer.speakUtterance(utterance)
}
可悲的是,我不知道你的第二个问题的解决方案