我正在尝试使用 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) }
答案 0 :(得分:0)
实际上,当前没有(iOS 12,Swift 5.0)关于AVSpeechSynthesizer队列的可用信息,这使我们对其内容“视而不见”。
在向讲话者提供语音时,要知道队列中的内容,唯一的方法就是借助AVSpeechSynthesizerDelegate
协议方法来跟踪每个语音的开始和结束。