AVSpeechSynthesis

sanghee·2022년 5월 2일
0

🍀인턴 스터디

목록 보기
4/12

AVSpeechSynthesis

WWDC18: Making iOS Talk



synthesizer 생성

let synthesizer = AVSpeechSynthesizer()

utterance 생성하고 말하기

utterance는 말, 발화라는 의미이다. 말이 출력되는 것을 확인할 수 있다.

let utterance = AVSpeechUtterance(string: "안녕하세요")
synthesizer.speak(utterance)

AVAudioSession 세팅

AVAudioSession의 싱글톤 객체로 접근해 세팅할 수 있다.

mixWithOthers 옵션은 다른 오디오와 혼합되어도 좋을 때, duckOthers 옵션은 다른 오디오를 피하고 싶을 때 사용한다.

AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .duckOthers)

Delegate 메소드들

  • didStart
  • didFinish
  • didCancel
  • didPause
  • didContinue
  • willSpeakRangeOfSpeechStringcharacterRange

didStart는 의미 그대로, 발화 직후에 호출된다.

synthesizer.delegate = self

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
    print("시작")
}

willSpeakRangeOfSpeechStringcharacterRange

willSpeakRangeOfSpeechStringcharacterRange는 어떤 말을 할 껀지 발화 직전에 호출된다. 언제 쓰일까 궁금했는데, 영상의 demo를 이해했다.

영어 문장에서, 현재 말하고 있는 단어에 밑줄을 실시간으로 표시할 때 사용하였다.

func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance) {
    guard let rangeInString = Range(characterRange, in: utterance.speechString) else { return }
    print("Will speak: \(utterance.speechString[rangeInString])")
}
profile
👩‍💻

0개의 댓글