Регулировка скорости и высоты тона в реальном времени Swift

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

    }
}
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
185
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Чтобы объяснить следующие детали, я прочитал этот пример, который содержит фрагменты кода (Объект, Свифт) и иллюстрации.

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

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

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

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

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

Другие вопросы по теме