如何知道AVSpeechSynthesizer何时完成所有排队的讲话。迅捷4.2

时间:2018-11-02 23:32:32

标签: swift avspeechsynthesizer

我正在尝试使用 isSpeaking 属性来完成此操作。但是,在说出第一句话之后,它返回false,因此过早触发了所需的代码。

根据Apple Dev Documentation 正在讲

  

如果合成器正在讲话或有语音入队,则返回true   说话,即使它当前已暂停。如果   合成器已经说完了队列中的所有话语,或者   还没有说话的机会。

所以,我真的不明白为什么当有更多人排队时,在一次讲话后它返回false。

我也尝试过使用 didFinish话语方法,但是在第一次话语后也会触发代码。

是否有办法知道AVSpeechSynthesizer何时完成所有排队的讲话,如下面的代码示例所示?我是编程新手,所以完成此操作的任何帮助都会很棒。谢谢!

var i = 0
    while i < array.count {

        let utterance = "Let's talk about \(array[i])."
        i += 1

        speechSynthesizer.speak(utterance) }

1 个答案:

答案 0 :(得分:0)

实际上,当前没有(iOS 12,Swift 5.0)关于AVSpeechSynthesizer队列的可用信息,这使我们对其内容“视而不见”。

在向讲话者提供语音时,要知道队列中的内容,唯一的方法就是借助AVSpeechSynthesizerDelegate协议方法来跟踪每个语音的开始和结束。