SpeechSynthesizer 不会在 Swift 中为句号提供自然停顿

Uma*_*mir 2 text-to-speech ios avspeechsynthesizer swift avspeechutterance

我正在处理文本朗读任务。在其中我面临的问题是,如果我得到文本,例如:Hello everyone. 2 minutes to go.然后使用下面的代码进行语音合成器,它将整个文本视为一个句子,并且不会在Hello everyone.. 就像没有. (full stop)after一样,它将整个文本作为一个句子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)
Run Code Online (Sandbox Code Playgroud)

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

let synthesizer = AVSpeechSynthesizer()
let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)
    try session.setActive(true)
} catch {
    print(error.localizedDescription)
}
Run Code Online (Sandbox Code Playgroud)

Mas*_*adi 5

@Umair 这不仅发生在你写一些以数值开头的东西时,而且当你的下一句话不是以大写字母开头时也会发生,例如Hello everyone. two minutes to go.事实上,这些是你的文本写作中的错误,而不是AVSpeechSynthesizer. 从语法上讲,如果您想编写此文本,则应采用以下方式之一。

大家好。还有两分钟。

或者

大家好,还有2分钟。

以上两种说法都将为您的问题提供确切答案。另一行可以为您工作,但这不是一个合适的句子。Hello everyone,. 2 minutes to go.

希望这可以帮助