【问题标题】:AVSpeechSynthesizer needs to finish before starting againAVSpeechSynthesizer 需要在重新开始之前完成
【发布时间】:2017-01-14 08:21:03
【问题描述】:

如果我有一个让 AVSpeechSynthesizer 每次按下它时都会说“Hello World”的按钮,那么在完成第一个文本到语音的字符串之前,声音不会再次开始说话。

我如何选择以下两个选项?

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

  2. 让它在前一个声音之上说话(即多个声音同时说话)

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

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

【问题讨论】:

  • 你可以通过创建多个AVSpeechSynthesizers 来实现 .2 吗?

标签: ios swift avfoundation text-to-speech


【解决方案1】:

为了打断当前的语音并开始新的语音,您必须停止当前正在播放的语音。为此,您需要保留对合成器的引用,并在您想开始新演讲时致电stopSpeakingAtBoundary。使用.Immediate 作为停止边界将导致它立即停止。请记住,stopSpeakingAtBounday 将完全清除您当前的 AVSpeechSynthesizer 队列。

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

很遗憾,我不知道您的第二个问题的解决方案

【讨论】:

  • 这非常适合选项 1。谢谢!希望有人很快就会有#2。
猜你喜欢
  • 1970-01-01
  • 2020-08-19
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多