Я использую AVSpeechSynthesizer для произнесения текста, после его использования для чего-то вроде 200 раз происходит какое-то странное поведение (в симуляторе macOS, а также в симуляторе iPad) после примерно 200 вызовов (synthesizer.speak(utterance)
), все работает как положено , он внезапно попадает в метод didCancel
() его AVSpeechSynthesizerDelegte и перестает работать навсегда! Даже didCancel
больше никогда не вызывается, или любой из других методов делегата называется synthesizer.speak(utterance)
, просто заметьте.
Я попытался присвоить ссылку на синтезатор новому экземпляру AVSpeechSynthesizer внутри этого метода didCancel
, но это не оказало на него никакого влияния, после того как метод didCancel
накопился, единственное, что «заставит его вернуться», — это снова запустить приложение, а затем снова после использования метода синтезатора для примерно 200 вызовов он снова становится сломанным. это мой код:
var synthesizer:AVSpeechSynthesizer! = AVSpeechSynthesizer()
override func viewDidLoad() {
synthesizer.delegate = self
}
func speakText(utterance: AVSpeechUtterance ) {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default, options: .mixWithOthers)
try AVAudioSession.sharedInstance().setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("audioSession properties weren't set because of an error.")
}
synthesizer.speak(utterance)
print("speak now \(utterance.speechString)")
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance) {
print(" AVSpeechSynthesizerDelegate cancel")
}