使用Swift 2.0(OS X)在语音合成期间推进进度条

时间:2016-02-07 03:24:28

标签: swift macos speech-synthesis

当语音合成器正在读取文本块时,我试图以5.0为增量推进确定的进度条。这是我的代码(不起作用):

if speechSynthesizer.speaking == false {
    if let contents = textView.string where !contents.isEmpty {
        speechSynthesizer.startSpeakingString(contents)
        progressIndicator.hidden = false

        while speechSynthesizer.speaking == true {
            progressIndicator.incrementBy(5.0)
        }

        } else {
            speechSynthesizer.startSpeakingString("The document is empty.")
        }
   }

}

进度条显示但不会增加。如果我采取"而..." out,只需使用语句" progressIndicator.incrementBy(5.0)"然后进度增加,但只增加一次。

有关如何解决这个问题的任何建议吗?

提前感谢大家!

-Syn -

2 个答案:

答案 0 :(得分:1)

您可能需要将更新UI的代码移动到主运行循环,以便实际更新UI。所以将该行放在调度块中。

dispatch_async(dispatch_get_main_queue()) {
    //insert UI code here 
}

答案 1 :(得分:0)

我会使用NSSpeechSynthesizerDelegate协议 - 它能提供的最好的就是告诉你它要说的是哪个词。

optional func speechSynthesizer(_ sender: NSSpeechSynthesizer,
                  willSpeakWord characterRange: NSRange,
                       ofString string: String)

在说出每个单词时更新进度指示器

func speechSynthesizer(_ sender: NSSpeechSynthesizer,
                      willSpeakWord characterRange: NSRange,
                           ofString string: String) {

let pc = (characterRange.location + characterRange.length) / string.length
progressIndicator.doubleValue = (pc * 100)
}