根据 swift 中的 AVSpeechUtterance 更改滑块值

change slider value according to the AVSpeechUtterance in swift

我正在使用 AVSpeechUtterance 阅读文本,并尝试根据阅读的文本实现更改滑块缩略图。

我试过了:-

myUtterance = AVSpeechUtterance(string: idFileText)
myUtterance.rate = 0.3

synth.speak(myUtterance)
synth.continueSpeaking() 

if let intValue = Int(idFileText) {
    self.sliderValue.setValue(Float(intValue), 
                              animated: true)
}

文本 reader 效果不错,但滑块值没有改变。
任何人都可以建议我在文本 reader.

上实现滑块的正确方法

使用 AVSpeechSynthesizer 的委托 speechSynthesizer(_:willSpeakRangeOfSpeechString:utterance:)
它提供当前正在说的字符范围。
您可以使用它来确定滑块位置,因为您应该已经知道整个文本的长度。

一个基本的例子是:

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, 
                       willSpeakRangeOfSpeechString characterRange: NSRange, 
                       utterance: AVSpeechUtterance) {
    let progress = Float(characterRange.location + characterRange.length)
                   / Float(utterance.speechString.count)
    print(progress)

    self.sliderValue.setValue(progress, 
                              animated: true)
}

对于上述逻辑,请确保您的滑块对象 min-max 范围是 0-1。
当然,您还需要对其进行改进,以获得更顺利的进展。


别忘了:

synth.delegate = self