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