【问题标题】:How to know when AVSpeechSynthesizer has finished speaking all queued utterances. Swift 4.2如何知道 AVSpeechSynthesizer 何时完成了所有排队的话语。斯威夫特 4.2
【发布时间】:2019-06-06 13:41:04
【问题描述】:

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

根据Apple Dev DocumentationisSpeaking

如果合成器正在说话或有话语排队,则返回 true 说话,即使它目前已暂停。如果 合成器已完成其队列中的所有话语,或者如果它 还没有发言权。

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

我也尝试过使用 didFinish utterance 方法,但它也会在第一次发声后触发代码。

有没有办法知道 AVSpeechSynthesizer 何时完成所有排队的话语,如下面的代码示例所示?我是编程新手,所以任何帮助实现这一点都会很棒。谢谢!

var i = 0
    while i < array.count {

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

        speechSynthesizer.speak(utterance) }

【问题讨论】:

    标签: swift avspeechsynthesizer


    【解决方案1】:

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

    当您向说话者提供话语时,了解队列中内容的唯一方法是跟踪每个话语的开始和结束,这要归功于AVSpeechSynthesizerDelegate protocol methods

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多