Регулировка скорости и шага в реальном времени Swift - PullRequest
0 голосов
/ 24 апреля 2019

Я устанавливаю приложение 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 {

    }
}

1 Ответ

1 голос
/ 03 июня 2019

Возможно, я понял вашу проблему, даже если подробности не предоставлены: вы не можете принять во внимание новые значения rate и pitchMultiplier , когда речь идет .

Чтобы объяснить следующие подробности, я прочитал этот пример , который содержит фрагменты кода (ObjC, Swift) и иллюстрации. enter image description here

  1. Создайте свои AVSpeechUtterance экземпляры с их свойствами rate и pitchMultiplier.
  2. Добавьте каждый из них в массив, который будет представлять очередь для произнесения речи.
  3. Сделать цикл внутри предыдущей очереди с синтезатором, чтобы прочитать все элементы.

Теперь, , если вы хотите изменить значения свойств в режиме реального времени , см. Следующие шаги после перемещения одного из ваших ползунков:

  1. Получите текущее речевое высказывание благодаря протоколу AVSpeechSynthesizerDelegate.
  2. Запустите метод синтезатора stopSpeaking, который удалит из очереди высказывания, которые еще не были произнесены.
  3. Создание предыдущих удаленных высказываний с новыми значениями свойств.
  4. Повторите шаги 2 / и 3 ​​/, чтобы возобновить работу с этими обновленными значениями.

Синтезатор ставит в очередь всю информацию для произнесения задолго до того, как вы запросите новые значения, которые не влияют на сохраненные высказывания: вы должны удалить и воссоздать высказывания с их новыми значениями свойств для произнесения речи.

Если приведенный выше пример кода недостаточен, я предлагаю взглянуть на подробное резюме этого видео WWDC , касающееся AVSpeechSynthesizer.

...