iOS - проблема паузы и продолжения AVSpeechSynthesizer - PullRequest
0 голосов
/ 04 февраля 2019

macOS: Mojave 10.14.4 бета

iOS: 12.2 бета

Xcode: 10.2 бета

Я использовал AVSpeechSynthesizer, но нижекод не возобновляется с того места, где он был приостановлен.

// The pause functionality works fine
if (synth.isSpeaking) {
   synth.pauseSpeaking(at: AVSpeechBoundary.word)
}


// But continueSpeaking always starting from the beginning.
if (synth.isPaused) {
   synth.continueSpeaking();
}

Как продолжить с того места, где я ушел?Что-то я пропускаю?

1 Ответ

0 голосов
/ 13 мая 2019

Я реализовал следующий код для проверки вашей проблемы (тестирование под Mojave 10.14.4, iOS 12.2, Xcode 10.2.1 и swift 5.0) :

class SpeechSynthesis: UIViewController {

    var synthesizer = AVSpeechSynthesizer()
    var playQueue = [AVSpeechUtterance]()

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        for i in 1...10 {
            let stringNb = "number " + String(i) + " of the speech synthesizer."
            let utterance = AVSpeechUtterance(string: stringNb)
            playQueue.append(utterance)
        }

        for utterance in playQueue {
            synthesizer.speak(utterance)
        }
    }

    @IBAction func pauseButton(_ sender: UIButton) {

        if (synthesizer.isSpeaking == true) {
            if (synthesizer.pauseSpeaking(at: .immediate) == true) {
                print("PAUSE")
            } else {
                print("P.R.O.B.L.E.M. when pausing.")
            }
        }
    }

    @IBAction func resumeButton(_ sender: UIButton) {

        if (synthesizer.isPaused == true) {
            if (synthesizer.continueSpeaking() == true) {
                print("CONTINUE")
            } else {
                print("P.R.O.B.L.E.M. when resuming.")
            }
        }
    }
}

Я заметил еще однупроблема с границей .word, которая не всегда останавливается при срабатывании, но когда это ограничение изменяется на .immediate, все возобновляется с того места, где оно было приостановлено.

Однако, когда оноредко делает паузу с границей .word, она всегда возобновляет с того места, где она также остановилась.

Я не знаю, откуда возникла ваша проблема, но с конфигурацией, упомянутой выше, и этим кодомфрагмент, синтезатор речи возобновляет работу с того места, где он остановился .

...