根据 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
我正在使用 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