如何在swift中延迟数组中的语音

问题描述

我有一个字符串数组,我想将其转换为语音,但问题是它同时讲了所有世界,而且不清楚 数组是 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)
        
       }
        
       }
      
   }

}

解决方法

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)
    }
}