ios - 如何快速延迟数组中的语音
问题描述
我有一个字符串数组,我想将其转换为语音,但问题是它同时说出所有世界,并且不清楚该数组是 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)
}
}
推荐阅读
- verilog - 为什么非法引用网络“portA”
- java - 覆盖 application.yml 文件中的默认值 spring boot
- oracle - 关于 Oracle 中的准确时间
- powerbi - DAX 计算度量不受表中行的影响
- azure - 如何检索 Azure 逻辑应用的版本历史信息和运行历史
- powershell - 无法将 DateTime 传递给类方法 - 强制错误
- json - 使用 PouchDB 或 (CouchDB) VS 使用 JSON 文件
- java - 为什么我看到的是开放的 JDK 1.8 而不是 Java 8?
- model - NetLogo:使用选择器在一个中运行 2 个不同的模型
- azure - Creating Azure DEV TEST environment, creates overlapping address space