首页 > 解决方案 > 如何快速延迟数组中的语音

问题描述

我有一个字符串数组,我想将其转换为语音,但问题是它同时说出所有世界,并且不清楚该数组是 SpeechToTextLabels

   @objc func startSpeech()
   {
       for label in speechToTextLabels {
        let utTerance = AVSpeechUtterance(string: label)
        utTerance.voice = AVSpeechSynthesisVoice(language: "en-gb")
        let synthesizer = AVSpeechSynthesizer()
       DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
                       synthesizer.speak(utTerance)
        
       }
        
       }
      
   }

}

标签: iosswiftuikitavspeechsynthesizer

解决方案


循环内的代码for几乎立即执行 - 它不会等待一个迭代在开始下一个迭代之间完成。结果,合成器同时说出所有单词。

相反,只需将单词数组缩减为一个单词String,然后让合成器说出它。

@objc func startSpeech() {
    let speechToTextLabels = ["Hi", "Hello"]
    let joinedLabel = speechToTextLabels.joined(separator: " ")
    
    let utterance = AVSpeechUtterance(string: joinedLabel)
    utterance.voice = AVSpeechSynthesisVoice(language: "en-gb")
    let synthesizer = AVSpeechSynthesizer()
    DispatchQueue.main.asyncAfter(deadline: .now() + 5.0) {
        synthesizer.speak(utterance)
    }
}

推荐阅读