2023. 4. 4. 16:02ㆍVB.NET/왕초보
TTS(Text To Speech)란 텍스트로 쓴 글을 음성으로 읽어주는 기능으로 유튜브나 틱톡등의 영상을 만들때 꼭 필요한 기능이며, 이외에도 자동응답, 식당 포스기, 언어 공부등 다양한 분야에서 활용되고 있는 기술이다. 이번 강좌에서는 이 TTS 기능을 VB.NET에서 어떻게 구현하는지를 살펴보도록 하자. 늘 그렇듯 이번 강좌는 항상 가장 기초적인 부분만을 언급하며, 고도화된 기능은 분야에 맞게 직접 해결해야 한다는점 참고하시기 바란다.
프로젝트는 Microsoft VisualStudio 2022 Community, Windpws Form 앱, .NET 프레임 워크 6.0 (장기지원)에 TTSExam 이라는 이름으로 생성했다.
VB.NET으로 TTS를 이용하기 위해서는 반드시 PC에 해당하는 언어팩이 설치되어 있어야 한다. 이번 강좌에서는 모든 언어들중 대표적이며, 우리나라에서 가장 많이 사용하는 한국어, 영어, 일본어에 대해서 알아볼 것이다. 일단 이들 언어를 사용하기 위해서 윈도우의 [설정 > 시간 및 언어 > 언어] 창에서 언어 추가를 눌러서 아래 그림과 같이 한국어, 영어(미국), 일본어가 모두 보이도록 설치를 먼저 하고 계속해서 강좌를 진행해야 한다.
이제 준비가 됐으니 TTS 기능을 구현해보자. 우선 아래 그림처럼 프로젝트 참조에 Microsoft Speech Object Library 를 추가하자. 버전별로 약간씩 다를 수 있지만 우리가 사용하는데는 문제가 없으니 본인 PC에 있는 항목을 선택하면 된다.
이제 폼에 버튼을 하나 올려놓고 Click 이벤트에 아래 소스를 입력하자. 아... 그전에 소스 맨 위에 SpeechLib를 Imports 해야한다.
Imports SpeechLib
이제 아래 소스를 추가하자.
Dim sync As New SpeechLib.SpVoice
' 한국어
sync.Voice = sync.GetVoices("Language=412", "").Item(0)
sync.Speak("이거 환불 가능해요?")
' 영어 여자
sync.Voice = sync.GetVoices("Language=409;Gender=Female", "").Item(0)
sync.Speak("Is it possible to get a refund for this?")
' 영어 남자
sync.Voice = sync.GetVoices("Language=409;Gender=Male", "").Item(0)
sync.Speak("Is it possible to get a refund for this?")
' 일본어
sync.Voice = sync.GetVoices("Language=411", "").Item(0)
sync.Speak("これは返金可能ですか?")
이제 실행해보면 총 3개의 언어를 나름(?) 원어민 수준으로 읽어준다. 이제 소스를 확인해보자.
Imports SpeechLib
Dim sync As New SpeechLib.SpVoice
참조에 추가한 Microsoft Speech Object Library에서 제공하는 SpeechLib중 TTS를 제공하는 SpVoice형으로 변수를 선언한다.
sync.Voice = sync.GetVoices("Language=412", "").Item(0)
sync.Speak("이거 환불 가능해요?")
이 부분이 이번 강좌의 핵심이다. GetVoices라는 함수를 통해 내 윈도우에서 제공하는 한국어 음성중 첫번째 음성으로 목소리를 설정한 후에, 한국어를 읽는 구문이다. TTS를 처음 접하시는 분들은 약간 어려운 부분일 수도 있는데, 음성을 설정할때는 사용할 언어와 사용할 국가를 모두 설정해줘야 한다. 즉, 이 음성은 한국어는 잘 읽지만 영어나 일본어를 읽을 수는 없는 음성이다. 그래서 언어별로 각기 다른 음성을 설정해야 원어민 발음으로 읽기가 가능해지는 것이다.
여기서 필요한게 412인데 이 값은 한국어를 뜻하는 값이며, 이 글 맨아래 국가별로 값을 적어놨으니 참고하도록 하자.
그다음 Speak 함수를 이용해서 읽어주면 된다. 다른 언어들 모두 동일하며, 영어는 Gender를 통해 남성/여성을 선택할 수도 있다. 첫번째 목소리가 아닌 두번째 목소리는 Item(1)로 설정하면 되는데 대부분의 PC에서는 목소리가 하나밖에 없어서 Nothing을 반환할테니 참고하자.
여기까지 잘 이해가 됐다면 이제 스페인어나 프랑스어로 읽기 위해서는 윈도우에 해당 언어팩을 먼저 설치해야 한다는걸 알아차렸을 것이다. 혹시, 프로그램을 만들어서 배포하게 되면 이 부분을 반드시 신경써줘야 한다. 안그러면 내 PC에서는 제대로 나오는 음성이 고객 PC에서는 안나오는 불상사가 생길테니까...
마치며...
TTS 기능은 정말 다양한 분야에서 사용중이며, 알아두면 반드시 사용할 일이 생기는 기능이므로 정확하게 이해하고 넘어가는 것이 좋다. 덧붙여서 읽는 속도(Rate)를 설정할 수도 있기 때문에 그 활용도가 무궁무진하다고 볼 수 있다. 글씨를 자연스럽게 음성으로 읽어준다는 엄청난(?) 기능임에도 불구하고 구현 방법은 정말 간단하다. 이런식으로 마소에서 지원하는 라이브러리를 제대로만 활용하면 어렵게 느껴졌던 기능들도 쉽게 구현할 수가 있는 것이다.
[참고] SpeechLib에서의 음성 코드표
- 미국 영어: 409
- 영국 영어: 809
- 일본어: 411
- 한국어: 412
- 중국어 (간체): 804
- 중국어 (번체): 404
- 스페인어: 308
- 프랑스어: 40C
- 독일어: 406
- 이탈리아어: 410
'VB.NET > 왕초보' 카테고리의 다른 글
VB.NET 정렬 알고리즘과 예제 코드 (0) | 2023.04.12 |
---|---|
VB.NET에서의 문자열 처리 (0) | 2023.04.09 |
VB.NET - Label의 크기에 맞춰서 글자 크기를 변경하기 (0) | 2023.04.03 |
VB.NET - ToolStrip을 이용한 툴바 생성 (0) | 2023.04.01 |
[VB.NET] 공통대화상자 - FontDialog 사용법 (0) | 2023.03.04 |