iOS 16 업데이트를 한 후 출시해두었던 앱들을(HangulKing, HangeulPuzzle) 확인하던 중 TTS가 동작하지 않아 사운드가 출력되지 않고 있는 버그를 확인했다.
iOS 16 업데이트 이후 발생하고 있는 문자열 출력 사운드 관련 버그는 AVSpeechSynthesizer
가 함수 내에 local
로 선언되어 있다면 함수가 종료될 때 할당이 즉시 해제되어 AVSpeechSynthesizer
가 미쳐 speak
를 끝까지 출력하지 못하기 때문에 발생하고 있었다.
그렇기에 AVSpeechSynthesizer
를 함수 내에 local
변수로 선언하는 것이 아니라 instance
로 선언하여 AVSpeechSynthesizer
의 할당이 함수가 종료될 때 해제되지 않도록 하니 해결되었다.
func pronounce(_ letter: String) {
let synthesizer = AVSpeechSynthesizer()
let utterance = AVSpeechUtterance(string: letter)
utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")
utterance.volume = 30
utterance.rate = 0.4
synthesizer.speak(utterance)
}
를
let synthesizer = AVSpeechSynthesizer()
func pronounce(_ letter: String) {
let utterance = AVSpeechUtterance(string: letter)
utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")
utterance.volume = 30
utterance.rate = 0.4
synthesizer.speak(utterance)
}
로 변경하여 해결하였다.