gpt4 book ai didi

ios - AVSpeechSynthesizer 卡住 iOS 应用程序几秒钟

转载 作者:行者123 更新时间:2023-11-28 23:39:26 25 4
gpt4 key购买 nike

在我的 ARKit 应用程序中使用 AVSpeechSynthesizer 会使应用程序在发出声音之前卡住几秒钟。我创建了这个辅助类:

public class TextToSpeech {
class func speak(text: String) {
let utterance = AVSpeechUtterance(string: text)
utterance.voice = AVSpeechSynthesisVoice(language: "EN")
utterance.rate = 0.3
let synthesizer = AVSpeechSynthesizer()
synthesizer.speak(utterance)
}
}

但是,当我调用它的类函数时,应用会卡住几秒钟。

class MyViewController: UIViewController {
...

@objc func didTapButton() {
TextToSpeech.speak(text: "test") // it works but it freezes the app temporarily
}
}

我在代码中的什么地方调用它并不重要。我已尝试将此调用包含在 DispatchQueue 中,但它仍然不起作用。我该如何解决这个卡住问题?这是正常行为吗?

最佳答案

看起来它与内部 AVSpeechSynthesizer 队列连接。您可以尝试让它在后台管理事物,因为没有提到 AVSpeechSynthesizer 仅是主线程。为此,请向后台队列添加最后一行 (synthesizer.speak(utterance)) 调用,捕获对 synthesizerutterance 对象的引用,例如那:

DispatchQueue.global(qos: .background).async { 
synthesizer.speak(utterance)
}

我认为你的 ui 被阻止的原因是因为 synthesizer 实例必须阻止当前线程才能说话。因此,您必须等到合成器完成说话,然后才能在 speak() 方法退出时释放。

关于ios - AVSpeechSynthesizer 卡住 iOS 应用程序几秒钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53912072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com