[iOS][Swift] TTS(Text To Speech) 구현

니냐뇨·2022년 10월 12일
0

Text To Speech를 아시나요? TTS는 전부터 우리와 함께 했던 기술 중 하나에요. 바로 텍스트를 음성으로 바꿔주는 것입니다.

TTS를 위한 오픈소스들도 많지만 iOS에서 기본 제공되는 프레임워크를 통해서도 쉽게 구현이 가능합니다.

정말 짧고 쉽게 가능해요..!

단, 여기서 주의 할 점은
핸드폰이 무음모드이면 소리가 들리지 않습니다! 무음모드를 해제하고 진행해주세요!


구현

구현 방법에 대해서는 일단 애플 공식 문서에 잘 정리되어 있어요.

일단 AVFoundation을 import 해주셔야 합니다.

import AVFoundation

TTS를 위해서는 AVSpeechSynthesizer와 AVSpeechUtterance 클래스의 인스턴스가 필요합니다.

AVSpeechSynthesizer 아래와 같은데요. 아래에서 보다 싶이 text utterance가 필요한 것을 확인할 수 있고, 이 utterance는 아래의 AVSpeechUtterance를 통해 만들 수 있습니다.

위의 AVSpeechSynthesizer 인스턴스를 만든 뒤에
AVSpeechUtterance를 통해 읽을 텍스트와 언어를 지정해주고 rate를 통해 속도를 조절합니다.
그리고 이 값을 AvSpeechSynthesizer로 초기화한 synthesizer의 speak 메소드로 넘겨주면 끝!

 let synthesizer = AVSpeechSynthesizer()
 let utterance = AVSpeechUtterance(string: "안녕")
 utterance.voice = AVSpeechSynthesisVoice(language: "ko-KR")
 utterance.rate = 0.4
 synthesizer.stopSpeaking(at: .immediate)
 synthesizer.speak(utterance)

저 AVSpeechSynthesisVoice(language: "ko-KR")의 language 부분은 변경이 가능한데요.
이 외에도 지원되는 언어는 이 링크를 확인해주시면 됩니다.

그리고 언어는 BCP 47 code를 통해 표기하시면 됩니다.


한발짝 더

위의 방식으로는 젊은 여성 목소리만 이용가능해서,
이러한 설정 값을 바꿀수는 없을까 찾아보니 목소리의 높이 조절 정도만 가능하고 성별, 나이 등을 바꿀 순 없더라고요.

그래도 뭔가 있지 않을까하여 계속 탐색하다보니 이렇게 gender, age를 설정할 수 있는 AVSpeechSynthesisProviderVoice가 있더라고요.

하지만 이 친구는...macOS 13부터 가능해서 지금 당장 사용할 수 없었습니다...까비

이 친구는 AVSpeechSynthesisProviderAudioUnit과 함께 사용되는거 같더라구요.

이 공식 문서를 활용하여 나중에 13으로 업데이트 한다면 꼭 시도 해봐야겠어요!!

profile
열심히 살자.

0개의 댓글