Я настраиваю приложение tts с помощью AVSpeechSynthesizer
. Я должен в реальном времени корректировать высоту тона и скорость. Я использую UISLider
для настройки высоты тона и скорости.
Вот мой код: -
@IBAction func sl(_ sender: UISlider) {
if synthesizer.isSpeaking {
synthesizer.stopSpeaking(at: .immediate)
self.rate = sender.value
if currentRange.length > 0 {
let valuee = currentRange.length + currentRange.location
let neww = self.tvEditor.text.dropFirst(valuee)
self.tvEditor.text = String(neww)
synthesizer.speak(buildUtterance(for: rate, pitch: pitch, with: String(neww), language: self.preferredVoiceLanguageCode2 ?? "en"))
}
} else {
}
}
Возможно, я понял вашу проблему, даже если не было предоставлено никаких подробностей: нельзя учитывать новые значения из rate
и pitchMultiplier
когда идет речь.
Чтобы объяснить следующие детали, я прочитал этот пример, который содержит фрагменты кода (Объект, Свифт) и иллюстрации.
AVSpeechUtterance
с их свойствами rate
и pitchMultiplier
.Теперь, если вы хотите изменить значения свойств в режиме реального времени, просмотрите шаги после перемещения одного из ваших ползунков:
AVSpeechSynthesizerDelegate
.stopSpeaking
, который удалит из очереди еще не произнесенные высказывания.Синтезатор ставит в очередь всю информацию для произнесения задолго до того, как вы запросите новые значения, которые не влияют на сохраненные высказывания: вы должны удалить и воссоздать высказывания с их новыми значениями свойств для произнесения.
Если примера кода, предоставленного по ссылке выше, недостаточно, я предлагаю взглянуть на это видео WWDC подробное резюме, связанный с AVSpeechSynthesizer
.