SpeechSynthesizer 没有在 Swift 中提供完全停止的自然停顿

问题描述 投票:0回答:1

我正在做一项文字朗读任务。其中我面临的问题是,如果我得到文本,例如:

Hello everyone. 2 minutes to go.
然后使用下面的代码进行语音合成器,它将整个文本视为一个句子,并且在
Hello everyone.
之后不会给出自然的停顿。它将整个文本作为一个句子来表达,就像
. (full stop)
之后没有
Hello everyone
一样。 仅当标点符号后有数字时才会发生这种情况
. (full stop)

let utterance = AVSpeechUtterance(string: "Hello everyone. 2 minutes to go.")
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
utterance.rate = AVSpeechUtteranceDefaultSpeechRate
synthesizer.speak(utterance)

如果您关心我如何初始化会话和合成器,那么下面是代码:

let synthesizer = AVSpeechSynthesizer()
let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(.playback, options: .duckOthers)
    try session.setActive(true)
} catch {
    print(error.localizedDescription)
}
ios swift text-to-speech avspeechsynthesizer avspeechutterance
1个回答
7
投票

@Umair 这不仅发生在您编写以数值开头的内容时,还会发生在您的下一个句子不是以大写字母开头时,例如

Hello everyone. two minutes to go.
事实上,这些是您的文本写作中的错误,而不是任何问题与
AVSpeechSynthesizer
。从语法上讲,如果您想编写此文本,则应采用以下方式之一。

大家好。还剩两分钟。

大家好,还有2分钟时间。

以上两种说法都会给出您问题的准确答案。另一行可以为你工作,但这不是一个合适的句子。

Hello everyone,. 2 minutes to go.

希望这能有所帮助

© www.soinside.com 2019 - 2024. All rights reserved.