Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何让语音合成器一个接一个地说出一连串的话语?_Ios_Swift_Text To Speech - Fatal编程技术网

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
(type
Bool
)、
synthesizer
(type
AVSpeechSynthesizer
)和
playlist
(type
Playlists
,一种实体描述)是类级变量

我认为这里的代码非常清楚。首先,我决定是停止还是启动合成器。如果是后者,则循环播放列表中的项目并合成它们。然后切换图像并改变
isplay

但当我运行应用程序并按下按钮时,什么都没有发生。没有声音,没有图像变化,什么都没有。我想这是因为方法中的最后两行,所以我删除了它们。这一次,按钮的图像发生了变化,但仍然没有声音

我想这一定是因为我在告诉合成器在最后一句话结束之前开始说话。或者我需要知道合成器什么时候停止讲话,然后开始另一次讲话

“但是你为什么不把琴弦连起来,只合成一次呢?”你问道。因为我想在播放列表中的每个项目之间有两秒钟的延迟

问题:

如何一个接一个地播放播放列表的内容?(其间有明显的延迟)


我需要使用哪些字符来创建
avspeechoutrance
,以便它可以暂停一段明显的时间?

最好的方法是使用
avspeechsynthezerdelegate

它有一个方法
speechSynthesizer(uu2;:didFinishSpeechOutreace:)
,该合成器在话语结束时调用

您可以跟踪当前正在讲话的内容,当学员被告知该内容已完成时,再开始下一个发言


如果您想让他们仅在单击按钮时播放,则在学员收到通知时禁用按钮,然后在
didStartSpeechUtterance
上启用按钮,
didfish…

执行此操作的最佳方法是使用
avspeechsynthezerdelegate

它有一个方法
speechSynthesizer(uu2;:didFinishSpeechOutreace:)
,该合成器在话语结束时调用

您可以跟踪当前正在讲话的内容,当学员被告知该内容已完成时,再开始下一个发言

如果您希望他们仅在单击按钮时播放,则在学员收到
didStartSpeechUtterance
通知时禁用按钮,然后启用
didfish…
上的按钮