AVSpeechSynthesizer需要在重新开始之前完成

时间:2016-09-06 19:23:24

标签: ios swift avfoundation text-to-speech

如果我有一个按钮让AVSpeechSynthesizer说" Hello World"每当我按下它时,语音就不会再开始讲话,直到它完成了第一个文本到语音字符串。

我如何以下两个选项?

  1. 当我点击按钮时,让它中断前一个语音字符串并重新开始

  2. 让它超越前一个(即多个声音立刻说话)

  3. 这是我现在正在做的事情。使用此按钮,按钮不会再次开始说话,直到上一次按下按钮完成说话:

    @IBAction func helloButton(sender: AnyObject) {    
        let utterance = AVSpeechUtterance(string: "Hello World")
        let synthesizer = AVSpeechSynthesizer()
        synthesizer.speakUtterance(utterance)
    }
    

1 个答案:

答案 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)
    }

可悲的是,我不知道你的第二个问题的解决方案