Ios 如何让语音合成器一个接一个地说出一连串的话语?
我正在构建一个应用程序,它将一个接一个地说出存储在播放列表中的句子/单词。播放列表和其中的项目都存储在核心数据中 我在情节提要中添加了播放/停止按钮。以下是它的事件处理程序:Ios 如何让语音合成器一个接一个地说出一连串的话语?,ios,swift,text-to-speech,Ios,Swift,Text To Speech,我正在构建一个应用程序,它将一个接一个地说出存储在播放列表中的句子/单词。播放列表和其中的项目都存储在核心数据中 我在情节提要中添加了播放/停止按钮。以下是它的事件处理程序: @IBAction func playClick(sender: UIBarButtonItem) { if isPlaying { synthesizer.stopSpeakingAtBoundary(.Immediate) isPlaying = false se
@IBAction func playClick(sender: UIBarButtonItem) {
if isPlaying {
synthesizer.stopSpeakingAtBoundary(.Immediate)
isPlaying = false
sender.image = UIImage(named: "play")
} else {
sender.image = UIImage(named: "stop")
isPlaying = true
for string in playlist.utterrances! {
let utterance = UserSettings.getPrefUtterance((string as! Utterance).string!)
utterance.postUtteranceDelay = 2
synthesizer.speakUtterance(utterance)
}
isPlaying = false
sender.image = UIImage(named: "play")
}
}
isPlaying
(typeBool
)、synthesizer
(typeAVSpeechSynthesizer
)和playlist
(typePlaylists
,一种实体描述)是类级变量
我认为这里的代码非常清楚。首先,我决定是停止还是启动合成器。如果是后者,则循环播放列表中的项目并合成它们。然后切换图像并改变isplay
但当我运行应用程序并按下按钮时,什么都没有发生。没有声音,没有图像变化,什么都没有。我想这是因为方法中的最后两行,所以我删除了它们。这一次,按钮的图像发生了变化,但仍然没有声音
我想这一定是因为我在告诉合成器在最后一句话结束之前开始说话。或者我需要知道合成器什么时候停止讲话,然后开始另一次讲话
“但是你为什么不把琴弦连起来,只合成一次呢?”你问道。因为我想在播放列表中的每个项目之间有两秒钟的延迟
问题:
如何一个接一个地播放播放列表的内容?(其间有明显的延迟)
或
我需要使用哪些字符来创建
avspeechoutrance
,以便它可以暂停一段明显的时间?最好的方法是使用avspeechsynthezerdelegate
它有一个方法speechSynthesizer(uu2;:didFinishSpeechOutreace:)
,该合成器在话语结束时调用
您可以跟踪当前正在讲话的内容,当学员被告知该内容已完成时,再开始下一个发言
如果您想让他们仅在单击按钮时播放,则在学员收到通知时禁用按钮,然后在
didStartSpeechUtterance
上启用按钮,didfish…
执行此操作的最佳方法是使用avspeechsynthezerdelegate
它有一个方法speechSynthesizer(uu2;:didFinishSpeechOutreace:)
,该合成器在话语结束时调用
您可以跟踪当前正在讲话的内容,当学员被告知该内容已完成时,再开始下一个发言
如果您希望他们仅在单击按钮时播放,则在学员收到didStartSpeechUtterance
通知时禁用按钮,然后启用didfish…
上的按钮