Обнаружение текущей речи от AVSpeech и AVUtterance в Swift - PullRequest
2 голосов
/ 18 марта 2019

Я полагаю, вы можете использовать метод делегата, чтобы сказать, когда AV-речь закончилась

 extension MyViewController: AVSpeechSynthesizerDelegate {

    func speechSynthesizer(synthesizer: AVSpeechSynthesizer, didFinishSpeechUtterance utterance: AVSpeechUtterance) {
            print("speech finished")
        }

    }

Но как вы можете определить, продолжается ли речь и не закончена ли * * ?

Прямо сейчас я начинаю речь с

voice.speak(utt)
//do something

Я хотел бы что-то сделать, пока человек говорит before Они заканчивают. Просто поставить строку, сделать что-то ниже voice.speak(utt), похоже, не работает. Я думаю, что это связано с состоянием гонки. Я не могу быть уверен, что он сработает, как только сработает голос, и до того, как сработает метод делегата после завершения произнесения.

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

1 Ответ

1 голос
/ 07 мая 2019

как узнать, идет ли речь ...

Получите логическое значение, которое указывает, говорит ли синтезатор, из метода isSpeaking вашего экземпляра AVSpeechSynthesizer.

... а еще не закончил?

Обнаружение начала благодаря методу didStart протокола AVSpeechSynthesizerDelegate , который обеспечит соответствующее высказывание.

Кроме того, если вы хотите точно знать место вокализации, используйте willSpeakRangeOfSpeechString протокола AVSpeechSynthesizerDelegate.

Все эти элементы должны помочь вам обнаружить текущую речь из AVSpeech и AVUtterance по желанию.

...