iyOmSd/Title: Swift

[Swift] TTS 텍스트 음성전환 (AVSpeechSynthesizer)

냄수 2021. 2. 23. 16:39
반응형

문자를 음성으로 읽어주는 기능을 구현해볼거에요

TTS라고하죠

Text To Speech

 

쉽게 설명하면 사전에 발음듣기처럼 해당 단어를 말해주는거구요

 

이번에 사용할 클래스들은

AVFoundation에 있는

 

AVSpeechSynthesizer

AVSpeechUtterance

AVSpeechSynthesisVoice

 

를 사용해볼 거에요

 

AVSpeechSynthesizer

텍스트로부터 합성된 음성을 생성하고

진행중인 음성을 모니터링 하거나 제어 할 수 있는 객체

 

읽기가 끝날 때 혹은 취소할 때 해제된다고 하네요

 

Delegate도 정의되어있는데

  • Speech start
  • Speech finish
  • Character range will be spoken
  • Speech paused
  • Speech continued

원하는상황에 맞게 구현하면되구요

 

특히 Character range 함수에서

현재 읽고있는 문자열을 확인 해볼수 잇어요

print(characterRange) // 읽는 길이
print(utterance.speechString) // 읽는 문자열

 

AVSpeechUtterance

음성합성을위해 텍스트를 캡슐화하는 객체

음성에 영향을 미치는 파라미터를 가지고있음

텍스트를 가지고있고 음성컨트롤(속도, 볼륨, 옥타브)을 할 수 있어요

 

rate 설정시 기본옵션에

AVSpeechUtteranceDefaultSpeechRate  AVSpeechUtternaceMaximumSpeechRate가 있어요

 

여기에 읽고싶은 텍스트를 넣어주고

원하는 음성을 만들어서

위에서 언급한 AVSpeechSynthesizer에 넣어주고 speak() 시켜주면되요

 

이때 speak()는

AVAudioSession을 자동으로 활성화 시켜줘서 따로 setActive와 같은 작업은 안해도 되구요

 

옵션에는

다른 오디오와 혼합되도 좋다 -> mixWithOthers

다른 오디오를 피하고 싶다 -> duckOthers

를 포함한 여러가지 옵션들이 있구요

AVAudioSession.sharedInstance().setCategory(.playback, with: .mixWithOthers)

 

AVSpeechSynthesisVoice

음성합성에 사용하기위한 음성

원하는 언어를 선택할 수 있고

커스텀한 목소리를 설정 할 수도 있다고해요

원하는 목소리들을 설정해놓고 꺼내서 골라쓸 수 있어요

 

한국은 ko-KR 를 사용하구요

 

class TTS: NSObject {
    let speech = AVSpeechSynthesizer()
    var voice: AVSpeechSynthesisVoice!
    var utterance: AVSpeechUtterance!
    
    override init() {
        super.init()
        speech.delegate = self
    }
    func setText(_ s: String) {
        utterance = AVSpeechUtterance(string: s)
        utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")
        speakVoice()
        try? AVAudioSession.sharedInstance().setCategory(.playback, options: .allowBluetooth)
    }
    
    func speakVoice() {
        speech.speak(utterance)
    }
}

 

 

 

참고

developer.apple.com/videos/play/wwdc2018/236

 

AVSpeechSynthesizer: Making iOS Talk - WWDC 2018 - Videos - Apple Developer

Speech can enhance the audio experience of your app, whether you are generating spoken feedback for accessibility, or providing critical...

developer.apple.com

 

반응형