문자를 음성으로 읽어주는 기능을 구현해볼거에요
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
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] UICollectionViewCompositionalLayout (0) | 2021.04.27 |
---|---|
[Swift] 정규식으로 유효성 확인하기 (2) | 2021.03.20 |
[Swift] AVAudioRecord, AVAudioPlayer, AVAudioEngine을 사용한 음성파일 재생, 녹음, 효과음 주기 (2) | 2021.02.19 |
[Swift] CountDown Animation Label 구현 (2) | 2021.02.11 |
[Swift] Google AdMob 커스텀 광고달기 (1) | 2021.01.13 |